如何修改EKS集群中kubernetes服务的ClusterIP?
修改EKS集群默认kubernetes服务ClusterIP的可行方案
默认的kubernetes服务是集群初始化时自动生成的核心服务,其ClusterIP属于不可变字段,直接编辑服务或创建同IP的新服务都会被kube-apiserver拒绝,因为该服务由集群控制器自动维护。以下是两种可行的处理方式:
1. 彻底更改:重新创建EKS集群
EKS集群的serviceCIDR在创建后无法修改,而默认kubernetes服务的ClusterIP是serviceCIDR段的第一个IP地址。如果必须替换原IP,只能重新创建集群,在创建时指定自定义的serviceCIDR(比如用eksctl create cluster --service-cidr 172.21.0.0/16),新集群的默认kubernetes服务ClusterIP会自动变为该CIDR的首个IP。
2. 替代方案:创建自定义别名服务
如果不想重建集群,可以创建一个指向kube-apiserver的自定义ClusterIP服务,用新IP替代默认服务的功能:
- 先获取kube-apiserver的实际端点IP:
kubectl get endpoints kubernetes -o jsonpath='{.subsets[0].addresses[*].ip}' - 创建自定义服务的yaml文件(替换示例中的IP为你需要的地址,必须在当前集群的service CIDR范围内):
apiVersion: v1 kind: Service metadata: name: kubernetes-custom spec: clusterIP: 172.20.0.100 ports: - name: https port: 443 protocol: TCP targetPort: 443 type: ClusterIP externalIPs: - 10.19.2.227 - 10.19.1.145 - 应用配置:
之后集群内的Pod即可通过新服务的ClusterIP访问kube-apiserver,实现原服务的替代效果。kubectl apply -f custom-k8s-service.yaml
注意:若之前创建新服务未生效,大概率是因为未正确指定
targetPort、未指向kube-apiserver端点,或者自定义ClusterIP不在当前集群的service CIDR范围内。
内容的提问来源于stack exchange,提问作者Liquid
相关产品推荐
相关产品推荐

