クラスターのアップグレード後、非推奨となったクラスター API との互換性を維持するため、NGINX Ingress をアップグレードしてください。古いバージョンにはセキュリティと安定性のリスクがあり、最新機能も欠けているため、速やかに最新バージョンへアップグレードしてください。アップグレードは段階的に実行されます。トラフィックの中断を避けるため、全過程でアドオンとサービスの正常性を監視してください。
オープンソースの Ingress-NGINX プロジェクトは、2026 年 3 月以降、メンテナンスが終了します。このため、Container Service for Kubernetes も NGINX Ingress controller アドオンのメンテナンスを終了します。関連するリスクにご注意ください。「[製品発表] NGINX Ingress Controller コンポーネントのメンテナンス終了」をご参照ください。
アップグレードプロセス
NGINX Ingress コントローラーは重要なデータプレーンコンポーネントであり、安定性を維持する必要があります。
大幅なカスタム変更や大きなバージョン間隔は、アップグレード直後には表面化しない設定の非互換性を引き起こす可能性があるため、最新バージョンへの一段階アップグレードはリスクが高くなります。
アップグレードは段階的に実行されるため、各段階でサービスを検証し、問題が発生した場合はロールバックできます。
パート 1:事前チェック
アップグレード前に、コンポーネントが要件を満たしているかを検証するため、事前チェックが自動的に実行されます。設定に互換性がない場合、またはコンポーネントが正常でない場合、事前チェックは失敗します。続行する前にこれらの問題を解決してください。
パート 2:検証フェーズ
検証フェーズでは、ターゲットバージョンを実行する新しい Pod が動作と Ingress ルールを検証します。その後、トラフィックが部分的にその Pod にルーティングされます。コンテナログ、Simple Log Service、または Managed Service for Prometheus を通じてトラフィックを監視してください。
検証 Pod のスケールアウトが成功した後、アップグレードは一時停止します。コンポーネントとサービスが正常であることを確認してから、手動で続行してください。ロールバックするには、新しい Pod を削除してアップグレードを終了します。
このフェーズでは、Deployment の spec.minReadySeconds と spec.strategy が変更されます。
パート 3:リリースフェーズ
リリースフェーズでは、すべての古いインスタンスを置き換えるため、完全なローリングアップデートが実行されます。すべての Pod が更新された後、アップグレードは一時停止するため、最終ステータスを確認できます。問題が発生した場合は、すべての Pod を以前のバージョンにロールバックしてください。
パート 4:ロールバック (オプション)
検証フェーズまたはリリースフェーズの一時停止中に、問題を発見した場合はロールバックして、コンポーネントをアップグレード前の状態に復元できます。
事前準備
-
NGINX Ingress コントローラー v1.2 以前のメンテナンスは終了しました。「[製品発表] NGINX Ingress コントローラー v1.2 以前のメンテナンス終了」をご参照ください。古いバージョンでは、新機能、バグ修正、タイムリーなサポートが提供されず、未パッチの脆弱性の影響を受けます。速やかにコンポーネントをアップグレードしてください。
-
Simple Log Service または Managed Service for Prometheus を使用してトラフィック問題を検出するため、監視を設定してください。詳細については、「NGINX Ingress アクセスログの収集と分析」および「Managed Service for Prometheus への接続と設定」を参照してください。
-
コンポーネントが正常で、すべての Pod が Ready 状態にあり、エラーログが表示されていないことを確認してください。
-
HPA などの自動スケーリングルールを使用している場合は、アップグレード前に削除し、完了後に復元してください。
-
NGINX Ingress コントローラーの
LoadBalancerタイプの Service (デフォルトではnginx-ingress-lbという名前) が正常で、異常なイベントがないことを確認してください。 -
アップグレード中は、コンポーネントまたは Ingress ルールを変更しないでください。
-
NGINX Ingress コントローラーのバージョンが v0.44 より前の場合は、アップグレード前にパスマッチングロジックの変更を確認してください。
-
アップグレードではカナリアリリースが使用されます。まず新バージョンの Pod が作成され、トラフィックを確認した後にローリングアップデートが開始されます。NGINX Ingress Pod をスケジュール可能な十分なノードがクラスターにあることを確認してください。
操作手順
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
-
アドオン管理 ページで、NGINX Ingress コントローラーを探し、右下隅の アップグレード をクリックします。
-
「アップグレード」ダイアログで、開始をクリックしてアップグレードの開始を確定します。
説明アップグレード中にこのページを離れることができます。戻るには、アドオン管理 ページで アップデートの進捗状況 をクリックします。
-
アップグレードは事前チェックから開始され、その後自動的に次のフェーズに進みます。
事前チェックが失敗した場合は、事前チェック の下にある 詳細を表示 をクリックして [チェックレポート] ページを開き、失敗した項目をトラブルシューティングして、事前チェックの詳細をご参照ください。問題を解決したら、再試行 をクリックしてアップグレードを再開します。
-
検証フェーズの後、アップグレードは一時停止します。「検証フェーズの詳細」を参照して、コンポーネントとサービスのステータスを確認してください。
-
スケーリングに失敗した場合は、「検証フェーズまたはリリースフェーズ中に Pod の作成に失敗した場合の対処方法」を参照して、Pod の起動に失敗した理由を確認してください。問題を解決した後、再試行 をクリックしてこのフェーズを再試行してください。
-
検証中にサービスが失敗した場合は、ロールバック をクリックしてアップグレードをロールバックします。ロールバックが完了すると、アップグレードは終了します。再開するには、アドオンページで アップグレード をクリックします。
-
-
検証が正常であることを確認したら、続行をクリックしてリリースフェーズを開始します。ローリングアップデートが完了すると、アップグレードは再度一時停止します。最終確認を行い、問題が発生した場合はロールバックをクリックします。ロールバックが完了したら、アドオンページから再起動します。
-
コンポーネントとサービスが正常であることを確認したら、続行 をクリックしてアップグレードを完了します。
説明アップグレード全体を 1 週間以内に完了してください。
事前チェック
事前チェック項目
|
チェック項目 |
説明 |
トラブルシューティング |
|
Deployment の存在 |
コンポーネント Deployment (kube-system/nginx-ingress-controller) が存在します。 |
- |
|
Deployment の正常性 |
すべての Deployment Pod が Ready 状態であり、安定しています (ローリング中ではありません)。 |
- |
|
Pod エラーログ |
最新 200 件の Pod ログエントリで Error または Fatal ログをチェックします。 |
これらのログは、設定ミスによる最近のエラーを示している可能性があります。アップグレードを再開する前に解決してください。詳細については、「NGINX Ingress の問題のトラブルシューティング」を参照してください。 |
|
LoadBalancer Service の正常性 |
NGINX Ingress LoadBalancer Service (kube-system/nginx-ingress-lb) が存在するかを確認し、エラーイベントがないことを検証します。 Service が存在しない場合も Warning イベントとして扱われます。 |
Service が存在しない場合は、「使用上の注意と高リスク操作」の「NGINX Ingress コントローラーのインストール時に kube-system 名前空間の Service が存在するが異常なイベントがある場合は、「Service イベントとトラブルシューティング」のイベント詳細を使用して解決してください。このチェックは、LoadBalancer 以外の Service ではスキップされます。 |
|
HPA |
Deployment が HPA によって管理されていません。アクティブな HPA はアップグレードを妨げる可能性があります。 |
アップグレード中は HPA を削除し、完了後に再度有効にしてください。 |
|
Deployment テンプレート |
Deployment テンプレートに互換性のある変更のみが含まれています。 |
カスタム NGINX Ingress Deployment の変更は、アップグレード後に維持されない可能性があります。
これらのテンプレート変更によってチェックが失敗することはありません。未承認のテンプレート変更、またはアップグレード要件を満たさない古いバージョンは、チェックを失敗させ、アップグレードの成功率を低下させます。一般的な失敗原因には以下が含まれます。
Deployment テンプレートのチェックが失敗した場合は、テンプレートを手動で復元してください。詳細については、「Deployment テンプレートのチェックが失敗した場合はどうすればよいですか?」を参照してください。 |
|
Ingress 設定 |
Ingress リソースが互換性のある機能のみを使用しています。 |
互換性のない Ingress 機能は、アップグレード後にトラフィック転送を中断し、サービス停止を引き起こす可能性があります。以下の「アップグレードの互換性」を参照し、問題を特定して修正してください。 |
|
コンポーネント設定 |
コンポーネント ConfigMap (kube-system/nginx-configuration) に互換性のない設定がないことを検証します。 |
互換性のない ConfigMap 設定は、アップグレード後にトラフィック転送を中断し、サービス停止を引き起こす可能性があります。以下の「アップグレードの互換性」を参照し、問題を特定して修正してください。 |
アップグレードの互換性
新しい NGINX Ingress バージョンでは、機能の追加、既存機能の改善、またはセキュリティ問題の修正が行われる場合がありますが、内部アーキテクチャや依存関係の変更により、以前のバージョンとの互換性が失われる可能性があります。変更履歴については、「NGINX Ingress Controller」を参照してください。
デフォルトセキュリティ設定の変更
影響を受けるバージョン:v1.12.6-release.1 より前のバージョン
v1.12.6-release.1 以降、ingress-nginx はデフォルトのセキュリティ設定を強化しました。以下が含まれます。
-
annotations-risk-levelのデフォルトレベルがCriticalからHighに引き下げられました。この変更により、Criticalレベルのアノテーション (snippet関連のアノテーションなど) を持つ既存のIngressリソースが使用できなくなります。 -
allow-cross-namespace-resourcesがtrueからfalseに変更されました。この設定により、ConfigMapやSecretsなどのリソースのクロス名前空間参照がデフォルトで無効になります。 -
strict-validate-path-typeがfalseからtrueに変更されました。この設定により、厳密なパス検証がデフォルトで有効になります。これは、ExactおよびPrefixタイプのパスの場合、/で始まり、文字、数字、-、_、.、および追加の/のみを含むパスのみが許可されることを意味します。
これらのセキュリティ設定によってブロックされる機能を使用する場合は、セキュリティリスクを評価した後、ConfigMap kube-system/nginx-configuration で手動で有効にしてください。
ネイティブ NGINX 検証がデフォルトで無効
影響を受けるバージョン:v1.11.5-aliyun.1 より前のバージョン
CVE-2023-1974 を修正するため、NGINX Ingress コントローラーは v1.11.5-aliyun.1 以降、デフォルトでネイティブ NGINX 検証 (nginx -t ロジック) を無効にします。検証 Webhook は有効のままですが、スニペットベースのルールは検証されません。デフォルトでは、非スニペットアノテーションのみが検証されます。スニペットルールについては、NGINX ランタイムエラーログを確認してください。詳細については、「脆弱性 CVE-2023-1097、CVE-2023-1098、CVE-2023-1974、CVE-2023-24513、CVE-2023-24514 のアナウンス」を参照してください。
スニペットアノテーションを使用する場合は、対応する Ingress ルールを変更するたびに、NGINX Ingress Pod ログで Error 関連のエントリを確認してください。
kubectl logs -f <Nginx-ingress-pod-name> -n kube-system | grep Error
ネイティブ NGINX 検証を再度有効にするには、リスクを十分に評価した後、ConfigMap kube-system/nginx-configuration に enable-nginx-native-validation: "true" を追加してください。
スニペットアノテーションがデフォルトで無効
影響を受けるバージョン:v1.9.3-aliyun.1 より前のバージョン
セキュリティ上の理由から、NGINX Ingress コントローラーは v1.9.3-aliyun.1 以降、デフォルトですべてのスニペットアノテーションを無効にします。以下が含まれます。
-
nginx.ingress.kubernetes.io/configuration-snippet
-
nginx.ingress.kubernetes.io/server-snippet
-
nginx.ingress.kubernetes.io/stream-snippet
-
nginx.ingress.kubernetes.io/auth-snippet
-
nginx.ingress.kubernetes.io/modsecurity-snippet
セキュリティと安定性のリスクがあるため、代替アノテーションまたは設定オプションを優先してください。
スニペットアノテーションを使用するには、リスクを十分に評価した後、ConfigMap kube-system/nginx-configuration に allow-snippet-annotations: "true" を追加してください。
レガシー TLS バージョンのサポート終了
影響を受けるバージョン:v1.7.0-aliyun.1 より前のバージョン
TLS 1.1 以前のセキュリティ問題のため、新しい NGINX Ingress バージョンではデフォルトで TLS v1.1 および TLS v1.0 をサポートしなくなりました。アップグレード前に、サービスが TLS v1.1 以前に依存していないことを確認し、設定から削除してください。ConfigMap の変更は即座に有効になります。
たとえば、NGINX Ingress コントローラーの ConfigMap (kube-system/nginx-configuration) が次のように設定されている場合:
ssl-protocols: SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2 TLSv1.3
サービスが影響を受けないことを確認した後、この行を削除してデフォルトを使用するか、SSLv3、SSLv2、TLSv1、TLSv1.1 を削除して次のように変更してください。
ssl-protocols: TLSv1.2 TLSv1.3
古い TLS 暗号化方式を強制するには、「Ingress ではどの SSL/TLS バージョンがサポートされていますか?」を参照してください。
nginx.ingress.kubernetes.io/rewrite-target の互換性のない使用方法
影響を受けるバージョン:0.22.0 より前のバージョン
-
バージョン 0.22.0 では、
nginx.ingress.kubernetes.io/rewrite-targetアノテーションの使用方法が変更されました。バージョン 0.22.0 以降では、rewrite-targetを使用する際に、キャプチャグループを明示的に指定する必要があります。 -
0.22.0 より前の rewrite-target の動作は、現在のバージョンと互換性がありません。アップグレード前に、
rewrite-targetの代わりにconfiguration-snippetアノテーションを使用してください。
たとえば、0.22.0 より前のバージョンでは、ルールは次のとおりです。
次のように変更してください。
この形式に設定を更新した後、アップグレードを続行してください。アップグレード完了後、Ingress を新しい構文に更新してください。
ネイティブ NGINX の root および alias ディレクティブのサポート終了
影響を受けるバージョン:v1.2.1-aliyun.1 より前のバージョン
root および alias ディレクティブのセキュリティ問題のため、新しい NGINX Ingress バージョン (「NGINX Ingress Controller」) では root および alias ディレクティブがサポートされなくなりました。アップグレード前に、Ingress がスニペットを通じて設定されたネイティブ NGINX root または alias ディレクティブを使用していないことを確認してください。
パスマッチングロジックの変更
パスマッチングロジックは NGINX Ingress バージョン間で異なる場合があり、サービスアクセスの問題を引き起こす可能性があります。
-
古いバージョン (v0.44 より前) では、プレフィックスマッチングはより寛容でした。たとえば、
/aaa/bbbは/aaa/bbbbbにマッチする可能性がありました。 -
アップグレード後、プレフィックスマッチングはより厳密になり、正確なリクエストパスのみにマッチします。以前マッチしていた
/aaa/bbbbbなどのパスは 404 を返す可能性があります。
影響を受けるバージョン
v0.44 より前の NGINX Ingress コントローラーバージョン。変更履歴については、「NGINX Ingress Controller」を参照してください。関連する PR 情報については、「kubernetes/ingress-nginx #6443」を参照してください。
Gzip のデフォルト無効化
デフォルトで有効になっている機能は、バージョンによって異なります。たとえば、NGINX Ingress コントローラーの v0.40 より前のバージョンでは gzip がデフォルトで有効ですが、それ以降のバージョンではデフォルトで無効になっています。コンポーネントを更新すると gzip が無効になり、関連する Classic Load Balancer (CLB) のトラフィックが増加する可能性があります。CLB インスタンスが従量課金制を使用している場合、これによりコストが増加する可能性があります。
解決策
kube-system 名前空間の nginx-configuration ConfigMap を編集して、gzip 圧縮を有効にしてください。
data:
use-gzip: true
検証フェーズ
コンポーネントとサービスのステータスの確認
独自の監視ツールに加えて、ACK は NGINX Ingress を監視するために Simple Log Service ログ、Managed Service for Prometheus ダッシュボード、およびネイティブコンテナログを提供します。これらを有効にするには、「NGINX Ingress アクセスログの収集と分析」および「Managed Service for Prometheus への接続と設定」を参照してください。
Simple Log Service
ACK コンソールで Simple Log Service によって収集されたログを表示します。
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
-
アプリケーションログ タブをクリックし、Logstore ドロップダウンリストから nginx-ingress を選択し、ログストアの選択 をクリックします。
説明Logstore に nginx-ingress がない場合は、コンポーネントのログ収集が設定されていることを確認してください。詳細については、「NGINX Ingress アクセスログの収集と分析」を参照してください。
ログにはアプリケーションアクセスデータが表示されます。Pod (新バージョンの Pod など) でフィルタリングして、リクエスト成功率とリクエスト数を古い Pod と比較してください。データが大きく乖離している場合はロールバックしてください。
デフォルトでは、Ingress ルールが一致しないために 404 を返すリクエストのアクセスログは記録されません。
Prometheus ダッシュボード
Managed Service for Prometheus のダッシュボードを使用して、全体的なリクエストステータスを確認します。
ACK コンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
-
ネットワークモニタリング タブをクリックし、次に Ingress をクリックします。
説明Ingress が利用できない場合は、コンポーネントで Prometheus のメトリクス収集が設定されているかを確認してください。 「Prometheus 向けマネージドサービスに接続して設定する」をご参照ください。
ダッシュボードには Ingress の運用メトリクスが表示されます。特定の Pod を選択して、リクエスト成功率とリクエスト数を古い Pod と比較してください。データが大きく乖離している場合はロールバックしてください。
デフォルトでは、Host のない Ingress ルール (デフォルトは "*") のメトリクスは記録されません。
Pod ログ
kubectl を使用してコマンドラインから Pod ログにアクセスし、エラーを確認します。
-
Pod 内の NGINX エラーログ (warn、error、crit レベルを含む) を表示します。
kubectl logs -n kube-system <PodName> | grep -e warn -e error -e crit -
Pod 内のコントローラーエラーログを表示します。
kubectl logs -n kube-system <PodName> | grep "^[EF]"
よくある質問
NGINX Ingress コントローラーを特定のバージョンにアップグレードできますか? アップグレード成功後に以前のバージョンにロールバックできますか?
NGINX Ingress コントローラーは特定のバージョンへのアップグレードをサポートしていません。アップグレードは段階的に最新バージョンに進みます。アップグレード成功後にロールバックすることはできません。
検証フェーズまたはリリースフェーズ中に Pod の作成に失敗した場合はどうすればよいですか?
|
原因 |
解決策 |
|
新バージョンの Pod が起動中に失敗し (設定の読み込み失敗など)、クラッシュループに入ります。 |
「Pod ログ」の方法を使用してエラーログを表示し、「NGINX Ingress の問題のトラブルシューティング」を参照して、問題を解決してください。 |
|
これは、NGINX Ingress が専用ノードで実行されている場合によく見られます。リソース制限と nodeSelector により、新しい Pod のスケジュールに失敗する可能性があります。 |
一時的にノードを追加するか、アップグレード前にオフピーク時に NGINX Ingress をスケールダウンして、アップグレード中に Pod がスケジュールできるようにしてください。 |
Deployment テンプレートのチェックが失敗した場合はどうすればよいですか?
デプロイテンプレートが事前チェックに失敗した場合、異常の原因 の横にあるリンクをクリックして、コンポーネント差分ページを開き、失敗したフィールドを表示します。
-
NGINX Ingress Controller のアップグレード ページで、事前チェック の下にある 詳細情報 をクリックします。
-
[チェックレポート] ページの [クラスターコンポーネントのチェック結果] セクションで、チェック結果をクリックします。次に、チェック結果 ページで [デプロイメントテンプレート] をクリックし、最後に 異常の原因 の横にあるリンクをクリックします。
-
[コンポーネントの差分] ページに移動して、チェックに失敗したフィールドを表示します。
コンポーネントの差分ページでは、このバージョンの標準テンプレート (左側) と現在のクラスターテンプレート (右側) を比較し、互換性のある差分と互換性のない差分を強調表示します。また、クラスターコンポーネントが差分チェックに合格したかどうかを示し、互換性のないフィールドパスをリストします。
-
異なるフィールドを変更します。
を選択し、[NGINX Ingress コントローラー] コンポーネントを見つけ、 を選択します。YAML の編集 ページで、args フィールドの
--v=3を--v=2に変更します。 -
フィールドを変更した後、コンポーネントの差分ページを更新してください。ページに [コンポーネントは差分チェックに合格できます] と表示されたら、Deployment テンプレートのチェックは合格します。
説明クラスター Deployment を変更すると、NGINX Ingress Pod が再起動します。オフピーク時に実行してください。
関連ドキュメント
-
NGINX Ingress の変更履歴については、「NGINX Ingress Controller」を参照してください。
-
ネットワーク接続またはその他の NGINX Ingress の問題については、「クラスターセキュリティグループの設定」および「NGINX Ingress FAQ」を参照してください。