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

GCP如何将Kubernetes集群TCP负载均衡切换为HTTP(S)七层负载均衡

GCP GKE环境下ingress-nginx前端LB从四层TCP切换为七层HTTP(S)操作步骤

你当前默认部署生成TCP负载均衡的原因是:ingress-nginx Helm Chart默认将Controller Service设置为LoadBalancer类型,GCP云控制器会为这类Service默认创建四层TCP网络负载均衡。要切换为七层HTTP(S)负载均衡,按以下入门步骤操作即可:

前置检查

  • 确认GKE集群版本≥1.17,支持网络端点组(NEG)能力,这是GCP七层LB对接Pod工作负载的必需条件
  • 确认操作集群的账号拥有负载均衡创建、NEG管理、防火墙规则配置的对应权限
  • 如果需要固定访问IP,提前在GCP控制台预留全局类型的静态公网IP(七层LB不支持区域IP);如果需要HTTPS,提前上传SSL证书或创建GCP托管证书

步骤1:清理现有ingress-nginx部署

先删除当前已部署的ingress-nginx实例,避免残留旧的四层LB资源占用配额,执行时替换为你实际的release名称和命名空间:

helm uninstall <你的ingress-nginx-release名称> -n <ingress部署的命名空间>

步骤2:重新部署ingress-nginx,适配七层LB对接配置

重新安装ingress-nginx时传入核心参数,将Controller Service调整为ClusterIP类型,开启NEG暴露,让GCP七层LB可以直接对接Pod端点。可以直接用以下Helm命令安装,按需注释/调整可选参数:

helm install ingress-nginx ingress-nginx/ingress-nginx \
  -n ingress-nginx --create-namespace \
  --set controller.service.type=ClusterIP \
  --set controller.publishService.enabled=false \
  --set controller.ingressClassResource.default=true \
  --set controller.service.annotations."cloud\.google\.com/neg"='{"exposed_ports": {"80":{"name": "nginx-80-neg"},"443":{"name": "nginx-443-neg"}}}' \
  # 可选:指定健康检查路径,避免七层LB健康检查失败
  --set controller.service.annotations."cloud\.google\.com/healthcheck-path"="/healthz" \
  --set controller.service.annotations."cloud\.google\.com/healthcheck-port"="10254"

步骤3:创建根Ingress触发GCP生成七层LB

GCP原生七层HTTP(S)负载均衡由GCE Ingress控制器自动管理,你需要创建一个根Ingress资源,将所有入口流量转发到ingress-nginx Controller,控制器收到资源后会自动创建对应的七层LB。
新建gcp-l7-ingress.yaml文件,内容如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: gcp-l7-lb-root
  namespace: ingress-nginx
  annotations:
    # 指定使用GCP原生GCE Ingress控制器驱动七层LB
    kubernetes.io/ingress.class: "gce"
    # 可选:关闭HTTP访问,强制跳转HTTPS
    # kubernetes.io/ingress.allow-http: "false"
    # 可选:绑定GCP托管SSL证书,多个证书用逗号分隔
    # networking.gke.io/managed-certificates: "你的托管证书名称"
spec:
  # 可选:绑定提前预留的全局静态IP名称
  # static-ip-name: "你的全局静态IP名称"
  defaultBackend:
    service:
      name: ingress-nginx-controller
      port:
        number: 80

执行命令应用配置:

kubectl apply -f gcp-l7-ingress.yaml

步骤4:验证配置生效

  • 执行kubectl get ingress gcp-l7-lb-root -n ingress-nginx,等待5-10分钟,当ADDRESS字段显示公网IP时,代表七层LB已经创建完成
  • 进入GCP控制台负载均衡页面,确认新建负载均衡类型为HTTP(S)负载均衡,而非之前的TCP负载均衡
  • 将业务域名解析到该LB的公网IP,访问验证业务流量正常转发即可

常见问题排查

  • 如果LB长时间未分配IP,执行kubectl describe ingress gcp-l7-lb-root -n ingress-nginx,查看Events栏的报错信息,常见问题包括权限不足、静态IP类型错误、证书不存在
  • 如果访问LB返回502错误,先检查NEG端点健康状态:确认七层LB的健康检查配置和你在Service注解中指定的/healthz路径、10254端口一致,且防火墙放通了LB健康检查的IP段
  • 如果部分路径转发异常,检查你自己的业务Ingress规则是否正确关联了ingress-nginx的IngressClass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 12:39:16