Kubernetes Ingress 个人学习笔记
一、核心概述
1. 定义
Ingress 是 K8s 集群中管理七层(HTTP/HTTPS)外部流量的核心资源对象,是 Service 之上的流量路由抽象层,主要用于替代多个 NodePort、LoadBalancer 服务,实现集群服务的统一入口访问。
2. 核心作用
-
统一流量入口:多个微服务共用一个外网入口,避免端口混乱
-
智能路由转发:基于域名、URL 路径匹配,将流量分发到不同后端 Service
-
集中 HTTPS 管理:统一实现 SSL/TLS 证书终止,后端服务可使用纯 HTTP 通信
-
虚拟主机能力:同一公网 IP 可托管多个不同域名的业务服务
-
丰富扩展能力:支持路径重写、限流、超时、认证授权等高级配置
3. 关键误区(必考)
Ingress 资源本身只负责定义路由规则,不处理流量、不监听端口,必须依赖 Ingress Controller 才能生效。
二、核心组成架构
1. Ingress 资源(yaml 定义)
用户通过 yaml 创建的 K8s 资源,仅存储路由、TLS、域名等规则,无实际流量处理能力。
2. Ingress Controller(核心载体)
实际运行的 Pod 应用(Nginx/Traefik/Envoy),通过监听 APIServer,实时感知 Ingress 规则变化,自动更新反向代理配置,实现流量转发。
三、完整工作原理
-
规则定义:用户编写 Ingress yaml,创建路由、域名、证书等规则并提交到集群
-
监听感知:Ingress Controller 通过 Watch 机制实时监控 Ingress 资源变更
-
配置渲染:控制器将 K8s 规则转换为 Nginx 等代理的本地配置文件
-
流量转发:外部流量访问控制器入口,根据配置匹配规则,转发至对应 Service,最终到达业务 Pod
四、核心配置详解
1. 固定 API 版本
K8s 1.19+ 稳定版本:networking.k8s.io/v1(废弃旧版本 extensions/v1beta1、networking/v1beta1)
2. 核心字段说明
-
ingressClassName:指定绑定的 Ingress 控制器(如 nginx),多控制器集群必备
-
spec.rules:核心路由规则,支持域名(host)+ 路径(path)匹配
-
spec.tls:HTTPS 证书配置,关联集群 Secret 资源存储证书秘钥
-
pathType:路径匹配规则,三种固定类型(核心考点)
3. pathType 匹配规则对照表
|
类型 |
匹配规则 |
示例(path: /api) |
|---|---|---|
|
Exact |
精确完整匹配,区分大小写 |
仅匹配 /api,不匹配 /api/、/api/user |
|
Prefix |
前缀匹配,默认常用规则 |
匹配 /api、/api/、/api/list、/api/123 |
|
ImplementationSpecific |
由控制器自主决定匹配逻辑 |
不同控制器行为不一致,生产不推荐 |
五、高频实战 YAML 模板
1. 极简基础版(HTTP 单路径)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: simple-ingress
namespace: default
spec:
ingressClassName: nginx
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-svc # 后端业务service名称
port:
number: 80 # 后端service端口
2. 生产完整版(多路径 + HTTPS)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: prod-ingress
namespace: default
annotations:
nginx.ingress.kubernetes.io/rewrite-target: / # 路径重写
nginx.ingress.kubernetes.io/proxy-body-size: 20m # 限制请求体大小
spec:
ingressClassName: nginx
# HTTPS证书配置
tls:
- hosts:
- blog.xxx.com
secretName: blog-tls-secret # 提前创建的证书secret
# 路由规则
rules:
- host: blog.xxx.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: blog-web-svc
port:
number: 80
- path: /api
pathType: Prefix
backend:
service:
name: blog-api-svc
port:
number: 8080
六、Nginx-Ingress 常用注解(生产高频)
注解是控制器扩展配置,仅对应 Nginx Ingress 生效,其他控制器不兼容
-
nginx.ingress.kubernetes.io/rewrite-target: /:URL 路径重写,适配后端接口根路径 -
nginx.ingress.kubernetes.io/proxy-body-size: 10m:设置最大上传文件大小 -
nginx.ingress.kubernetes.io/ssl-redirect: "true":强制 HTTP 跳转 HTTPS -
nginx.ingress.kubernetes.io/connection-proxy-header: keep-alive:开启长连接
七、日常实操命令
# 查看所有ingress资源
kubectl get ingress
# 查看ingress详细规则、状态、报错
kubectl describe ingress 资源名
# 应用ingress配置
kubectl apply -f ingress.yaml
# 删除ingress资源
kubectl delete ingress 资源名
# 查看ingress控制器日志(排错核心)
kubectl logs -n ingress-nginx 控制器pod名
八、主流 Ingress Controller 选型对比
-
Nginx Ingress:社区成熟、稳定、功能全面,生产最常用,通用场景首选
-
Traefik:云原生自动发现、配置动态更新、自带 UI,轻量化易用
-
Envoy:高性能、可观测性强,适配大规模微服务、服务网格场景
-
HAProxy:四层/七层性能优异,适合高并发、TCP 流量转发场景
九、生产最佳实践 & 避坑总结
-
必须安装控制器:仅创建 Ingress 资源无任何效果,控制器是流量核心
-
规范匹配规则:优先使用 Prefix/Exact,禁止乱用 ImplementationSpecific
-
证书统一管理:使用 Cert-Manager 自动签发、续期证书,避免手动维护过期
-
资源隔离:按命名空间划分业务 Ingress,避免域名、路由规则冲突
-
配置资源限制:为 Ingress Controller 设置 CPU/内存限制,防止单点过载
-
开启监控告警:监控流量、错误率、延迟,及时发现路由异常
十、拓展:Ingress 与 Gateway API
K8s 官方新一代流量标准 Gateway API 正在逐步替代传统 Ingress:
-
优势:角色权限分离、支持 TCP/UDP/gRPC、更精细的流量治理、扩展性更强
-
现状:旧项目兼容 Ingress,新项目、云原生集群推荐使用 Gateway API
更多推荐




所有评论(0)