1. 项目背景与核心价值作为容器编排领域的事实标准Kubernetes 的 Ingress 控制器是实现外部访问集群服务的核心组件。其中 Ingress-Nginx 作为 CNCF 官方维护的项目在生产环境中占据超过 65% 的市场份额数据来源2023 年 CNCF 调查报告。这个实战演练不仅适用于 CKA 认证备考更是每个 K8s 运维人员必须掌握的日常技能。我在金融和互联网行业的多家上市公司落地 K8s 集群时发现许多团队在 Ingress 配置环节常犯三类典型错误SSL 证书配置不当导致的安全隐患、路由规则冲突引发的服务不可用以及性能调优缺失造成的带宽瓶颈。本文将结合这些实战经验带你从零构建生产可用的 Ingress-Nginx 环境。2. 环境准备与前置检查2.1 集群基础要求确保你的 Kubernetes 集群满足以下最低配置版本v1.20推荐 v1.25 以获得完整的 Ingress 功能支持节点资源至少 2 个 worker 节点每个节点 2CPU/4GB 内存网络插件Calico/Flannel 等 CNI 插件已正常运作快速验证命令kubectl get nodes -o wide kubectl get pods -n kube-system2.2 关键工具安装需要预先配置好的命令行工具kubectl 版本与集群版本匹配±1 个小版本helm v3.8推荐使用 helm 部署jq/yq 用于处理 YAML/JSON 配置安装 helm 的快速命令curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash3. 部署方案选型与实施3.1 官方部署方案对比部署方式适用场景优势局限性kubectl apply快速测试环境无需额外工具难以版本管理Helm Chart生产环境推荐支持参数化配置和版本回滚需要学习 Helm 模板语法Operator企业级复杂环境自动化运维能力强部署复杂度高3.2 Helm 部署实操步骤添加官方仓库helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm repo update定制化 values.yamlcontroller: replicaCount: 2 service: type: LoadBalancer externalTrafficPolicy: Local resources: requests: cpu: 500m memory: 512Mi执行安装命名空间建议使用 ingress-nginxhelm upgrade --install ingress-nginx ingress-nginx/ingress-nginx \ -n ingress-nginx --create-namespace \ -f values.yaml --version 4.7.1关键参数说明externalTrafficPolicy: Local 可保留客户端真实 IP但要求工作负载必须运行在 ingress 节点上4. 核心配置详解4.1 Ingress 路由规则配置典型的多服务路由配置示例apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-routing annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: ingressClassName: nginx rules: - host: demo.example.com http: paths: - path: /api(/|$)(.*) pathType: Prefix backend: service: name: api-service port: number: 8080 - path: /web pathType: Prefix backend: service: name: web-service port: number: 804.2 TLS 证书配置创建 secret需提前准备证书文件kubectl create secret tls example-tls \ --cert./tls.crt \ --key./tls.key \ -n defaultIngress 中引用spec: tls: - hosts: - demo.example.com secretName: example-tls5. 性能调优实战技巧5.1 内核参数优化在节点上设置# 增加连接队列大小 echo net.core.somaxconn 32768 /etc/sysctl.conf # 加快 TIME_WAIT 回收 echo net.ipv4.tcp_tw_reuse 1 /etc/sysctl.conf sysctl -p5.2 Nginx 配置调优通过 ConfigMap 调整controller: config: worker-processes: 4 keep-alive-requests: 10000 upstream-keepalive-connections: 2006. 常见问题排查指南6.1 诊断流程图服务不可访问 │ ├─ 检查 Ingress 控制器日志kubectl logs -n ingress-nginx pod-name │ ├─ 验证 Endpoints 是否就绪kubectl get endpoints service-name │ └─ 检查 Ingress 状态kubectl describe ingress ingress-name6.2 典型错误案例案例返回 503 Service Temporarily Unavailable可能原因后端服务未就绪检查 Pod readinessProbe注解配置冲突如同时使用 rewrite 和 proxy-redirect资源配额不足查看 Pod 状态是否为 OOMKilled解决方案# 查看事件记录 kubectl get events --sort-by.metadata.creationTimestamp # 检查资源使用 kubectl top pods -n ingress-nginx7. CKA 考点特别提示考试中可能涉及的实操点创建满足特定路由规则的 Ingress 资源排查 Ingress 访问故障配置 HTTPS 重定向使用注解nginx.ingress.kubernetes.io/ssl-redirect实现基于路径的路由分流练习建议# 考试环境快速验证命令 kubectl get ingress -A kubectl describe ingressclass nginx