Ingress从入门到入地

2025-10-12 09:46:21

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天

记住:好的流量管理,是稳定性的第一道防线!