GKE默认Ingress控制器下,多仓库如何用多Ingress实现扇出路由?
多仓库分管理GKE Ingress路由(共用LB)方案
在GKE上用默认的GCP Ingress控制器实现多仓库独立维护Ingress路由、共用同一个负载均衡器和子域名,核心是利用GCP Ingress对多Ingress资源的自动合并特性,具体操作如下:
1. 统一Ingress类与主机名
两个仓库的Ingress资源必须满足两个关键条件,才能被GCP控制器合并到同一个LB:
- 都指定GKE默认的Ingress类:
spec.ingressClassName: gce(旧版本用注解kubernetes.io/ingress.class: gce) - 都设置同一个子域名作为
spec.rules.host
2. 各自定义专属路由规则
每个仓库只维护自身服务的路由路径,无需关心其他服务的配置:
仓库1(API服务)的Ingress示例
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: api-ingress namespace: default # 可根据实际命名空间调整 spec: ingressClassName: gce rules: - host: app.example.com http: paths: - path: /api/* pathType: ImplementationSpecific backend: service: name: api-service port: number: 80
仓库2(UI服务)的Ingress示例
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ui-ingress namespace: default # 可根据实际命名空间调整 spec: ingressClassName: gce rules: - host: app.example.com http: paths: - path: /* pathType: ImplementationSpecific backend: service: name: ui-service port: number: 80
3. 共享HTTPS证书(可选)
如果需要启用HTTPS,两个Ingress可以共用同一个证书资源:
- 方式一:使用GCP托管证书,先创建
ManagedCertificate资源,然后在两个Ingress的tls字段中引用它:
# 新增的ManagedCertificate示例(可放在任意仓库,或单独的配置仓库) apiVersion: networking.gke.io/v1 kind: ManagedCertificate metadata: name: app-cert spec: domains: - app.example.com # 在两个Ingress的spec中添加tls配置 spec: tls: - hosts: - app.example.com secretName: app-cert # 这里secretName对应ManagedCertificate的名字,GCP会自动生成证书并关联
- 方式二:使用自定义证书Secret,两个Ingress引用同一个Secret即可。
验证与优势
- 部署后执行
kubectl get ingress,会看到两个Ingress的ADDRESS字段是同一个LB地址,说明合并成功 - 每个仓库部署后可单独验证路由:比如API部署后直接测试
app.example.com/api/xxx是否正常,无需依赖UI服务的配置 - 完全隔离各服务的路由配置,避免单个仓库维护全量Ingress的耦合问题
注意事项
- 路径不能冲突:两个Ingress不能定义完全相同的路径(如都定义
/api/*),否则会导致路由异常,需提前规划好路径前缀 - 跨命名空间访问:如果服务分布在不同命名空间,需要确保Ingress所在命名空间能访问到目标服务(可通过Service的跨 namespace 引用实现)
- 合并延迟:GCP Ingress合并多Ingress资源需要1-2分钟,部署后请等待片刻再验证
内容的提问来源于stack exchange,提问作者Matthew Vines
相关产品推荐
相关产品推荐

