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

能否为GKE的Ingress与LoadBalancer Service共用同一IP?

同一IP共用Ingress(HTTPS API)与TCP LoadBalancer服务的解决方案

在GKE场景下要让全局IP的HTTP负载均衡(Ingress)和区域IP的TCP负载均衡共用同一IP,核心思路是放弃分开的区域TCP LB,改用全局外部负载均衡器(GXLB)统一承载两种流量,或者借助CDN做流量转发分路,以下是具体可行方案:

方案一:用全局外部负载均衡器(GXLB)统一处理混合协议流量

这是GCP原生的最优方案,利用GXLB支持多协议(HTTP/S、TCP/UDP)的特性,将两种服务绑定到同一个静态全局IP上:

  1. 预留静态全局IP
    先创建一个供GXLB使用的静态全局IP:

    gcloud compute addresses create shared-global-ip --global
    

    记录该IP地址,后续将域名解析指向它。

  2. 配置HTTPS API服务的后端

    • 将API服务部署为NodePort类型的Service(GXLB仅支持对接NodePort或实例组,无法直接用ClusterIP)。
    • 创建BackendConfig资源,配置健康检查、SSL终止规则(如需在LB层完成HTTPS终止),并关联到该NodePort Service。
    • 在GXLB中创建HTTP(S)转发规则,绑定预留的全局IP,设置和原Ingress一致的路径路由规则,将流量导向API服务后端。同时绑定域名对应的SSL证书(可使用Google托管证书或自行上传)。
  3. 配置TCP SSL服务的后端

    • 将TCP服务同样部署为NodePort类型的Service。
    • 在同一个GXLB中添加TCP协议的转发规则,指定一个独立端口(比如8443,避免和HTTPS的443端口冲突),将流量转发到TCP服务的NodePort。如果需要在LB层终止TCP SSL,可将证书上传到GCP证书管理器并绑定到该TCP转发规则;若由后端服务自行处理SSL握手,直接转发原始TCP流量即可。

最终效果:同一个全局IP下,443端口处理HTTPS API流量,8443端口处理TCP SSL流量。用户通过https://your-domain.com/path访问API,通过your-domain.com:8443访问TCP服务。

方案二:借助CDN做流量分路(第三方方案)

如果不想改动GKE内部的负载均衡架构,可使用Cloudflare等CDN服务作为统一入口:

  • 将域名的DNS解析到CDN的接入IP。
  • 在CDN控制台配置路由规则:
    • 将443端口的HTTPS请求转发到原Ingress的全局IP。
    • 将指定端口(比如8443)的TCP请求转发到原TCP LoadBalancer的区域IP。
      CDN会根据端口/协议自动分流,用户感知到的仍是同一个域名+不同端口的访问方式。

关键注意点

  • 同一IP下无法用同一端口同时承载HTTPS和TCP流量,因为负载均衡器无法区分两种协议的数据包,必须通过不同端口区分。
  • 如果强制要求同一端口,只能在应用层做协议识别(比如单个服务同时处理HTTPS和TCP连接),但这种方式复杂度极高,不推荐在生产环境使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:20:44