首页/云/Kubernetes 速查/Ingress 多域名与通配主机
网络与服务55 条

Ingress 多域名与通配主机

单个 Ingress 可用多条 rules 服务多个域名(含通配域名),配合不同后端实现多站点 Host 路由;共享入口节省资源。

Kubernetes 速查云更新于 2026-10-13

一个入口服务多个站点

入口对象支持在一个对象里写多条规则,每条规则可以绑定不同的主机名并指向不同后端,从而用同一套入口组件承载多个站点。除了具体域名,还可以使用通配主机名匹配一类子域。这样做的收益是共享入口组件与证书,减少资源占用与运维面。

基本信息

所属接口组networking.k8s.io/v1
规则数量单个对象可包含多条主机规则
通配范围只覆盖一级子域
路径类型前缀匹配或精确匹配
依赖条件域名需解析到入口地址

典型使用场景

  • 同一业务的多个域名指向不同后端服务
  • 静态资源用通配域名统一指向资源服务
  • 主站与接口服务分开部署,共用一套入口组件
  • 测试环境用域名前缀区分不同分支
  • 对外统一入口、内部分流的架构设计

多规则示例

多规则示例
spec:
  ingressClassName: nginx
  rules:
    - host: www.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: site-www
                port:
                  number: 80
    - host: api.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: site-api
                port:
                  number: 8080
    - host: "*.static.example.com"   # 通配只覆盖一级子域
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: site-static
                port:
                  number: 80

验证

验证
kubectl describe ingress multi-site | grep -E 'Host|Path'      # 规则是否被接受
curl -s -H 'Host: api.example.com' http://<入口IP>/health      # 用 Host 头验证路由
curl -sk --resolve www.example.com:443:<入口IP> https://www.example.com/   # 按域名验证
kubectl get ingress multi-site -o jsonpath='{.status.loadBalancer}'        # 入口地址

规则字段读法

字段含义注意点
主机名匹配请求中的域名不写表示匹配任意域名
通配主机匹配一级子域多级子域不匹配
路径与类型匹配的请求路径与方式前缀与精确匹配语义不同
后端服务流量最终发往的服务与端口服务不存在时返回错误
没有写主机名的规则相当于兜底规则,会接收所有未匹配到具体域名的请求。这条规则的位置与存在与否,会直接影响默认行为。
多个站点共用一套入口组件时,容量与限流也一并共用。某个站点出现流量突增会挤占其他站点的连接资源,重要业务应评估是否拆分入口。
路由规则正确不代表能访问:域名必须先解析到入口地址。用请求头或解析参数模拟域名验证,可以快速区分是路由问题还是解析问题。

易错点

  • 域名没有解析到入口地址:规则配置都对,访问仍然失败
  • 误以为通配可匹配多级子域:两级以上子域不会命中该规则
  • 使用兜底规则后忘记影响面:未匹配的域名流量全部落到同一后端
  • 证书只覆盖部分域名:部分站点访问报证书错误,业务方容易误判为服务故障

数据来源与参考

  • Kubernetes 官方文档 · Ingress(Hostname wildcards)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌