文档首页/ 云容器引擎 CCE/ 用户指南(安卡拉区域)/ 常见问题/ 工作负载/ 其他/ 创建有状态负载时,实例间发现服务是指什么?
更新时间:2024-12-04 GMT+08:00

创建有状态负载时,实例间发现服务是指什么?

云容器引擎的实例间发现服务,在原生Kubernetes中称之为Headless Service。Headless Service也是一种Service,但是会在YAML中定义spec.clusterIP: None,也就是不需要Cluster IP的Service。

Headless Service和普通Service的区别

  • 普通Service:

    一个Service可能对应多个EndPoint(Pod),client访问的是Cluster IP,通过iptables或IPVS规则转到Real Server,从而达到负载均衡的效果。例如:Service有2个EndPoint,但是DNS查询时只会返回Service的地址,具体client访问的是哪个Real Server,是由iptables或IPVS规则来决定的,客户端无法自行选择访问指定的EndPoint。

  • Headless Service:

    访问Headless Service时,DNS查询会如实的返回每个真实的EndPoint(Pod的IP地址)。对应到每一个EndPoints,即每一个Pod,都会有对应的DNS域名;这样Pod之间就可以互相访问,达到实例间发现和访问的效果。

Headless Service使用场景

当某个工作负载的多个Pod之间没有任何区别时,可以使用普通Service,利用集群kube-proxy实现Service的负载均衡,例如常见的无状态应用Nginx。

但是某些应用场景下,工作负载的各个实例间存在不同的角色区别,比如Redis集群,每个Redis实例都是不同的,它们之间存在主从关系,并且需要相互通信。这种情况下,使用普通Service无法通过Cluster IP来保证访问到某个指定的实例,因此需要设置Headless Service直接访问Pod的真实IP地址,实现Pod间互相访问。

Headless Service一般结合StatefulSet来部署有状态的应用,比如Redis集群、MySQL集群等。