You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Cloud Kubernetes Engine:更新服务时保留外部IP地址咨询

解决GKE部署时保留外部API静态IP的问题

我完全懂你的痛点——每次部署都要改DNS太折腾了,尤其是绑定了自有域名之后。核心问题在于默认的LoadBalancer类型Service用的是临时外部IP,删除重建就会失效。解决办法很简单:使用GCP的静态外部IP地址绑定你的Service,这样不管怎么部署,IP都能保持不变。

下面分两种场景给你具体步骤:

一、还未创建Service,提前配置静态IP

  1. 申请静态外部IP
    先用gcloud命令在集群所在区域创建静态IP(替换成你的集群区域,比如us-central1):

    gcloud compute addresses create my-api-static-ip --region=us-central1
    

    查看刚创建的IP:

    gcloud compute addresses list
    

    记下输出里ADDRESS列的IP值。

  2. 修改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,可以直接把它转为静态:

  1. 获取当前Service的临时IP

    kubectl get service api-service
    

    记下EXTERNAL-IP列的地址。

  2. 将临时IP转为静态
    用gcloud命令把这个IP注册为静态IP(替换区域和临时IP):

    gcloud compute addresses create my-api-static-ip --addresses=192.168.1.100 --region=us-central1
    
  3. 绑定静态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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:40:11