我不确定kubernetes中的哪个组件做这样的工作。可能是kube-api-server
或kube-controller-manager
,因为它们都有一个名为:"service-cluster-ip-range".
我想知道是否分配可以禁用?
感谢不确定禁用分配究竟是什么意思,但是您也可以使用spec.ClusterIP
和None
的值以无头模式使用服务。这允许您使用其他服务发现机制,而无需通过直接使用pod地址绑定到Kubernetes的实现。例子:
apiVersion: v1
kind: Service
metadata:
name: headless-svc
spec:
clusterIP: None
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: 8080
首先,我将解释为什么要分配ClusterIP:
Kubernetes Service是一个抽象,它定义了一组运行在集群某处的pod逻辑集合,它们都提供相同的功能。当创建时,每个服务被分配一个唯一的IP地址(也称为clusterIP)。此地址与服务的生命周期绑定,并且不会更改只要情报局还活着pod可以配置为与Service对话,并且知道与Service的通信将自动负载均衡到作为Service成员的某个pod。
ClusterIP是在创建Kubernetes服务时设计创建的。在服务处于活动状态时也不可能更改它。不可能简单地关闭地址分配。IP地址从api-server
和kube-controller
config中配置的--service-cluster-ip-range
池中分配。
用户Qasim Sarfraz的回答很好。这实际上是对ClusterIP执行任何操作的唯一选项:
您可以使用无头服务与其他服务发现机制接口,而无需绑定到Kubernetes的实现。
参见:
- 在Kubernetes中构建无头服务
- 对栈上无头服务的解释
- 服务和pod的DNS
经过一番研究,最后我发现cluster ip
是由kube-api-server
分配的:它在将对象存储到etcd之前分配了验证cluster ip
!
查看链接:https://pkg.go.dev/k8s.io/kubernetes/pkg/registry/core/service@v1.22.1
,您也可以在github上的kubernetes
存储库中找到相关代码。
所以我猜它不能被禁用:)