Headless Services(无头服务)是一种特殊的service,当不需要负载均衡
以及Service IP
时,可以通过指定Cluster IP(spec.clusterIP)
的值为"None"来创建一个 无头服务(Headless Service)。
无头服务(Headless Service)的例子如下:
apiVersion: v1
kind: Service
metadata:
name: zk-hs
labels:
app: zk
spec:
# 这使得服务成为无头服务
clusterIP: None
ports:
- port: 2888
name: server
- port: 3888
name: leader-election
selector:
app: zk
无头服务有一个很重要的场景是发现所有的pod(包括未就绪的pod)
因为只有准备就绪的pod能够作为服务的后端。但有时希望即使pod没有准备就绪,服务发现机制也能够发现所有匹配服务标签选择器的pod。
kind: Service
metadata:
annotations:
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
所以,一般中间件(如zk集群)的pod之间需要互相识别之后,进行选举状态才会变为就绪,使用无头服务完美的解决这个问题。