创建有状态负载时,实例间发现服务是指什么?
云容器引擎的实例间发现服务,在原生Kubernetes中称之为Headless Service。Headless Service也是一种Service,但是会在YAML中定义spec.clusterIP: None,也就是不需要Cluster IP的Service。
Headless Service和普通Service的区别
Headless Service使用场景
当某个工作负载的多个Pod之间没有任何区别时,可以使用普通Service,利用集群kube-proxy实现Service的负载均衡,例如常见的无状态应用Nginx。
但是某些应用场景下,工作负载的各个实例间存在不同的角色区别,比如Redis集群,每个Redis实例都是不同的,它们之间存在主从关系,并且需要相互通信。这种情况下,使用普通Service无法通过Cluster IP来保证访问到某个指定的实例,因此需要设置Headless Service直接访问Pod的真实IP地址,实现Pod间互相访问。
Headless Service一般结合StatefulSet来部署有状态的应用,比如Redis集群、MySQL集群等。