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

Kubernetes/GKE多租户Ingress实现疑问:单Ingress集群部署相关问题

GKE多租户场景下单一Ingress模式落地指南

一、模式落地核心思路

基于主机名(Host)路由划分实现租户隔离:平台维护全局唯一的Ingress对象,通过host字段匹配不同租户的子域名(如service1.tenanta.example.com),将流量精准转发到对应租户命名空间内的Service。核心依赖两个关键点:

  • 集群级RBAC权限控制,确保租户仅能操作自身命名空间资源
  • 平台统一管控Ingress的全局配置(如TLS证书、负载均衡器绑定)

二、单一Ingress的生命周期

  1. 初始化创建:由平台运维团队在集群部署阶段创建,绑定GKE的Google Cloud Load Balancer(GCLB),配置全局基础规则(如平台自身服务路由、通配符TLS证书)。
  2. 日常维护:
    • 平台负责Ingress的核心配置变更(如证书更新、负载均衡器参数调整)
    • 租户提交路由注册申请后,平台审核并更新Ingress的spec.rules字段,添加对应租户的路由规则
  3. 销毁:仅平台团队有权操作,仅在集群退役或整体架构调整时删除Ingress对象及关联的负载均衡器资源。

三、Ingress的创建与维护主体

明确由平台运维团队创建并全权维护:

  • 单一Ingress属于集群级共享资源,若开放给租户修改,极易引发路由冲突、配置错误等跨租户影响
  • 平台团队负责制定路由规范(如子域名命名规则:[服务名].[租户名].example.com)、审核租户路由申请、保障Ingress的高可用性

四、租户服务注册到Ingress的流程

常规流程(适合中小规模集群)

  1. 租户在自身命名空间内部署Service(确保Service已正常运行)
  2. 租户提交路由注册申请,包含以下信息:
    • 期望的访问域名(如service1.tenanta.example.com)
    • 自身命名空间名称、Service名称及端口
  3. 平台团队审核域名唯一性、Service合法性后,更新全局Ingress的规则配置

自动化流程(适合大规模集群)

通过自定义CRD(如TenantIngressRoute)+ 平台控制器实现自动注册:

  1. 平台定义自定义CRD,允许租户在自身命名空间内提交路由规则
  2. 平台部署控制器,监听所有租户命名空间的TenantIngressRoute资源,自动合并规则到全局Ingress
  3. 租户只需在自身命名空间创建CRD实例,无需人工审核(需提前约定域名规则避免冲突)

示例配置

1. 平台创建的全局Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: shared-gke-ingress
  namespace: platform-system
  annotations:
    kubernetes.io/ingress.class: "gce"
    networking.gke.io/managed-certificates: "wildcard-example-com" # GKE托管通配符证书
spec:
  tls:
  - hosts:
    - "*.example.com"
    secretName: wildcard-example-com-tls # 若不使用托管证书,指定证书Secret
  rules:
    # 平台自身服务路由
    - host: "platform.example.com"
      http:
        paths:
        - path: "/"
          pathType: Prefix
          backend:
            service:
              name: platform-dashboard
              port:
                number: 80

2. 租户Tenanta的Service(命名空间tenanta)

apiVersion: v1
kind: Service
metadata:
  name: service1
  namespace: tenanta
spec:
  selector:
    app: service1
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

3. 平台更新Ingress添加租户路由

在全局Ingress的spec.rules中新增以下规则:

- host: "service1.tenanta.example.com"
      http:
        paths:
        - path: "/"
          pathType: Prefix
          backend:
            service:
              name: service1
              namespace: tenanta # 必须指定租户命名空间(Ingress在平台命名空间)
              port:
                number: 80

4. 租户权限控制RBAC示例

平台为租户创建仅能操作自身命名空间的Role:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: tenanta
  name: tenant-service-manager
rules:
- apiGroups: [""]
  resources: ["services", "deployments", "pods"]
  verbs: ["get", "list", "create", "update", "delete"]
- apiGroups: ["networking.k8s.io"]
  resources: ["ingresses"]
  verbs: ["get", "list"] # 租户仅能查看Ingress,无修改权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:07:49