目录
基本概念
一、技术原理
网络流量管理核心
- 基于Kubernetes的七层反向代理机制
- 通过声明式API配置路由规则(YAML/JSON)
- 核心组件包含Ingress Controller和Ingress资源对象
工作流程
客户端请求 → Ingress Controller → 路由规则匹配 → 服务发现 → 负载均衡 → 后端Pod
二、核心特性
高级路由能力
- 基于Host/Path的路由分发
- 正则表达式路径匹配
- 流量镜像(Canary发布)
- 自定义Header重写
安全防护体系
- TLS终止与证书自动续期(Let's Encrypt集成)
- 速率限制(Rate Limiting)
- 基于OAuth2.0的身份验证
- IP黑白名单控制
可视化监控
- 实时流量热力图
- 请求耗时百分位统计
- 错误代码分布分析
- 自动生成OpenAPI文档
三、技术演进意义
云原生架构转型
- 实现从传统负载均衡器到声明式配置的范式转移
- 推动Service Mesh与Ingress的融合(如Gloo Mesh)
- 支持混合云流量管理
开发效率提升
- 配置版本化(GitOps工作流)
- 自助式路由管理(开发者门户)
- 环境一致性保障(Dev/Test/Prod)
成本优化
- 硬件LB替代方案(节约60%+成本)
- 智能流量调度(基于地理位置/运营商)
- 自动伸缩能力(HPA联动)
行业影响
- 成为CNCF毕业项目标准组件
- 催生新一代API网关产品(如Kong, Traefik)
- 推动云服务商标准化Ingress实现(ALB Ingress Controller等)
基本部署
部署Nginx Ingress Controller
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-ingress-controller
namespace: ingress-nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx-ingress
template:
metadata:
labels:
app: nginx-ingress
spec:
containers:
- name: nginx-ingress
image: registry.k8s.io/ingress-nginx/controller:v1.8.1
args:
- /nginx-ingress-controller
- --publish-service=$(POD_NAMESPACE)/nginx-ingress-controller
- --election-id=ingress-controller-leader
ports:
- name: http
containerPort: 80
- name: https
containerPort: 443
逐行解释:
apiVersion: apps/v1
:使用Deployment的API版本kind: Deployment
:声明资源类型为无状态部署namespace: ingress-nginx
:指定命名空间(需提前创建)replicas: 1
:控制器副本数(生产环境建议≥2)image: registry.k8s.io...
:官方Ingress-NGINX镜像args
:启动参数,--publish-service
指定服务暴露方式ports
:暴露HTTP(80)和HTTPS(443)端口
ingress资源
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: demo.example.com
http:
paths:
- path: /app
pathType: Prefix
backend:
service:
name: my-service
port:
number: 8080
逐行解释:
apiVersion: networking.k8s.io/v1
:Ingress的API版本annotations
:控制器特定配置(此处为Nginx路径重写)host: demo.example.com
:域名绑定规则path: /app
:URL路径前缀匹配backend
:将流量转发到名为my-service
的Service的8080端口
关键操作命令
# 创建命名空间
kubectl create ns ingress-nginx
# 部署Controller(需提前下载YAML)
kubectl apply -f ingress-controller.yaml
# 应用Ingress规则
kubectl apply -f my-ingress.yaml
# 验证状态
kubectl get ingress -n ingress-nginx
说明:
- 实际部署前需确保集群已配置StorageClass(如需持久化日志)
- 生产环境建议通过Helm管理Controller部署
- 域名需提前解析到集群入口IP(如LoadBalancer的EXTERNAL-IP)