高可用nginx与kubernetes集成需分层保障:k8s控制平面多主节点+vip负载均衡、ingress controller多副本+反亲和部署、ingress资源声明式路由、tls/注解/configmap灵活配置,并辅以监控、日志与故障演练。

构建 Nginx 与 Kubernetes 的高可用集成,核心在于分层保障:K8s 控制平面自身高可用、Nginx 入口层高可用、以及两者之间的可靠联动。不是只装一个 Ingress Controller 就算完成,而是要让流量入口稳、调度逻辑准、故障切换快。
确保 K8s 控制平面高可用
K8s 集群本身必须是多主节点架构,否则单点 apiserver 崩溃会导致整个集群失联。Nginx 再强也无济于事。
- 至少部署 3 个控制节点(master),共用同一个 etcd 集群(建议奇数节点,如 3 或 5)
- 所有 master 节点均运行 kube-apiserver、etcd、kube-controller-manager、kube-scheduler
- 为 apiserver 暴露统一访问入口:通过外部负载均衡器(如 Nginx + Keepalived 或 HAProxy + Keepalived)绑定 VIP,将请求轮询或健康检查后转发至各 master 的 6443 端口
- Keepalived 负责 VIP 漂移,Nginx(启用
stream模块)负责四层 TCP 透传,避免 HTTPS 终止干扰 apiserver TLS 握手
部署高可用 Nginx Ingress Controller
Ingress Controller 是集群南北向流量的守门人,需防止单点失效,并支持滚动更新与自动扩缩。
- 使用 Helm 安装官方 ingress-nginx(推荐 v1.10+),设置
replicaCount: 3,确保多个 Pod 分布在不同节点 - 配置 Pod 反亲和性(
podAntiAffinity),避免多个实例被调度到同一节点 - 启用 readiness/liveness 探针,探测
/healthz端点,确保不健康的实例不参与流量分发 - Service 类型设为
LoadBalancer(云环境)或NodePort(自建环境),配合外部 LB 使用;若用 HostNetwork 模式,需额外保障宿主机网络与进程稳定性
通过 Ingress 资源精准路由与弹性管理
Ingress 是声明式规则,它把域名、路径、TLS 配置等抽象出来,由 Ingress Controller 动态生成 Nginx 配置并热重载。
- 为每个业务定义独立 Ingress 资源,指定 host、path 和后端 Service 名称与端口
- 启用 TLS:通过 Secret 引用证书,Ingress Controller 自动注入
ssl_certificate和ssl_certificate_key - 配置注解(annotations)实现高级能力,例如:
nginx.ingress.kubernetes.io/rewrite-target: /$2(路径重写)nginx.ingress.kubernetes.io/rate-limit-whitelist: "192.168.0.0/16"(限流白名单) - 结合 ConfigMap 自定义全局 Nginx 配置,如超时时间、缓冲区大小、日志格式等,避免硬编码到每个 Ingress
补充关键防护与可观测性
高可用不只是“不挂”,更是“可感知、可干预、可恢复”。
- 为 Ingress Controller Pod 配置资源限制(
requests/limits),防止因 OOM 被驱逐 - 接入 Prometheus + Grafana,监控
nginx_ingress_controller_requests_total、nginx_ingress_controller_upstream_latency_seconds等核心指标 - 配置集中式日志采集(如 Fluentd + ES),分析 5xx 错误、慢响应、非法 UA 等异常模式
- 定期演练 VIP 切换、Ingress Controller Pod 删除、后端 Service 故障等场景,验证恢复时效











