如何为Nginx Ingress配置通用后端适配所有其他域名?
解决Ingress批量域名统一指向后端的问题
问题原因
你的defaultBackend未生效,是因为Ingress规则中明确指定host的规则优先级高于默认后端——只有当请求域名不在任何rules.host列表内时,才会触发defaultBackend。要让domain3.com、domain4.com等大量域名统一指向同一后端且无需重复添加规则,可采用以下两种方案:
方案一:使用通配符域名规则
如果批量域名属于同一主域名的子域名(如*.mydomain.com),可直接添加通配符host规则覆盖所有匹配域名:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: /$1 nginx.ingress.kubernetes.io/use-regex: "true" cert-manager.io/cluster-issuer: letsencrypt spec: tls: - hosts: - mydomain.com - *.mydomain.com # 批量子域名对应的通配符host secretName: tls-secret-wildcard # 需提前配置通配符SSL证书的secret defaultBackend: service: name: backend_default port: number: 8000 rules: - host: domain1.com http: paths: - path: /(.*) pathType: Prefix backend: service: name: backend1 port: number: 8888 - host: domain2.com http: paths: - path: /(.*) pathType: Prefix backend: service: name: backend2 port: number: 8888 # 新增通配符规则,匹配所有未被明确规则覆盖的子域名 - host: "*.mydomain.com" http: paths: - path: /(.*) pathType: Prefix backend: service: name: backend_batch # 统一指向的后端服务名 port: number: 8000
注意事项:
- 通配符仅匹配一级子域名(如
*.mydomain.com匹配a.mydomain.com,不匹配a.b.mydomain.com) - 需提前申请对应通配符的SSL证书,并配置到tls.secretName中
方案二:添加无host的全局规则
如果批量域名无统一通配符格式,可添加一条不指定host的规则,匹配所有未被明确host规则覆盖的请求:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: /$1 nginx.ingress.kubernetes.io/use-regex: "true" cert-manager.io/cluster-issuer: letsencrypt spec: tls: - hosts: - mydomain.com - domain3.com - domain4.com # 批量域名可加入多域名证书的host列表 secretName: tls-secret-multi # 多域名SSL证书对应的secret defaultBackend: service: name: backend_default port: number: 8000 rules: - host: domain1.com http: paths: - path: /(.*) pathType: Prefix backend: service: name: backend1 port: number: 8888 - host: domain2.com http: paths: - path: /(.*) pathType: Prefix backend: service: name: backend2 port: number: 8888 # 新增无host规则,匹配所有未被上面规则覆盖的域名 - http: paths: - path: /(.*) pathType: Prefix backend: service: name: backend_batch # 统一指向的后端服务名 port: number: 8000
优先级说明:
- 明确指定host的规则优先级最高(如domain1.com、domain2.com)
- 无host规则次之,覆盖所有未被匹配的域名
- defaultBackend优先级最低,仅在请求不匹配任何path规则时触发
验证配置
应用修改后的Ingress:
kubectl apply -f your-ingress.yaml
查看Ingress规则状态:
kubectl describe ingress my-ingress
测试批量域名访问,确认是否正确路由到目标后端。
内容的提问来源于stack exchange,提问作者timewalker
相关产品推荐
相关产品推荐

