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

在Google Kubernetes Engine中用自定义Ingress控制器能否跨区域负载均衡?如何实现?

在GKE中用ingress-nginx实现跨区域负载均衡

当然可以!完全不用局限于GCE原生的ingress-gce,用ingress-nginx照样能搞定GKE的跨区域负载均衡——只是实现逻辑和原生Ingress不太一样,核心是靠GCP的全球负载均衡器(GLB)做前端入口,把流量转发到分布在不同区域的GKE集群里的ingress-nginx控制器上。下面是具体的实操步骤:

1. 先搭好跨区域的GKE集群

  • 先在至少两个不同的GCP区域(比如us-central1和europe-west1)创建GKE集群,记得开启必要的API(比如compute.googleapis.com、container.googleapis.com),而且集群节点得有公网访问权限(或者配置云NAT让节点能拉取镜像、和GLB通信)。
  • 每个集群都要装上ingress-nginx控制器,这里推荐用NodePort类型的服务来暴露控制器,方便后续GLB统一配置端口:
    # 先添加ingress-nginx的Helm仓库
    helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
    helm repo update
    
    # 安装ingress-nginx,指定固定NodePort端口
    helm install ingress-nginx ingress-nginx/ingress-nginx \
      --namespace ingress-nginx \
      --create-namespace \
      --set controller.service.type=NodePort \
      --set controller.service.nodePorts.http=30080 \
      --set controller.service.nodePorts.https=30443
    
    固定端口是为了后续GLB配置时不用每次找随机的NodePort,省事儿。

2. 配置GCP全球负载均衡器(GLB)

这一步是跨区域负载的核心,GLB会作为公网入口,把流量分发到各个区域的集群:

2.1 创建后端服务

  • 给每个区域的GKE集群创建一个后端服务,关联该集群的节点组,端口填我们刚才设置的30080(HTTP)和30443(HTTPS)。
  • 开启后端服务的跨区域负载均衡选项,按需配置会话亲和性(比如需要用户会话绑定到某个集群的话,选基于Cookie的亲和性),还要配置健康检查——检查路径设为/healthz,端口30080,这样GLB能自动剔除不健康的集群节点。

2.2 配置URL映射与目标代理

  • 创建URL映射,把请求路径对应到后端服务(如果所有流量都要分发到所有集群,直接把默认路由指向包含所有后端的服务组就行)。
  • 要是用HTTPS的话,先在GCP上申请托管SSL证书,然后创建HTTP(S)目标代理,关联URL映射和SSL证书;HTTP的话直接创建HTTP目标代理就行。

2.3 创建全球转发规则

  • 申请一个静态公网IP(或者用已有的),创建全球转发规则,把这个IP绑定到目标代理,监听80和443端口——这时候这个静态IP就是你的跨区域服务入口了。

3. 配置每个集群的Ingress规则

  • 在每个GKE集群里创建Ingress资源,指向你的业务服务(比如你的应用Deployment对应的Service),确保Ingress的规则和GLB的URL映射匹配。举个例子:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cross-region-app-ingress
      annotations:
        nginx.ingress.kubernetes.io/rewrite-target: /
    spec:
      ingressClassName: nginx
      rules:
      - host: your-domain.com  # 换成你的域名,要解析到GLB的静态IP
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: your-app-service  # 你的业务服务名称
                port:
                  number: 80
    

4. 验证跨区域流量

  • 用不同地区的客户端访问你的域名,比如用海外的服务器或者代理工具,然后查看各个集群的ingress-nginx日志,或者去GCP负载均衡的监控面板,就能确认流量是不是被分发到了不同区域的集群里。

几个额外的注意事项

  • SSL终止位置:推荐让GLB来处理HTTPS终止,这样流量在公网是加密的,到集群内部可以用HTTP;如果一定要让ingress-nginx处理SSL,那就要在每个集群的Ingress里配置证书。
  • 健康检查:一定要确保GLB的健康检查能正常探测到ingress-nginx的/healthz路径,不然某个区域的集群出问题了,GLB还会往那发流量。
  • 成本:全球负载均衡器会有额外的计费项,比如跨区域流量费用,记得提前了解GCP的计费规则。

内容的提问来源于stack exchange,提问作者me.at.coding

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:48:29