このトピックでは、Container Service for Kubernetes (ACK) コンソール のマーケットプレイス ページにインストールされている ack-ingress-nginx をアップグレードする方法について説明します。
背景情報
Kubernetes 1.24 では、Ingress API v1beta1 は非推奨となっています。 ack-ingress-nginx によって NGINX Ingress コントローラー 0.44.0 がインストールされている場合、コントローラーは Ingress API v1beta1 を使用します。 この場合、クラスタの Kubernetes バージョンを 1.24 にアップグレードした後、NGINX Ingress コントローラーは期待どおりに動作しません。
NGINX Ingress コントローラー 1.1.0 以後は、ack-ingress-nginx-v1 によってデプロイされます。 NGINX Ingress コントローラーが期待どおりに動作することを保証するために、ack-ingress-nginx を ack-ingress-nginx-v1 に置き換えることをお勧めします。
このトピックは、ACK コンソール のアドオン ページからデプロイされた NGINX Ingress コントローラーには適用されません。 アドオン ページからデプロイされた NGINX Ingress コントローラーの管理方法の詳細については、「NGINX Ingress コントローラーを更新する」をご参照ください。
前提条件
Kubernetes 1.20 以後を実行する ACK クラスタが作成されている。
チャートバージョン 4.0.17 以後 (ack-ingress-nginx-v1 1.8.0-aliyun.1 以後) は、ACK クラスタが Kubernetes 1.22 以後を実行している場合にのみ選択できます。 ACK クラスタが Kubernetes 1.20 を実行している場合は、チャートバージョン 4.0.16 (ack-ingress-nginx-v1 1.2.1-aliyun.1) を選択してください。
ACK コンソール のマーケットプレイス ページから、ack-ingress-nginx がクラスタにインストールされている。
手順 1: ack-ingress-nginx-v1 をインストールする
ACK コンソール のマーケットプレイス ページから ack-ingress-nginx-v1 をインストールする
ack-ingress-nginx をインストールすることでデプロイされた各 NGINX Ingress コントローラーに対して、ack-ingress-nginx-v1 をインストールします。 詳細については、「クラスタに複数の Ingress コントローラーをデプロイする」をご参照ください。
ack-ingress-nginx-v1 の controller.ingressClassResource.name パラメーターの値を、ack-ingress-nginx の controller.ingressClass パラメーターの値に設定しないでください。 そうしないと、Ingress クラスの競合が原因で、NGINX Ingress コントローラーが期待どおりに動作しない可能性があります。
(オプション) SLB の仕様とパラメーターを変更する
ack-ingress-nginx で Server Load Balancer (SLB) の仕様またはパラメーターを変更した場合は、変更を ack-ingress-nginx-v1 に移行することができます。 これを行うには、ack-ingress-nginx-v1 の controller.service
アノテーション (インターネット向け SLB インスタンスの場合) または controller.service.internal
アノテーション (イントラネット SLB インスタンスの場合) を構成して、LoadBalancer サービスを構成します。 サービスアノテーションの構成方法の詳細については、「アノテーションを使用して CLB インスタンスを構成する」および「アノテーションを使用して NLB インスタンスを構成する」をご参照ください。
手順 2: 新しい Ingress を作成し、ack-ingress-nginx-v1 が期待どおりにトラフィックをルーティングできるかどうかをテストする
ack-ingress-nginx-v1 をインストールした後、元の Ingress の構成に基づいて新しい Ingress を作成します。 Ingress で指定されている Ingress クラスを変更します。 元の Ingress の例:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: nginx-intranet # 元の Ingress で指定されている Ingress クラスは 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 を作成します。
アノテーションを使用して Ingress クラスが指定されている場合は、Ingress クラスの名前を変更する必要がありますが、他のアノテーションは変更しないでください。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test-ingress-v1 # 新しい Ingress を作成します。 namespace: default annotations: kubernetes.io/ingress.class: nginx-intranet-v1 # Ingress クラスの名前を、nginx-intranet-v1 で使用されている Ingress クラス名に変更します。 この例では、Ingress クラス名は 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
spec.ingressClassName
パラメーターを使用して Ingress クラスが指定されている場合は、上記の手順を繰り返して新しい Ingress を作成し、新しい Ingress のspec.ingressClassName
パラメーターの値を変更します。
新しい Ingress を作成した後、hosts ファイルを構成して、ドメイン名を新しい Classic Load Balancer (CLB) インスタンスの IP アドレスにマッピングできます。 次に、ack-ingress-nginx-v1 が期待どおりにトラフィックをルーティングできるかどうかをテストします。
手順 3: トラフィックを ack-ingress-nginx-v1 に切り替える
ack-ingress-nginx-v1 が期待どおりにトラフィックをルーティングできることを確認した後、DNS 解決設定を変更して、トラフィックを ack-ingress-nginx-v1 に切り替えます。
Alibaba Cloud DNS コンソール、または使用しているドメイン名の解決設定を構成できるコンソールにログインし、ドメイン名を新しい CLB インスタンスの IP アドレスにマッピングします。 DNS 解決設定の変更は、一定期間後に有効になります。 この期間中は、エラーが発生した場合に備えて、ビジネスに注意することをお勧めします。 コンテナーログとメトリックを表示して、スイッチオーバーの進行状況を監視できます。
次の手順
トラフィックが完全に ack-ingress-nginx-v1 に切り替えられ、ビジネスに期待どおりにアクセスできることを確認した後、ack-ingress-nginx をアンインストールします。 ACK コンソール にログインします。 クラスタを選択し、クラスタ詳細ページに移動します。 左側のナビゲーションウィンドウで、 を選択します。 ack-ingress-nginx という名前の Helm リリースを見つけ、[アクション] 列の [削除] をクリックします。