有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
由于 Nginx Controller 各个版本支持的 Kubernetes 版本范围比较窄,所以用户会遇到 Nginx Controller 升级的相关问题。本文向您介绍通过新建实例实现过渡的方案,以帮助您顺利升级 Nginx Controller。

迁移升级示例

集群与 Nginx 实例相关信息

当前 Kubernetes 集群版本:1.20
当前 Nginx Addon 版本:1.2.0(Nginx Addon 是 Nginx Controller 的安装工具,您可以在插件列表查看该插件与版本)
当前 Nginx Controller 版本:v0.49.3(Nginx Controller 是实际运行的社区组件,您可以在 Nginx Controller 的工作负载中查询到镜像版本)
当前 Nginx Ingress Class:prod-0-49-3
说明:
集群如果升级到 1.22,有许多旧版本的社区 CRD 定义被废弃,Nginx Controller 版本低于v1.0.0将无法正常工作。所以大部分用户在这个集群版本升级时,需要对 Nginx Controller 进行升级。

升级过程

安装新版本 Nginx Controller 实例

参考 Nginx 的安装文档,安装v1.1.3版本的 Nginx,同时建议开启日志、监控。假定文档中的新实例 Ingress Class 为 prod-1-1-3 安装新版本 Nginx Controller 实例之后。参考原实例配置,调整 Workload 规格或 HPA,避免新实例出现容量问题。

迁移 Ingress 资源

将所有旧 Nginx Controller 相关资源复制到新实例中。n这里以其中一个 Ingress 资源为例,说明迁移过程:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: prod-0-49-3
name: access
namespace: default
spec:
rules:
- host: www.exsample.com
http:
paths:
- backend:
serviceName: access-server
servicePort: 8080
path: /
pathType: ImplementationSpecific
status:
loadBalancer:
ingress:
- ip: 172.17.99.37
迁移注意事项:
1. 请保留原有 Ingress 不变,复制一个新的 Ingress 实例。请确保实例名称不能出现冲突。
2. 注意将新实例的 “kubernetes.io/ingress.class” 修改为 prod-1-1-3。
3. 请注意从 Kubernetes 1.22 版本开始,“apiVersion: extensions/v1beta1”已被删除。升级到 Nginx 版本1.1.3的同时,请将资源升级到 “apiVersion: networking.k8s.io/v1”。
4. 请注意,extensions/v1beta1 和 networking.k8s.io/v1 在 backend 内的字段格式有变化,您需要做出一定的调整。
5. 在将资源添加到集群后,Nginx Controller 会自动更新 status 的内容并提供新的 IP 地址。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: prod-1-1-3
name: access-new
namespace: default
spec:
rules:
- host: www.exsample.com
http:
paths:
- backend:
service:
name: access-server
port:
number: 8080
path: /
pathType: ImplementationSpecific
status:
loadBalancer:
ingress:
- ip: 172.17.22.11

测试、流量切换与回滚方案

1. 在本地通过 Host 绑定进行测试:
172.17.22.11 www.exsample.com
2. 测试通过之后,您可以更新 DNS 解析至新的 IP,以验证新的入口访问是否正常。
3. 如果在更新 DNS 解析配置后发现数据面流量异常,您可以通过回滚 DNS 解析配置的方式,将域名解析切换至旧实例,以恢复正常的流量。
4. 直到流量切换操作之前,在新旧版本并行存在的期间,旧版本的 Nginx Ingress 实例不会有任何变更。新实例的创建和测试都不会受到影响,这是一个相对安全可控的升级方案。

清理资源

在全部流量迁移至新实例之后,您可以按照以下步骤进行清理:
1. 可以先清理旧 Nginx Ingress 实例相关的 Ingress 资源。
2. 在控制台中销毁 Nginx Ingress 实例。

相关文档