Ingress从入门到入地
Kubernetes生产实战:Ingress网关从入门到精通
作为Kubernetes的流量守门人,Ingress是每个开发者必须掌握的技能。本文将带你从零搭建生产级Ingress网关,揭秘大厂都在用的高级配置技巧!
一、Ingress初体验:5分钟快速入门
1. 选择你的武器(Ingress控制器)
控制器
特点
适用场景
Nginx
生态最强,功能全面
通用Web服务
Traefik
自动服务发现
微服务架构
Kong
API网关功能丰富
企业级API管理
ALB
深度云集成
AWS环境
2. 安装Nginx Ingress(生产推荐)
# 使用Helm部署
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx \
--set controller.service.type=LoadBalancer
3. 第一个Ingress配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: frontend
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: shop.example.com
http:
paths:
- path: /v1
pathType: Prefix
backend:
service:
name: frontend-v1
port:
number: 80
二、生产环境六大核心配置
1. HTTPS全站加密
# 使用cert-manager自动签发证书
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
2. 智能限流保护
annotations:
nginx.ingress.kubernetes.io/limit-rpm: "6000"
nginx.ingress.kubernetes.io/limit-burst: "30"
nginx.ingress.kubernetes.io/limit-whitelist: "192.168.0.0/24"
3. 跨域访问控制
annotations:
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-origin: "https://*.example.com"
nginx.ingress.kubernetes.io/cors-max-age: "600"
4. 金丝雀发布策略
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "20"
nginx.ingress.kubernetes.io/canary-by-header: "X-Env"
5. 日志监控体系
# 查看实时访问日志
kubectl logs -n ingress-nginx deploy/ingress-nginx-controller | grep "GET /"
6. 多团队域名管理
# 按团队划分IngressClass
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: team-a
spec:
controller: nginx.org/ingress-controller
三、流量调度高级技巧
1. 基于地理位置的访问控制
annotations:
nginx.ingress.kubernetes.io/geoip-country-code: "US"
nginx.ingress.kubernetes.io/configuration-snippet: |
if ($geoip_country_code != US) {
return 403;
}
2. 动态请求镜像
annotations:
nginx.ingress.kubernetes.io/mirror-target: "http://debug-service.default.svc.cluster.local"
nginx.ingress.kubernetes.io/mirror-body: "off"
3. WebSocket长连接优化
annotations:
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
nginx.ingress.kubernetes.io/upstream-hash-by: "$remote_addr"
四、性能调优参数表
参数
默认值
生产建议值
作用
worker_processes
auto
8
Nginx worker数量
keepalive_requests
100
10000
单连接最大请求数
client_max_body_size
1m
20m
最大上传文件大小
proxy_buffer_size
4k
16k
代理缓冲区大小
upstream-keepalive-connections
32
512
后端连接池大小
# 通过ConfigMap全局配置
controller:
config:
worker-processes: "8"
upstream-keepalive-connections: "512"
五、故障排查指南
1. 路由不生效怎么办?
# 查看生成的Nginx配置
kubectl exec -it ingress-nginx-controller-xxx -- cat /etc/nginx/nginx.conf
# 检查事件日志
kubectl describe ingress frontend
2. HTTPS证书异常处理
# 查看证书状态
kubectl get certificaterequest -A
# 强制重新签发
kubectl delete secret tls-secret
3. 性能瓶颈分析
# 进入容器进行性能分析
kubectl exec -it ingress-nginx-controller-xxx -- bash
# 安装调试工具
apt update && apt install -y htop iftop
htop
六、架构演进建议
小型团队:单Nginx Ingress + NodePort
中型集群:双副本Ingress + 云负载均衡
大型架构:
按业务拆分多个Ingress控制器
边缘节点专用Ingress集群
智能DNS+多活部署
结语
Ingress是Kubernetes流量管理的瑞士军刀,掌握它需要:
理解原理:从HTTP协议到控制器工作原理
熟练工具:kubectl/Helm/监控系统
持续实践:定期压力测试和故障演练
现在,立刻检查你的Ingress配置是否存在以下问题:
🔸 未启用HTTPS
🔸 缺少限流保护
🔸 日志保留不足7天
记住:好的流量管理,是稳定性的第一道防线!