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

如何在K8s Ingress中动态添加/移除指定主机?

动态管理GKE Ingress主机规则的实用方案

绝对可以!在GKE上你完全不用每次编辑完整的Ingress主机列表来新增或移除域名路由,针对你这种每日都有服务创建销毁的场景,这里有几个实用且易维护的方案:

方案1:拆分多个独立Ingress资源(最推荐,轻量易操作)

Kubernetes允许同一个Ingress控制器处理多个Ingress资源——只要它们关联同一个ingressClassName(旧版本GKE用kubernetes.io/ingress.class注解)。你可以为每个动态服务单独创建一个小型Ingress,只包含该服务对应的域名路由规则,新增服务时创建对应Ingress,销毁服务时直接删除这个Ingress即可,完全不用改动其他Ingress配置。

举个GKE默认GCE Ingress的示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-app-1-ingress
spec:
  ingressClassName: gce # 关联GKE默认的Ingress控制器
  rules:
  - host: app1.server.com
    http:
      paths:
      - path: /*
        pathType: ImplementationSpecific
        backend:
          service:
            name: web-app-1-service
            port:
              number: 80

GCE Ingress控制器会自动合并所有同Ingress类的规则,你无需关心全局配置的维护,每个服务的路由都是独立的单元。

方案2:用自定义控制器/Operator自动化管理(适合大规模场景)

如果你的服务数量极多,手动创建Ingress太繁琐,可以通过以下方式自动化:

  • 给Service添加自定义注解,比如mycompany.com/ingress-host: app2.server.com,然后编写一个简单的Kubernetes控制器(或用现成的工具)监听Service的创建/删除事件,自动生成/清理对应的Ingress资源。
  • 要是已经在用服务网格,比如GKE的Anthos Service Mesh(ASM),可以用VirtualService资源单独配置每个服务的域名路由,ASM会自动同步到Ingress网关,同样无需修改全局Ingress。

方案3:通配符路由(需应用适配)

如果你的服务域名可以遵循统一的通配符模式(比如*.app.server.com),可以在主Ingress里配置一条通配符规则,再通过路径、请求头等标识路由到对应Service。不过这个方案需要你的应用配合解析路由标识,灵活性不如拆分Ingress。

注意事项

  • 确保所有Ingress资源使用同一个ingressClassName,否则控制器不会合并规则。
  • 删除Ingress后,GKE的Ingress控制器会自动从后端负载均衡器中移除对应的域名规则,无需手动操作。
  • 如果你用的是NGINX Ingress控制器(而非GKE默认的GCE),上述拆分Ingress的方案同样适用,NGINX会自动合并所有规则到自身配置中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:43:52