K8s Ingress Nginx漏洞升级修复教程
Kubernetes 集群中 Ingress Nginx 控制器是流量入口,其版本安全至关重要。
当上游发布安全公告时,你需要尽快升级到修复版本。
这篇教程从零开始,带你走完检查、升级、避坑和验证全过程。
升级前的环境确认
开始前,确认你拥有集群的 kubectl 权限,并能执行 helm list(如果通过 Helm 部署)。
查看当前 Ingress Nginx 控制器版本:
# 如果使用 Deployment 部署
kubectl get deployment -n ingress-nginx ingress-nginx-controller -o jsonpath='{.spec.template.spec.containers[0].image}'
# 或者查看 Pod 的镜像
kubectl get pods -n ingress-nginx -o custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[0].image
同时记录当前使用的 Helm release 名称和命名空间(如果有):
helm list -n ingress-nginx
如果未使用 Helm,后续操作可改用 kubectl set image 或编辑 Deployment。
选择目标版本并执行升级
访问 Ingress Nginx 官方 Release 页面(https://github.com/kubernetes/ingress-nginx/releases),查看最新稳定版以及对应的安全修复记录。
选择高于当前版本的修复版本,例如 v1.11.4。
方式一:Helm 升级(推荐)
更新 Helm 仓库并升级:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm upgrade ingress-nginx-controller ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--set controller.image.tag=v1.11.4 \
--reuse-values
--reuse-values 会保留原有配置,只更新镜像标签。
如果你之前使用自定义 values 文件,建议改为 -f values.yaml。
方式二:直接更新 Deployment 镜像
kubectl set image deployment/ingress-nginx-controller -n ingress-nginx \
controller=registry.k8s.io/ingress-nginx/controller:v1.11.4
升级后 Pod 会自动滚动更新,可通过以下命令观察状态:
kubectl rollout status deployment/ingress-nginx-controller -n ingress-nginx
避坑指南:升级前后的常见问题
- 镜像拉取失败:确保集群能访问
registry.k8s.io或你已配置镜像代理。如果内网环境,提前将目标镜像拉取到本地仓库。 - 配置不兼容:新版可能废弃某些 annotation 或 ConfigMap 字段。升级后检查 Ingress 日志是否有
unknown annotation警告,必要时调整配置。 - Helm 升级失败:若提示
values not compatible,尝试不加--reuse-values而使用--reset-values并重新传入 values 文件。 - Ingress 规则未生效:升级后控制器需要重新加载配置,通常自动完成。若长时间未生效,手动重启 Pod:
kubectl rollout restart deployment/ingress-nginx-controller -n ingress-nginx。
验证升级效果与漏洞修复是否生效
升级完成后,按以下步骤确认漏洞已修复:
- 验证版本:通过 Pod 环境变量或日志查看镜像版本。
kubectl exec -n ingress-nginx deploy/ingress-nginx-controller -- /nginx-ingress-controller --version
- 检查 Ingress 是否正常服务:访问一个已存在的域名或 Service,确认返回 200。
curl -I http://your-domain.com
- 查看控制器日志:确认无异常错误。
kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx --tail=50
- 使用安全扫描工具(如 trivy)扫描新镜像,确认漏洞列表已更新。
trivy image registry.k8s.io/ingress-nginx/controller:v1.11.4
如果扫描结果无高危严重漏洞,说明升级成功。
高频问题解答
Q:升级会影响线上业务吗?
A:滚动更新期间会有短暂的连接中断(通常几秒),建议在低峰期操作,并适当增加副本数保持高可用。
Q:升级后部分自定义配置失效怎么办?
A:对照官方变更日志,将废弃字段替换为推荐新字段。也可先在测试集群验证。
Q:如何备份当前配置?
A:使用 helm get values ingress-nginx-controller -n ingress-nginx > backup-values.yaml 备份 Helm values;或通过 kubectl get deployment,configmap -n ingress-nginx -o yaml 导出资源定义。
升级 Ingress Nginx 是保障集群安全的基础操作,建议定期关注官方安全公告。
如果你在处理升级过程中遇到其他异常,欢迎留言交流。