Kubernetes 1.24 以降をサポートするために、ack-ingress-nginx を ack-ingress-nginx-v1 に置き換えます。
背景情報
Container Service for Kubernetes (ACK) の Kubernetes 1.24 では、v1beta1 Ingress リソースが非推奨になりました。ack-ingress-nginx は Nginx Ingress Controller 0.44.0 をインストールしますが、これは v1beta1 を使用しています。Kubernetes 1.24 にアップグレードすると、このコントローラーは使用できなくなります。
ack-ingress-nginx-v1 は Nginx Ingress Controller 1.1.0 以降を使用します。コントローラーを継続して稼働させるために、ack-ingress-nginx を ack-ingress-nginx-v1 に置き換えます。
これは、コンポーネント管理にある Nginx Ingress Controller には適用されません。そのコンポーネントをアップグレードする場合は、「Nginx Ingress Controller コンポーネントのアップグレード」をご参照ください。
前提条件
-
クラスターバージョンが 1.20 以降であること。
説明ack-ingress-nginx-v1 Chart 4.0.17+ (コンポーネント v1.8.0-aliyun.1+) には、クラスターバージョン 1.22 以降が必要です。クラスターバージョン 1.20 の場合は、Chart 4.0.16 (コンポーネント v1.2.1-aliyun.1) を使用してください。
-
ack-ingress-nginx がマーケットプレイスからインストールされていること。
ステップ 1:ack-ingress-nginx-v1 アプリケーションの作成
マーケットプレイスからの ack-ingress-nginx-v1 アプリケーションの作成
各 ack-ingress-nginx アプリケーションについて、「複数の Ingress コントローラーをデプロイしてトラフィックを分離する」の説明に従い、対応する ack-ingress-nginx-v1 アプリケーションをデプロイします。
ack-ingress-nginx-v1 の controller.ingressClassResource.name を、ack-ingress-nginx の controller.ingressClass と同じ値に設定しないでください。Ingress Class が競合すると、コントローラーの安定性に影響を与える可能性があります。
(オプション) SLB の仕様とパラメーターの調整
以前に ack-ingress-nginx のサーバーロードバランサー (SLB) の仕様またはパラメーターを調整していた場合、ack-ingress-nginx-v1 に対しても同様の調整が必要になる場合があります。アノテーションを使用して Service を構成するには、controller.service (パブリックネットワーク) または controller.service.internal (プライベートネットワーク) を使用します。CLB の場合は「アノテーションを使用してクラシックロードバランサー (CLB) を構成する」、NLB の場合は「アノテーションを使用してネットワークロードバランサー (NLB) を構成する」をご参照ください。
ステップ 2:Ingress ルーティングルールの作成と検証
トラフィックを中断しないように、既存の Ingress ルーティングルールをコピーし、Ingress Class を更新して適用します。例:
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 ルーティングルールを作成します。
-
アノテーションを使用する場合は、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 -
アノテーションの代わりに
spec.ingressClassNameを使用する場合は、新しい Ingress リソースを作成し、spec.ingressClassName内の Ingress Class 名を更新します。
新しい Ingress ルールを作成したら、ローカルの hosts ファイルを更新してドメイン名を新しいロードバランサーの IP アドレスに解決し、検証します。
ステップ 3:トラフィックの移行
新しい Ingress ルーティングルールを検証した後、DNS レコードを更新してトラフィックを ack-ingress-nginx-v1 に移行します。
Alibaba Cloud DNS コンソール またはドメインプロバイダーの DNS コンソールにログインします。DNS レコードを更新して、新しい IP アドレスを参照するようにします。DNS の伝播中はアプリケーションを監視し、必要に応じてロールバックします。コンテナログまたはメトリクスを使用して、移行の進捗を追跡します。
次のステップ
すべてのトラフィックを移行し、正常な動作を確認したら、元の ack-ingress-nginx アプリケーションを削除します。コンテナサービス for Kubernetes コンソールにログインします。クラスターを選択し、 を選択し、リリースを見つけて 削除 をクリックします。