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

如何通过Terraform为GKE的Kubernetes Ingress绑定静态IP地址?

问题原因
  • 注解与静态IP类型不匹配
    GKE Ingress的两个静态IP绑定注解有严格的适用场景:kubernetes.io/ingress.global-static-ip-name仅适用于全局级外部静态IP,你现有IP为asia-northeast2区域级静态IP,使用全局注解查询时GKE控制器会判定IP不存在。
  • Terraform Ingress资源API版本不兼容
    你使用的kubernetes_ingress资源属于已废弃的旧版本资源,适配较新GKE集群的networking.k8s.io/v1版本Ingress API时,会缺少ingress.class声明等必填配置,导致注解无法被GKE Ingress控制器正确识别。
  • 权限不足(概率较低)
    如果你的GKE集群和静态IP属于不同GCP项目,GKE控制器服务账号没有对应IP的读取权限,也会触发该报错。
修复方案
  1. 匹配IP类型与注解
    如果继续使用现有区域级静态IP,将注解替换为kubernetes.io/ingress.regional-static-ip-name;如果需要使用全局IP,先在GCP VPC控制台创建全局级静态IP再绑定。
  2. 修正Terraform Ingress配置
    使用新版kubernetes_ingress_v1资源,补充Ingress类声明,适配v1 API结构,参考配置如下:
resource "kubernetes_ingress_v1" "test_ingress" {
  metadata {
    name = "test-ingress"
    annotations = {
      # 区域静态IP用该注解
      "kubernetes.io/ingress.regional-static-ip-name" = "test-address"
      # 全局静态IP替换为下面的注解
      # "kubernetes.io/ingress.global-static-ip-name" = "test-address"
      "kubernetes.io/ingress.class" = "gce"
    }
  }

  spec {
    default_backend {
      service {
        name = "test-service"
        port {
          number = 80
        }
      }
    }
  }
}
  1. (跨项目场景)权限配置
    给GKE集群的默认服务账号授予静态IP所属项目的roles/compute.globalAddresses.get(全局IP)或roles/compute.addresses.get(区域IP)权限。

内容的提问来源于stack exchange,提问作者Eric Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:45:03