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

如何为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

优先级说明:

  1. 明确指定host的规则优先级最高(如domain1.com、domain2.com)
  2. 无host规则次之,覆盖所有未被匹配的域名
  3. defaultBackend优先级最低,仅在请求不匹配任何path规则时触发

验证配置

应用修改后的Ingress:

kubectl apply -f your-ingress.yaml

查看Ingress规则状态:

kubectl describe ingress my-ingress

测试批量域名访问,确认是否正确路由到目标后端。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:22:59