在Kubernetes中,通过Ingress配置入口流量路由需遵循以下步骤与实践经验:
-
Ingress Controller部署:选择并安装Nginx、Traefik等控制器。例如,使用Helm安装Nginx Ingress需注意资源限制及服务类型(如NodePort或LoadBalancer)。云环境中可能依赖云厂商的LB集成。
-
Ingress资源定义:通过YAML配置路由规则。关键字段包括
host
(域名)、http.paths
(路径匹配)及backend.service
(指向Service及端口)。路径匹配需谨慎设置pathType
(Exact/Prefix),例如/api
需设为Prefix以覆盖子路径,避免与根路径冲突。 -
TLS配置:将证书存入Secret并在Ingress中引用。常见问题包括证书过期或Secret未同步,可通过Cert-manager自动化Let's Encrypt证书管理。
实践中遇到的挑战:
- 路径优先级问题:较长路径需优先定义,否则被根路径覆盖。曾因路径顺序错误导致API路由失效,需通过
kubectl describe ingress
验证规则顺序。 - 多集群/命名空间路由:跨命名空间引用Service需确保Ingress Controller具备Cluster角色权限,否则报错
no service found
。 - 性能瓶颈:高并发场景下Nginx Ingress可能出现延迟,需调整
worker-processes
及keep-alive
参数,并通过Prometheus监控QPS与延迟指标。 - Annotation差异:不同控制器对注解(如重写规则、超时)支持不一。例如,Nginx需用
nginx.ingress.kubernetes.io/rewrite-target
,而Traefik使用traefik.ingress.kubernetes.io/request-modifier
。 - Canary发布复杂性:通过注解实现灰度发布时,流量权重分配可能受客户端持久连接影响,需结合Header匹配或Cookie策略增强精确性。
最佳实践建议:
- 标准化命名:为Host与Path定义清晰规则(如
<service>.<env>.example.com
),减少配置冲突。 - 自动化验证:在CI/CD中集成Conftest检查Ingress语法,防止无效配置入集群。
- 监控与日志:启用Ingress Controller的访问日志并设置结构化格式,便于ELK分析异常流量。
- 版本控制:定期升级Controller以修复CVE漏洞(如CVE-2021-25745),并通过Helm Chart版本回滚应对兼容性问题。