クラスターのアップグレード後、非推奨になったクラスター API との互換性を維持するために NGINX Ingress をアップグレードします。古いバージョンはセキュリティと安定性のリスクを伴い、最新の機能が欠けているため、速やかに最新バージョンにアップグレードしてください。アップグレードは複数のフェーズで実行されます。トラフィックの中断を避けるため、プロセス全体を通してアドオンとサービスの正常性を監視してください。
オープンソースの Ingress-NGINX プロジェクトは 2026 年 3 月以降、メンテナンスされなくなります。その結果、Container Service for Kubernetes も NGINX Ingress コントローラーアドオンのメンテナンスを終了します。関連するリスクにご注意ください。詳細については、「[製品発表] NGINX Ingress コントローラーコンポーネントのメンテナンス終了」をご参照ください。
アップグレードプロセス
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 のエラーログ |
Pod の最新 200 件のログエントリーに Error または Fatal ログがないかチェックします。 |
これらのログは、設定ミスによる最近のエラーを示している可能性があります。アップグレードを再開する前に、これらを解決してください。詳細については、「NGINX Ingress の問題のトラブルシューティング」をご参照ください。 |
|
LoadBalancer Service の正常性 |
NGINX Ingress LoadBalancer Service (kube-system/nginx-ingress-lb) が存在するかどうかをチェックし、エラーイベントがないことを確認します。 Service が見つからない場合も、警告イベントとして扱われます。 |
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に引き下げられました。この変更により、snippet関連のアノテーションなど、Criticalレベルのアノテーションを持つ既存の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 v1.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 がデフォルトで無効化
デフォルトで有効になっている機能は、バージョンによって異なります。たとえば、v0.40 より前の NGINX Ingress コントローラーのバージョンでは gzip がデフォルトで有効ですが、それ以降のバージョンではデフォルトで無効になっています。コンポーネントを更新すると gzip が無効になり、関連する Classic Load Balancer (CLB) のトラフィックが増加する可能性があります。CLB インスタンスが従量課金制を使用している場合、これによりコストが増加する可能性があります。
解決策
kube-system 名前空間の nginx-configuration ConfigMap を編集して、gzip 圧縮を有効にします。
data:
use-gzip: true
検証フェーズ
コンポーネントとサービスのステータスの検証
独自の監視ツールに加えて、ACK は Simple Log Service のログ、Managed Service for Prometheus のダッシュボード、およびネイティブコンテナーログを提供して NGINX Ingress を監視します。これらを有効にするには、「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 メトリック収集が設定されていることを確認してください。詳細については、「Managed Service for 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 テンプレートのチェックに失敗した場合はどうすればよいですか?
Deployment テンプレートが事前チェックに失敗した場合、異常の原因 の横にあるリンクをクリックしてコンポーネントの差分ページを開き、失敗したフィールドを表示します。
-
[NGINX Ingress Controller のアップグレード] ページの 事前チェック で、詳細情報 をクリックします。
-
[チェックレポート] ページの [クラスターコンポーネントのチェック結果] セクションで、① の赤いボックスをクリックしてチェック結果を表示します。次に、チェック結果 ページで [Deployment テンプレート] をクリックし、最後に ② の 異常の原因 の横にあるリンクをクリックします。

-
[コンポーネントの差分] ページに移動して、チェックに失敗したフィールドを表示してください。
コンポーネントの差分ページでは、このバージョンの標準テンプレート (左) と現在のクラスターテンプレート (右) を比較し、互換性のある差分と互換性のない差分を強調表示します。また、クラスターコンポーネントが差分チェックに合格したかどうか、および互換性のないフィールドパスも一覧表示します。
以下の例では、異なるフィールドは .spec.template.spec.containers.(nginx-ingress-controller).args です (括弧は配列要素名を示します)。比較から、args の
--v=2が--v=3に変更されており、アップグレード前に修正する必要があることがわかります。
-
異なるフィールドを変更してください。
を選択し、[NGINX Ingress controller] コンポーネントを見つけて、 を選択します。YAML の編集 ページで、args フィールドの
--v=3を--v=2に変更してください。 -
フィールドを変更した後、コンポーネントの差分ページを更新してください。ページに [コンポーネントは差分チェックに合格できます] と表示されると、Deployment テンプレートのチェックは合格します。
説明クラスターの Deployment を変更すると、NGINX Ingress Pod が再起動します。この操作はオフピーク時に実行してください。

関連ドキュメント
-
NGINX Ingress の変更履歴については、「NGINX Ingress Controller」をご参照ください。
-
ネットワーク接続やその他の NGINX Ingress の問題については、「クラスターセキュリティグループの設定」および「NGINX Ingress FAQ」をご参照ください。