什么是kubernetes的无头服务(Headless Services)?什么情况下使用?

無名 发表于: 2021-11-18   最后更新时间: 2021-11-18 19:35:28   5,709 游览

我看了service,负载均衡,但是不太理解无头服务(Headless Services)用于什么场景,仅仅是为了没有负载ip吗?

发表于 2021-11-18

中间件场景(识别未就绪的pod)

无头服务有一个很重要的场景是发现所有的pod(包括未就绪的pod),只有准备就绪的pod能够作为服务的后端。但有时希望即使pod没有准备就绪,服务发现机制也能够发现所有匹配服务标签选择器的pod。

比如zk集群,zk节点pod之间必须互相识别之后进行选举,pod状态才会变为就绪,使用无头服务完美的解决这个问题。

当不需要负载均衡以及Service IP

还是以zk场景为例,zk节点之间通讯的端口是28883888,确实也不需要负载均衡以及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平台也不会给他创建负载均衡。

你的答案

查看kubernetes相关的其他问题或提一个您自己的问题