Google Cloud Kubernetes Engine:更新服务时保留外部IP地址咨询
解决GKE部署时保留外部API静态IP的问题
我完全懂你的痛点——每次部署都要改DNS太折腾了,尤其是绑定了自有域名之后。核心问题在于默认的LoadBalancer类型Service用的是临时外部IP,删除重建就会失效。解决办法很简单:使用GCP的静态外部IP地址绑定你的Service,这样不管怎么部署,IP都能保持不变。
下面分两种场景给你具体步骤:
一、还未创建Service,提前配置静态IP
申请静态外部IP
先用gcloud命令在集群所在区域创建静态IP(替换成你的集群区域,比如us-central1):gcloud compute addresses create my-api-static-ip --region=us-central1查看刚创建的IP:
gcloud compute addresses list记下输出里
ADDRESS列的IP值。修改Service YAML绑定静态IP
在你的Service配置里添加loadBalancerIP字段,指定刚才的静态IP:apiVersion: v1 kind: Service metadata: name: api-service spec: type: LoadBalancer loadBalancerIP: "192.168.1.100" # 替换成你的静态IP selector: app: your-api-app ports: - protocol: TCP port: 80 targetPort: 8080 # 对应你的Deployment容器端口之后不管你怎么更新Deployment(比如用
kubectl apply -f deployment.yaml),甚至删除重建Service,这个静态IP都会被保留,DNS记录根本不用改。
二、已有运行中的Service,将临时IP转为静态
如果你的Service已经在运行,并且有一个临时外部IP,可以直接把它转为静态:
获取当前Service的临时IP
kubectl get service api-service记下
EXTERNAL-IP列的地址。将临时IP转为静态
用gcloud命令把这个IP注册为静态IP(替换区域和临时IP):gcloud compute addresses create my-api-static-ip --addresses=192.168.1.100 --region=us-central1绑定静态IP到现有Service
可以直接修改YAML文件后kubectl apply,或者用patch命令快速更新:kubectl patch service api-service -p '{"spec":{"loadBalancerIP":"192.168.1.100"}}'
注意事项
- 静态IP是区域绑定的,必须和你的GKE集群在同一个区域,否则无法绑定。
- 静态IP如果没有被任何资源(比如Service)使用,GCP会持续收费,所以如果后续不再需要,记得释放:
gcloud compute addresses delete my-api-static-ip --region=us-central1 - 对于Cloud Endpoints,确保你的Endpoints配置文件里的地址指向这个静态IP或者你的自定义域名,这样后续部署新版本时,Endpoints的路由也不会受影响。
内容的提问来源于stack exchange,提问作者cdudek
相关产品推荐
相关产品推荐

