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

GCP Kubernetes v1.22配置HTTP到HTTPS重定向报错解决

问题根因

你混淆了两类完全独立的API废弃规则:

  • kubent扫描出的v1.22版本废弃API,是Kubernetes原生Ingress资源使用的networking.k8s.io/v1beta1,该版本确实需要替换为networking.k8s.io/v1
  • 你修改的FrontendConfig是GKE独有的自定义资源(CRD),属于networking.gke.ioAPI组,这个资源的v1beta1版本在GKE 1.22版本中并没有被移除,你之前修改apiVersion触发的两个报错均为改法错误导致:
    • 把apiVersion写成networking.gke.io/v1报错,是因为GKE的FrontendConfig从未发布过v1稳定版,REST mapper找不到对应资源定义
    • 把apiVersion写成networking.k8s.io/v1报错,是因为原生Kubernetes networking API组根本不存在FrontendConfig这个资源类型
正确操作步骤
  • 第一步:将Terraform中nginx_frontend_config资源的apiVersion恢复为原有值networking.gke.io/v1beta1,该配置在GKE 1.22及后续多个稳定版本中均合法可用,无需修改。
  • 第二步:处理kubent实际扫描出的废弃资源:elastic命名空间下名为kibana-kibana的Ingress资源,将它的apiVersion从networking.k8s.io/v1beta1替换为networking.k8s.io/v1,同时调整适配v1版本Ingress的字段结构:
    • v1版本Ingress不再支持直接在backend下写serviceName、servicePort字段,需要嵌套为service.name和service.port.number/name结构
    • 关联FrontendConfig的注解写法不需要调整,仍使用networking.gke.io/v1beta1.FrontendConfig指定对应配置名称即可
    • 旧版本中通过kubernetes.io/ingress.class注解指定Ingress类的写法,需要替换为spec.ingressClassName字段
  • 第三步:配置校验
    先执行kubectl apply --dry-run=server测试Ingress、FrontendConfig配置合法性,再执行terraform plan确认无异常资源漂移后再应用变更。
可直接参考的Terraform配置示例
# FrontendConfig保持原有v1beta1配置即可,无需修改apiVersion
resource "kubernetes_manifest" "nginx_frontend_config" {
  manifest = {
    "apiVersion" = "networking.gke.io/v1beta1"
    "kind"       = "FrontendConfig"
    "metadata" = {
      "name"      = "nginx-frontend-config"
      "namespace" = kubernetes_namespace.nginx.metadata[0].name
    }
    "spec" = {
      "redirectToHttps" = {
        "enabled"          = true
        "responseCodeName" = "FOUND"
      }
      "sslPolicy" = google_compute_ssl_policy.default.name
    }
  }
}

# 需要修改apiVersion的是关联的Ingress资源
resource "kubernetes_manifest" "kibana_ingress" {
  manifest = {
    "apiVersion" = "networking.k8s.io/v1"
    "kind"       = "Ingress"
    "metadata" = {
      "name"      = "kibana-kibana"
      "namespace" = "elastic"
      "annotations" = {
        # 关联FrontendConfig的注解不需要调整
        "networking.gke.io/v1beta1.FrontendConfig" = "nginx-frontend-config"
      }
    }
    "spec" = {
      "ingressClassName" = "gce"
      "tls" = [
        {
          "hosts"      = ["kibana.your-domain.com"]
          "secretName" = "kibana-tls-secret"
        }
      ]
      "rules" = [
        {
          "host" = "kibana.your-domain.com"
          "http" = {
            "paths" = [
              {
                "path"     = "/*"
                "pathType" = "ImplementationSpecific"
                "backend" = {
                  "service" = {
                    "name" = "kibana-kibana"
                    "port" = {
                      "number" = 5601
                    }
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

补充说明:GKE的FrontendConfig目前长期处于v1beta1版本是正常状态,该CRD的版本迭代节奏和Kubernetes原生Ingress API的废弃计划完全独立,不需要强行将其apiVersion修改为不存在的v1版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:24:22