谁在kubernetes中给服务分配了ClusterIP,能禁用吗?

Who assign ClusterIP to service in kubernetes, could it be disabled?

我不确定 kubernetes 中的哪个组件做这样的工作。 可能 kube-api-serverkube-controller-manager,因为它们都有一个名为的参数: “服务集群 IP 范围”。

而且我想知道是否可以禁用分配?

谢谢

不确定禁用分配的确切含义,但您也可以使用 spec.ClusterIPNone 的值来使用 headless mode 中的服务。这允许您使用其他服务发现机制,而无需通过直接使用 pods 地址来绑定到 Kubernetes 的实现。示例:

apiVersion: v1
kind: Service
metadata:
  name: headless-svc
spec:
  clusterIP: None 
  selector:
    app: web
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

一开始我会完全解释why ClusterIP is assigned:

A Kubernetes Service is an abstraction which defines a logical set of Pods running somewhere in your cluster, that all provide the same functionality. When created, each Service is assigned a unique IP address (also called clusterIP). This address is tied to the lifespan of the Service, and will not change while the Service is alive. Pods can be configured to talk to the Service, and know that communication to the Service will be automatically load-balanced out to some pod that is a member of the Service.

ClusterIP 是在创建 Kubernetes 服务时按设计创建的。在服务处于活动状态时也无法更改它。不可能简单地关闭地址分配。 IP 地址是从 --service-cluster-ip-range 池中分配的,该池在 api-serverkube-controller 配置中配置。

用户Qasim Sarfraz的回答很好。这确实是使用 ClusterIP 做任何事情的唯一选择:

You can use a headless Service to interface with other service discovery mechanisms, without being tied to Kubernetes' implementation.

另请参阅:

经过一些研究,最后我发现 cluster ip 是由 kube-api-server 分配的:它在将对象存储到 etcd 之前分配验证 cluster ip

参见link:https://pkg.go.dev/k8s.io/kubernetes/pkg/registry/core/service@v1.22.1

您还可以在 github 上的 kubernetes 存储库中找到相关代码。

所以我想它不能被禁用:)