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

如何为GKE L7区域内部负载均衡网关配置HTTPS?

问题定位与修复方案

核心问题分析

从你的配置和现象来看,ILB后端服务异常的根源是健康检查配置不匹配,同时HTTPRoute的路由规则未明确覆盖HTTPS流量转发逻辑,以下是具体问题和修复步骤:

1. 健康检查策略与Pod实际服务不匹配

你的HealthCheckPolicy配置为HTTPS类型,但实际Pod仅提供HTTP服务(HTTP可正常访问),HTTPS健康检查会直接失败,导致ILB标记后端为异常。

修复方法:将健康检查改为HTTP类型:

apiVersion: networking.gke.io/v1
kind: HealthCheckPolicy
metadata:
  name: ${var.service_name}-healthcheck-http
  namespace: ${kubernetes_namespace_v1.this.metadata[0].name}
spec:
  default:
    checkIntervalSec: 10
    timeoutSec: 5
    healthyThreshold: 3
    unhealthyThreshold: 3
    logConfig:
      enabled: true
    config:
      type: HTTP
      httpHealthCheck:
        port: ${var.service_target_port}
        requestPath: /
  targetRef:
    group: ""
    kind: Service
    name: ${var.service_name}

2. HTTPRoute未明确绑定HTTPS监听器

当前HTTPRoute仅默认关联Gateway的HTTP监听器,HTTPS流量无法匹配到路由规则,需明确绑定两个监听器:

修改HTTPRoute配置:

kind: HTTPRoute
apiVersion: gateway.networking.k8s.io/v1beta1
metadata:
  name: ${var.service_name}-httproute
  namespace: ${kubernetes_namespace_v1.this.metadata[0].name}
  labels: 
    gateway: ${kubernetes_manifest.gateway.object.metadata.name}
spec:
  parentRefs:
  - kind: Gateway
    name: ${kubernetes_manifest.gateway.object.metadata.name}
    sectionName: http-listener # 绑定HTTP监听器
  - kind: Gateway
    name: ${kubernetes_manifest.gateway.object.metadata.name}
    sectionName: https-listener # 绑定HTTPS监听器
  hostnames:
  - "${var.service_name}.myapp.com"
  rules:
  - backendRefs:
    - name: ${kubernetes_service.this.metadata[0].name}
      port: ${var.service_port} # Gateway已终止TLS,后端走HTTP端口即可

3. 移除冗余的Service HTTPS端口

你的Service中配置的443端口属于冗余项——Gateway已在前端完成TLS终止,后端仅需通过HTTP端口转发流量,该端口会导致路由混淆,建议删除:

简化Service配置:

resource "kubernetes_service" "this" {
  metadata {
    name      = var.service_name
    namespace = kubernetes_namespace_v1.this.metadata[0].name
  }
  spec {
    type = "NodePort"
    selector = {
      app = var.service_name
    }

    port {
      name         = "port-http"
      protocol     = "TCP"
      port         = var.service_port
      target_port  = var.service_target_port
      app_protocol = "HTTP"
    }
  }
  provider = kubernetes.gke
}

4. 额外验证点

  • 确认自签名证书Secret格式正确:必须包含tls.crt(证书内容)和tls.key(私钥内容),且与Gateway处于同一Namespace。
  • 检查VPC防火墙规则:确保ILB后端服务的IP段(可从GCP控制台ILB详情获取)能访问Pod的8501端口,当前0.0.0.0/0规则已覆盖,可按需缩小范围。
  • 验证私有DNS解析:在VPN客户端执行nslookup ${var.service_name}.myapp.com,确认能正确解析到指定静态IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:16:18