Kubernetes Ingress-Nginx 升级记录

前言

Ingress-Nginx 是 Kubernetes 生态中最常用的 Ingress Controller,负责将外部请求路由到集群内部的服务。在实际使用过程中,定期升级 Ingress-Nginx 以修复漏洞、增强功能、提高稳定性是非常重要的。

1. 检查当前 Ingress-Nginx 版本

在升级前,首先需要确认当前正在运行的版本。

helm list -n ingress-nginx

或者使用 kubectl 命令查看 Pod 及其镜像版本:

kubectl get pods -n ingress-nginx -o wide
kubectl describe pod <ingress-nginx-pod> -n ingress-nginx | grep Image

如果你使用 kubectl apply 安装的 Ingress-Nginx,可以通过以下命令检查 Deployment 版本:

kubectl get deployment -n ingress-nginx -o yaml | grep 'image:'

2. 备份当前配置

在升级之前,建议备份当前 Ingress-Nginx 配置,以便在升级失败时快速回滚。

2.1 备份 Ingress 规则

kubectl get ingress -A -o yaml > ingress-backup.yaml

2.2 备份 Helm Values(如果是 Helm 安装的)

helm get values ingress-nginx -n ingress-nginx -o yaml > values-backup.yaml

3. 确定目标升级版本

查看 Ingress-Nginx 官方最新发布的版本:https://github.com/kubernetes/ingress-nginx/releases

检查 Kubernetes 版本与 Ingress-Nginx 兼容性:

kubectl version --short
helm search repo ingress-nginx -l | head -5  # 列出最新 5 个版本

例如,如果你的 Kubernetes 版本是 1.29.x,请确保选择与其兼容的 Ingress-Nginx 版本。


4. 开始升级 Ingress-Nginx

4.1 使用 Helm 升级(推荐方式)

如果你使用 Helm 部署了 Ingress-Nginx,可以使用以下命令升级:

helm repo update  # 更新 Helm 仓库
helm upgrade ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx -f values-backup.yaml

如果要指定特定版本,例如 4.12.1,可以运行:

helm upgrade ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx -f values-backup.yaml --version 4.12.1

4.2 使用 Helm 手动安装或升级

如果你下载了 .tgz 包并想要手动安装或升级 Ingress-Nginx,可以使用以下命令:

# 安装
helm install ingress-nginx -n ingress-nginx -f values-4.12.1.yaml ingress-nginx-4.12.1.tgz

# 升级
helm upgrade ingress-nginx -n ingress-nginx -f values-4.12.1.yaml ingress-nginx-4.12.1.tgz

# 卸载
helm uninstall ingress-nginx -n ingress-nginx

4.3 使用 kubectl apply 升级

如果你使用 kubectl apply 安装的 Ingress-Nginx,可以通过下载最新的 deploy.yaml 进行升级:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.0/deploy/static/provider/cloud/deploy.yaml

5. 验证升级是否成功

5.1 检查 Pod 状态

kubectl get pods -n ingress-nginx

所有 Pod 应该处于 Running 状态。

5.2 检查 Ingress 规则

kubectl get ingress -n <your-namespace>

5.3 测试访问

使用 curl 或浏览器访问 Ingress 入口地址,确保请求能够正常路由到后端服务。

curl -v http://<your-ingress-domain>

6. 解决常见问题

6.1 Helm 升级卡住

如果 Helm 命令执行后一直没有响应,可能是由于 Pod 无法正常启动。

解决方案:

kubectl get pods -n ingress-nginx
kubectl describe pod <pod-name> -n ingress-nginx

如果发现 ErrImagePull,尝试手动拉取镜像:

docker pull registry.k8s.io/ingress-nginx/controller:v1.9.0

6.2 Pod 无法删除

如果 kubectl delete pod 后 Pod 仍然存在,可以使用强制删除:

kubectl delete pod <pod-name> -n ingress-nginx --grace-period=0 --force

如果还是删除不了,尝试重启 kubelet

sudo systemctl restart kubelet

6.3 访问 Ingress 时 404 错误

可能是 Ingress 规则未正确匹配,检查日志:

kubectl logs -n ingress-nginx <controller-pod>

确保 Ingress 规则正确:

kubectl describe ingress -n <your-namespace>

7. 结论

升级 Ingress-Nginx 是保障 Kubernetes 集群稳定性和安全性的关键步骤。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值