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

如何批量配置Kubernetes Ingress二级域名映射至对应二级目录?

批量二级域名映射至对应目录的Ingress正确配置方案

你的核心需求是将xxx.example.com这类二级域名自动映射到后端服务的/xxx路径下,无需逐个配置Ingress规则。原配置无效的原因是:rewrite-target: /$1中的$1捕获的是请求路径的内容,而非二级域名部分,完全没触碰到host解析的逻辑。

以下是实现该需求的正确配置:

kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  name: online-tools-sub-ingress
  namespace: online-tools-project
  labels:
    app.kubernetes.io/name: online-tools
    app.kubernetes.io/version: v1
  annotations:
    kubesphere.io/creator: admin
    nginx.ingress.kubernetes.io/service-upstream: 'true'
    nginx.ingress.kubernetes.io/upstream-vhost: online-tools-core.online-tools-project.svc.cluster.local
    # 添加自定义Nginx配置片段,从host中提取二级域名并重写路径
    nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($host ~* "^([a-z0-9-]+)\.example\.com$") {
        set $subdomain $1;
        rewrite ^/(.*)$ /$subdomain/$1 break;
      }
spec:
  rules:
    - host: '*.example.com'
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: online-tools-core
                port:
                  number: 8080

配置说明

  1. 核心逻辑:通过configuration-snippet注入Nginx原生规则,用正则^([a-z0-9-]+)\.example\.com$匹配二级域名,将捕获到的二级域名存入$subdomain变量。
  2. 路径重写:rewrite ^/(.*)$ /$subdomain/$1 break会把所有请求路径重写为/二级域名/原路径,比如abc.example.com/test会被转发到后端的/abc/test。
  3. 路径简化:将原配置的path: /(.*)改为path: /,确保所有路径请求都能被这个规则覆盖处理。

注意事项

  • 正则表达式[a-z0-9-]+仅匹配小写字母、数字和连字符,如果你的二级域名包含其他特殊字符,需要调整正则范围。
  • 若存在部分二级域名不需要该映射规则,可以单独创建对应的Ingress规则(优先级高于通配规则),或在configuration-snippet中添加排除条件。
  • 确保你的Nginx Ingress Controller版本支持configuration-snippet注解(主流版本均支持)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:45:55