全部產品
Search
文件中心

:升級應用市場ack-ingress-nginx

更新時間:Jun 19, 2024

應用市場中的ack-ingress-nginx和ack-ingress-nginx-v1提供了nginx ingress controller應用。本文介紹如何手動升級ack-ingress-nginx為ack-ingress-nginx-v1。

前提條件

  • 已有Kubernetes叢集,且叢集版本為1.20及以上。

說明

Chart版本4.0.17(對應組件版本v1.8.0-aliyun.1)及以上的ack-ingress-nginx-v1僅支援1.22及以上版本叢集。若您的叢集版本為1.20,需要選擇4.0.16版本(對應組件版本v1.2.1-aliyun.1)進行部署。

  • 叢集中存在從應用市場安裝的ack-ingress-nginx應用。

背景資訊

由於ACK Kubernetes 1.24版本棄用了v1beta1版本的Ingress資源,導致ACK Kubernetes 1.24版本中的舊版本Ingress Controller無法正常使用。

如果ack-ingress-nginx安裝的Nginx Ingress Controller應用為0.44.0版本,該應用使用了v1beta1版本的Ingress資源,那麼ACK Kubernetes升級到1.24版本後,會導致Nginx Ingress Controller應用停用情況。

出於對模板參數相容性的考量,新版本Nginx Ingress Controller(版本≥1.1.0)使用ack-ingress-nginx-v1應用。您需要手動將ack-ingress-nginx替換為ack-ingress-nginx-v1,以完成應用版本的升級。

說明

該文檔不適用於組件管理中提供的Nginx Ingress Controller組件。如需要升級Nginx Ingress Controller組件,請參見升級Nginx Ingress Controller組件

步驟一:建立ack-ingress-nginx-v1應用

通過應用市場建立ack-ingress-nginx-v1應用

對於每一套ack-ingress-nginx應用,您都需要為其部署對應的ack-ingress-nginx-v1。具體步驟以及參數配置,請參見部署多個Ingress Controller

說明

請勿將即將部署的ack-ingress-nginx-v1中controller.ingressClassResource.name與舊的ack-ingress-nginx中的controller.ingressClass設定成相同的值。Ingress Class的衝突可能會造成Ingress Controller的穩定性問題。

(可選)對SLB規格和參數進行調整

如果您之前對ack-ingress-nginx中的SLB規格或參數進行過調整,則可能需要同時對新部署的應用中的SLB參數也進行相同調整。通過參數中的Annotations controller.service(公網)或Annotation controller.service.internal(私網)對Service進行配置,建立對應的ack-ingress-nginx-v1。通過Annotations對Service進行配置的詳細資料,請參見通過Annotation配置傳統型負載平衡CLB

步驟二:建立Ingress路由規則並驗證

建立完新的ack-ingress-nginx-v1應用後,為了不影響現有的流量和應用穩定性,您需要將原有的Ingress路由規則複製一份,修改Ingress Class後,應用到叢集中。例如,原有Ingress路由規則如下。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: nginx-intranet # 原Ingress Class為nginx-intranet。
spec:
  rules:
  - host: test-ingress.com
    http:
      paths:
      - path: /foo
        backend:
          service:
            name: web1-service
            port:
              number: 8080
        pathType: ImplementationSpecific
      - path: /bar
        backend:
          service:
            name: web1-service
            port:
              number: 8080
        pathType: ImplementationSpecific

建立新的Ingress路由規則。

  • 使用Annotation時,請更改Annotation中的Ingress Class名稱,其他配置保持不變。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: test-ingress-v1 # 需要建立新的Ingress資源
      namespace: default
      annotations:
        kubernetes.io/ingress.class: nginx-intranet-v1 # 更改為ack-ingress-nginx-v1使用的Ingress Class名稱,樣本為nginx-intranet-v1。
    spec:
      rules:
      - host: test-ingress.com
        http:
          paths:
          - path: /foo
            backend:
              service:
                name: web1-service
                port:
                  number: 8080
            pathType: ImplementationSpecific
          - path: /bar
            backend:
              service:
                name: web1-service
                port:
                  number: 8080
            pathType: ImplementationSpecific
  • 不使用Annotation,而是spec.ingressClassName指定Ingress Class時,請參考上述操作建立新的Ingress路由規則,且更改spec.ingressClassName中的Ingress Class名稱。

在建立完新的Ingress路由規則後,您可以通過設定hosts,將網域名稱解析到新的CLB IP上的方式,來驗證功能是否正常。

步驟三:遷移流量

在Ingress路由規則建立完成並確認業務功能正常後,您可以通過更改DNS解析的方式來將流量遷移至新的ack-ingress-nginx-v1應用中。

登入Alibaba Cloud DNS控制台或者您的網域名稱所在的解析控制台,將業務所在網域名稱解析至新的IP上。解析需要一定時間才會生效,在此期間,請您密切關注業務狀態,以便在發現問題時及時修複或復原。您可以通過容器內日誌或Metrics來監控流量遷移情況。

後續步驟

在流量全部遷移完成並確認業務正常後,即可刪除原來的ack-ingress-nginx應用。您可以登入Container Service管理主控台,選擇對應的叢集,在左側導覽列中選擇應用 > Helm,找到對應的發布並單擊右側的刪除