一、集群与 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 相关资源复制到新实例中。
这里以其中一个 Ingress 资源为例,说明迁移过程:
apiVersion: extensions/v1beta1kind: Ingressmetadata: annotations: kubernetes.io/ingress.class: prod-0-49-3 name: access namespace: defaultspec: rules: – host: www.exsample.com http: paths: – backend: serviceName: access-server servicePort: 8080 path: / pathType: ImplementationSpecificstatus: 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/v1kind: Ingressmetadata: annotations: kubernetes.io/ingress.class: prod-1-1-3 name: access-new namespace: defaultspec: rules: – host: www.exsample.com http: paths: – backend: service: name: access-server port: number: 8080 path: / pathType: ImplementationSpecificstatus: 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 实例。
六、相关文档
安装 Nginx-ingress 实例