我能否保证 "kubernetes" 服务在集群创建后将保持一致的 ClusterIP,即使我尝试修改或重新创建它也是如此?

Can I guarantee the "kubernetes" Service will retain a consistent ClusterIP following cluster creation even if I attempt to modify or recreate it?

我们的一些 Pods 通过“kubernetes”服务访问 Kubernetes API。我们正在应用允许访问 K8S API 的网络策略,但我们发现实现此目的的唯一方法是查询“kubernetes”服务的 ClusterIP,并将其包含为 ipBlock在网络策略的出口规则中。

具体来说,这个值:

kubectl get services kubernetes --namespace default -o jsonpath='{.spec.clusterIP}'

“kubernetes”服务 ClusterIP 是否可以更改为集群创建期间初始化的值以外的值?如果是这样,我们的配置可能会中断。我们希望这是不可能的,但我们正在寻找官方支持文档。

简短的回答是否定的。

更多详情:

  • 您不能 change/edit clusterIP,因为它是不可变的...因此 kubectl edit 不适用于此字段。

  • 可以通过kubectl delete -f svc.yaml轻松更改服务集群IP,然后再次kubectl apply -f svc.yaml

  • 因此,永远不要依赖服务 IP,因为服务设计为由 DNS 引用:

    • 如果通信器在同一命名空间内,则使用 service-name
    • 如果通信器在同一命名空间内部或外部,则使用 service-name.service-namespace
    • 使用 service-name.service-namespace.svc.cluster.local 作为 FQDN。

是的,这是可能的

如果在您的服务 yaml 文件中指定 clusterIP(Service.spec.clusterIP),您的服务的 IP 地址将不会随机且始终相同。服务 yaml 应该是这样的:

apiVersion: v1
kind: Service
metadata:
  name: web
  namespace: default
spec:
  clusterIP: 10.96.0.100
  ports:
  - name: https
    port: 443
    protocol: TCP
    targetPort: 80
  type: ClusterIP

注意您选择的 ip 应该在您的集群中未分配。