首页/云/Kubernetes 速查/Ingress 七层入口基础
网络与服务55 条

Ingress 七层入口基础

HTTP/HTTPS 路由规则对象:按域名与路径把请求转发到不同 Service;必须配合 Ingress Controller 才会生效,否则只是存起来的配置。

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

Ingress 是什么

Ingress 是七层入口的路由规则对象:按域名与路径把 HTTP 与 HTTPS 请求分发到不同的后端服务。它本身只是一份声明,必须由 Ingress Controller 读取并落成真实的代理配置才会生效。集群里没装控制器时,创建对象不会报错,但流量一点都不会变——这是最常见的「配了不生效」原因。

它和 Service 的关系

Service 工作在四层,只认地址与端口;Ingress 在它之上按主机名和路径做分发,后端依然指向 Service。TLS 终止通常在控制器这一层完成,证书来自同命名空间的 Secret。所以一条完整的外部访问链路是:外部流量进控制器,按规则找到 Service,再由 Service 转给后端 Pod。

基本信息

适用环境Kubernetes 1.19 以上使用 networking.k8s.io/v1,更早版本为 v1beta1
生效前提集群里已部署对应的 Ingress Controller
后端对象同命名空间内的 Service 及其端口
TLS 支持通过 spec.tls 引用证书 Secret,由控制器完成终止
关键字段ingressClassName、rules、pathType、backend、tls
权限要求命名空间内对 ingress 资源具备增删改查权限

典型使用场景

  • 多域名共用入口:一个对外地址承载多个业务域名,按主机名分发
  • 路径分版本:同一个域名下按路径前缀把流量分给不同服务
  • 统一 TLS 终止:证书集中存放在 Secret,由入口层统一处理
  • 灰度切流:新增一条规则把部分请求导向新版本服务
  • 内外部隔离:只把需要对外暴露的服务写入路由规则
  • 迁移过渡:旧服务与新服务同时在规则里并存,逐步调整权重与路径

Ingress 清单

Ingress 清单
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ing
  namespace: prod
spec:
  ingressClassName: nginx          # 指定由哪个控制器实现
  tls:
    - hosts: [app.example.com]
      secretName: app-tls           # 证书 Secret,需与本对象同命名空间
  rules:
    - host: app.example.com
      http:
        paths:
          - path: /
            pathType: Prefix        # 前缀匹配
            backend:
              service:
                name: web
                port:
                  number: 80

查看与验证

查看与验证
kubectl get ingress -n prod                # 看是否分配到入口地址
kubectl describe ingress web-ing -n prod    # 看规则解析与后端端点情况
kubectl -n ingress-nginx logs deploy/ingress-nginx-controller --tail=50   # 看控制器侧报错
curl -H 'Host: app.example.com' http://<入口地址>/    # 绕过 DNS 直接验证路由

关键字段读法

字段含义异常表现
ingressClassName指定实现该规则的控制器类别写错或缺失时规则无人读取,完全不生效
rules.host匹配的域名与请求头主机名不一致会落到默认后端或返回 404
path 与 pathType路径匹配方式与前缀类型选错会出现本应匹配的路径不匹配
backend.service转发的后端服务与端口服务不存在或端口写错时返回 503
tls.secretName证书来源证书缺失或域名不匹配时握手失败

路径类型对照

类型匹配规则
Exact路径完全一致才匹配
Prefix按路径段前缀匹配,最常用
ImplementationSpecific由控制器自行解释,跨实现不可移植
没有部署控制器时,Ingress 对象创建成功也没有任何效果,排查「域名不通」第一步先确认控制器是否在运行。
后端服务端口写错或端点为空时,控制器通常返回 503 而不是 404;据此可以快速区分「路由没匹配上」与「后端不可用」。
证书 Secret 必须与 Ingress 处于同一命名空间,控制器通常只在自身命名空间或指定命名空间内查找证书,跨命名空间引用会失败。

与四层暴露方式的选择

  • 只需要暴露一个非 HTTP 端口:用 NodePort 或负载均衡类型的服务更直接
  • 需要按域名与路径分发、需要统一处理证书:用 Ingress 更省资源
  • 需要更复杂的流量治理策略:可考虑网关类方案,能力更强但组件也更多

易错点

  • 装了控制器但没写对控制器类别:规则被忽略且没有明显报错,排查时要先看控制器日志里有没有加载这条规则
  • 路径类型随手写成实现相关类型:换一个控制器实现后行为改变,迁移时出现难以复现的 404
  • 后端服务端口写成服务端口而不是目标端口:控制器侧连接被拒,表现为间歇的 502 或 503
  • 用 Host 头测试时忘了带上正确的域名:请求落到默认后端,误判成规则不生效
  • 证书与域名不匹配或证书过期:浏览器侧报错但集群对象状态正常,需要单独检查证书有效期

数据来源与参考

  • Kubernetes 官方文档 · Ingress
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌