如何批量配置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
配置说明
- 核心逻辑:通过
configuration-snippet注入Nginx原生规则,用正则^([a-z0-9-]+)\.example\.com$匹配二级域名,将捕获到的二级域名存入$subdomain变量。 - 路径重写:
rewrite ^/(.*)$ /$subdomain/$1 break会把所有请求路径重写为/二级域名/原路径,比如abc.example.com/test会被转发到后端的/abc/test。 - 路径简化:将原配置的
path: /(.*)改为path: /,确保所有路径请求都能被这个规则覆盖处理。
注意事项
- 正则表达式
[a-z0-9-]+仅匹配小写字母、数字和连字符,如果你的二级域名包含其他特殊字符,需要调整正则范围。 - 若存在部分二级域名不需要该映射规则,可以单独创建对应的Ingress规则(优先级高于通配规则),或在
configuration-snippet中添加排除条件。 - 确保你的Nginx Ingress Controller版本支持
configuration-snippet注解(主流版本均支持)。
内容的提问来源于stack exchange,提问作者ClearSeve
相关产品推荐
相关产品推荐

