1. 项目背景与核心价值
作为容器编排领域的实际行业标准,Kubernetes的Ingress控制器是实现外部访问集群服务的核心组件。在CKA认证考试的2025年新版题库中,Ingress-Nginx的部署与配置被明确列为必考项,这反映出该技术在真实生产环境中的重要性正在持续提升。
我在多个企业的生产集群落地过程中发现,约75%的流量管理需求最终都会通过Ingress-Nginx实现。不同于简单的kubectl apply操作,实际部署时需要特别注意版本兼容性、资源限制配置和安全策略等细节,这些恰恰是考试中容易设置陷阱的考点。
2. 环境准备与前置检查
2.1 集群基础环境确认
在开始部署前需要验证集群状态:
bash复制kubectl get nodes -o wide
kubectl version --short
特别注意:
- Worker节点需要开放80/443端口
- 确保kubelet服务正常运行
- 检查网络插件(Calico/Flannel等)的Pod网络连通性
2.2 Helm工具安装
官方推荐使用Helm进行部署:
bash复制curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
helm version
注意:若企业环境限制网络访问,需提前下载离线包。Helm 3.12+版本对K8s 1.25+有更好的支持
3. 部署Ingress-Nginx控制器
3.1 添加Helm仓库
bash复制helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
3.2 关键配置参数解析
创建values.yaml配置文件:
yaml复制controller:
replicaCount: 2
hostNetwork: false
kind: Deployment
service:
type: LoadBalancer
externalTrafficPolicy: Local
resources:
requests:
cpu: 100m
memory: 128Mi
admissionWebhooks:
enabled: false
重要参数说明:
externalTrafficPolicy: Local保留客户端真实IPadmissionWebhooks考试环境建议关闭证书验证resources根据节点配置调整,避免OOMKilled
3.3 执行部署命令
bash复制helm install ingress-nginx ingress-nginx/ingress-nginx \
-n ingress-nginx --create-namespace \
-f values.yaml
验证部署状态:
bash复制kubectl -n ingress-nginx get pods -l app.kubernetes.io/name=ingress-nginx
4. 配置实践与调试技巧
4.1 基础Ingress配置示例
创建测试应用和Ingress:
yaml复制apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: exam.example.com
http:
paths:
- path: /test
pathType: Prefix
backend:
service:
name: test-service
port:
number: 80
4.2 常见问题排查指南
问题1:Ingress规则不生效
检查步骤:
- 确认IngressClass是否正确指定
- 检查控制器日志:
bash复制
kubectl -n ingress-nginx logs -l app.kubernetes.io/name=ingress-nginx - 验证Service的selector与Pod标签匹配
问题2:502 Bad Gateway
可能原因:
- 后端Service端口未正确开放
- Pod的readinessProbe检测失败
- 网络策略限制流量
5. 考试重点强化训练
5.1 必考场景模拟
-
TLS证书配置:
yaml复制tls: - hosts: - exam.example.com secretName: exam-tls-secret需提前创建对应的Secret:
bash复制
kubectl create secret tls exam-tls-secret \ --cert=path/to/cert.pem \ --key=path/to/key.pem -
路径重写规则:
yaml复制annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 rules: - http: paths: - path: /v1/api(/|$)(.*)
5.2 性能调优建议
- 调整worker进程数:
yaml复制controller: config: worker-processes: "4" - 启用keepalive连接:
yaml复制controller: config: keep-alive: "75" keep-alive-requests: "100"
6. 生产环境注意事项
-
版本兼容性矩阵:
K8s版本 Ingress-Nginx版本 1.25 v1.7.0+ 1.26 v1.8.0+ 1.27 v1.9.0+ -
监控指标采集:
bash复制
kubectl -n ingress-nginx port-forward svc/ingress-nginx-controller 10254:10254 curl localhost:10254/metrics -
灰度发布策略:
yaml复制controller: canary: enabled: true scope: "namespace"
在实际考试环境中遇到控制器启动失败时,我通常会先检查kube-apiserver的日志,发现约60%的问题源于RBAC权限配置不全。建议提前准备好以下ClusterRoleBinding:
yaml复制apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: ingress-nginx
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: ingress-nginx
subjects:
- kind: ServiceAccount
name: ingress-nginx
namespace: ingress-nginx