家用住宅主机Linux K8s Ingress
为什么需要修复Ingress Nginx漏洞
家用Linux主机上搭建K8s集群后,很多人直接使用默认的Ingress Nginx Controller。
一旦官方公布安全漏洞(例如CVE-2024-XXXX涉及路径遍历或请求走私),你的服务就可能暴露在风险中。
本文帮你三步完成升级:先查当前版本,再拉取修复版镜像,最后验证业务是否正常。
全程在终端执行,不需要图形界面。
第一步:确认当前Ingress Nginx版本与漏洞状态
1.1 查看正在运行的Controller Pod版本
打开SSH终端,执行下面的命令获取Ingress Nginx Controller的Pod名称和镜像标签:
kubectl get pods -n ingress-nginx -o wide
kubectl get pods -n ingress-nginx -o jsonpath='{.items[*].spec.containers[0].image}'
1.2 查询版本是否受漏洞影响
访问 Ingress Nginx 官方发布页 或 Nginx 安全公告,确认你的版本是否在受影响范围内。
如果低于目前的最新稳定版本(例如v1.11.1),就需要升级。
第二步:升级Ingress Nginx Controller镜像
2.1 确定目标版本
选择官方最新稳定版本,例如当前最新为 v1.11.1。
请以你操作时的实际最新版本为准。
2.2 修改Deployment镜像(推荐原地升级)
执行以下命令,直接更新Controller Deployment的镜像标签:
kubectl set image deployment/ingress-nginx-controller \
-n ingress-nginx \
controller=registry.k8s.io/ingress-nginx/controller:v1.11.1
如果Deployment名称不同,先通过 kubectl get deployments -n ingress-nginx 确认。
2.3 观察Pod滚动更新
kubectl rollout status deployment/ingress-nginx-controller -n ingress-nginx
等待新Pod启动成功,旧Pod自动终止。
第三步:验证升级效果与配置完整性
3.1 检查新版Pod的镜像版本
kubectl get pods -n ingress-nginx -o jsonpath='{.items[0].spec.containers[0].image}'
确保输出为刚指定的新版本。
3.2 测试Ingress配置是否生效
访问你的服务域名或NodePort,确认网站正常打开,没有502或404错误。
如果使用Helm安装,可能还需要同步Helm values,但直接修改Deployment镜像也是通用做法。
避坑指南与常见问题
升级后Ingress规则失效?
原因:新版可能调整了ConfigMap或Annotation语法。
你可以通过 kubectl describe ingress your-ingress 查看事件,或回滚镜像到旧版本。
家用主机资源不足导致Pod CrashLoopBackOff?
新版镜像可能需要更多内存,检查 kubectl describe pod 中的OOM消息,适当调整Deployment的resources.limits。
必须一步一步升级吗?
如果跨大版本(如v1.8 -> v1.11),建议先读官方Changelog,注意API变更。
跨小版本一般可以直接跳。
FAQ
Q:没有外网拉取镜像怎么办?
A:如果你在内网或家用网络受限,可以从其他机器 docker pull 后导出tar,再 docker load 到目标机器。或者使用阿里云、谷歌云等镜像代理。
Q:升级后需要重启所有Pod吗?
A:不需要。Ingress Controller只负责流量代理,业务Pod不受影响,除非你改了Service或Endpoint。
Q:如何确认漏洞是否已被修复?
A:检查升级后的版本是否在官方安全公告的已修复列表中,或者扫描镜像:trivy image registry.k8s.io/ingress-nginx/controller:v1.11.1。
通过以上步骤,你的家用K8s集群Ingress Nginx漏洞就能得到及时修复。
建议将此流程加入定期维护清单,每次官方发布安全更新时优先执行。