我看了service,负载均衡,但是不太理解无头服务(Headless Services)用于什么场景,仅仅是为了没有负载ip吗?
发表于 2021-11-18
我看了service,负载均衡,但是不太理解无头服务(Headless Services)用于什么场景,仅仅是为了没有负载ip吗?
中间件场景(识别未就绪的pod)
无头服务有一个很重要的场景是发现所有的pod(包括未就绪的pod),只有准备就绪的pod能够作为服务的后端。但有时希望即使pod没有准备就绪,服务发现机制也能够发现所有匹配服务标签选择器的pod。
比如zk集群,zk节点pod之间必须互相识别之后进行选举,pod状态才会变为就绪,使用无头服务完美的解决这个问题。
当不需要
负载均衡
以及Service IP
时还是以zk场景为例,zk节点之间通讯的端口是
2888
和3888
,确实也不需要负载均衡
以及Service IP
。而提供给客户端的端口是
2181
,只有它需要,所以结合以上2个场景:无头服务(用于zk pod之间彼此的通讯和选举的):
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
正常的service给客户端的(需要负载均衡和cluster ip的):
apiVersion: v1 kind: Service metadata: name: zk-cs labels: app: zk spec: ports: - port: 2181 name: client selector: app: zk
参考来自:
1、无头服务用于服务发现机制的项目或者中间件,如kafka和zookeeper之间进行leader选举,采用的是实例之间的实例IP通讯。
2、既然不需要负载均衡,则就不需要Cluster IP,如果没有Cluster IP则kube-proxy 不会处理它们, 并且kubernetes平台也不会给他创建负载均衡。
你的答案