Nginx Ingress は、ACK マネージドクラスター内のトラフィック用のイングレスゲートウェイです。柔軟なルーティングルールを使用して、外部リクエストを内部サービスに転送します。Nginx Ingress は、HTTPS 暗号化、段階的リリース、およびアノテーションによるカスタム構成をサポートします。これらの特徴は、安全で高可用性かつスケーラブルなレイヤー 7 ネットワークを構築するのに役立ちます。
Classic Load Balancer (CLB) のサブスクリプション課金方法は利用できなくなりました。2025 年 8 月 28 日以降、Container Service for Kubernetes コンソールで新しい Nginx Ingress Controller をインストールすると、デフォルトで Network Load Balancer (NLB) インスタンスが作成されます。CLB インスタンスの使用はホワイトリストに制限されています。CLB インスタンスを作成するには、デフォルトで従量課金方法が使用されます。詳細については、「[製品変更] 新規サービスおよび Nginx Ingress Controller のデフォルトのロードバランサータイプと課金方法の変更に関するお知らせ」をご参照ください。
注意事項
Nginx Ingress Controller で使用されるデフォルトのサービスを削除しないでください。コンポーネントをインストールすると、デフォルトで
kube-system名前空間にnginx-ingress-lbという名前のサービスが作成されます。このサービスを削除すると、コンポーネントが不安定になったり、クラッシュしたりする可能性があります。[コンポーネント管理] ページで、または OpenAPI を呼び出して、カスタムコンポーネントパラメーターを設定します。他のチャネルを通じてコンポーネントの構成を変更すると、コンポーネントが期待どおりに機能しなくなり、将来のアップグレードが失敗する可能性があります。
必要な機能を実装するには、Nginx Ingress 設定ディクショナリを使用します。スニペットまたは Lua コードを使用してコンポーネントにカスタム構成を追加した場合、予期しない動作などの結果として生じる問題はテクニカルサポートの対象外となります。
アップストリームコミュニティバージョンのバグや脆弱性による問題を回避するために、Nginx Ingress Controller コンポーネントを速やかにアップグレードしてください。
前提条件
Nginx Ingress Controller コンポーネントがインストールされていること。インストール後、コンポーネントは Nginx Ingress のトラフィックイングレスとして機能する Classic Load Balancer (CLB) インスタンスに関連付けられます。
ドメイン名を登録こと。
商用証明書を購入して証明書を申請し、使用する証明書が [発行済み] 状態であることを確認していること。
サンプルアプリケーションの作成
サンプルアプリケーションは、coffee と tea という名前の 2 つのステートレスワークロード (デプロイメント) と、coffee-svc と tea-svc という名前の対応するサービスをデプロイします。
コンソール
1. リソースの作成
|
|
2. 作成結果の表示 [YAML リソース作成結果] ダイアログボックスで、リソースの [アクション] 列にある [表示] をクリックして作成結果を確認します。 |
|
kubectl
test-deployment-service.yaml という名前のファイルを作成し、次の内容を含めます。
次のコマンドを実行して、デプロイメントとサービスを作成します。
kubectl apply -f test-deployment-service.yamlcoffeeおよびteaデプロイメントの作成の進行状況を確認するには、次のコマンドを実行します。kubectl get deployment coffee tea期待される出力:
NAME READY UP-TO-DATE AVAILABLE AGE coffee 2/2 2 2 14m tea 2/2 2 2 14mcoffee-svcおよびtea-svcサービスを表示するには、次のコマンドを実行します。kubectl get service coffee-svc tea-svc期待される出力:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE coffee-svc ClusterIP 192.168.xxx.xxx <none> 80/TCP 15m tea-svc ClusterIP 192.168.xxx.xxx <none> 80/TCP 15m
Nginx Ingress の作成
次の例では、ルール内のドメイン名 (ホスト) は test-nginx-ingress.com です。これを登録済みのドメイン名に置き換えてください。ルール内のパスマッピング (パス) は、以前に作成したサンプルアプリケーションを使用します。必要に応じて変更してください。
コンソール
1. リソースの作成
|
|
2. エンドポイントの取得 Ingress が作成された後、約 1 分待ってから右上隅のリフレッシュボタンをクリックします。[エンドポイント] フィールドに対応する Elastic IP Address (関連付けられたパブリック向け CLB インスタンスのエンドポイント) が表示された場合、Nginx Ingress は正常に作成されています。 エンドポイント情報が長時間更新されない場合は、Ingress 名をクリックし、[イベント] タブに移動して問題をトラブルシューティングしてください。 |
|
kubectl
test-ingress.yaml という名前のファイルを作成し、次の内容を含めます。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test-nginx-ingress namespace: default spec: ingressClassName: nginx rules: - host: test-nginx-ingress.com # これを登録済みのドメイン名に置き換えます http: paths: - path: /coffee backend: service: name: coffee-svc port: number: 80 pathType: ImplementationSpecific - path: /tea backend: service: name: tea-svc port: number: 80 pathType: ImplementationSpecific - host: www.test-nginx-ingress.com # これを登録済みのドメイン名に置き換えます http: paths: - path: /coffee backend: service: name: coffee-svc port: number: 80 pathType: ImplementationSpecific - path: /tea backend: service: name: tea-svc port: number: 80 pathType: ImplementationSpecific主要なパラメーターの説明:
name: Ingress の名前。この例では、名前はtest-nginx-ingressです。host: サービスにアクセスするためのドメイン名。この例では、ドメイン名はtest-nginx-ingress.comです。これを登録済みのドメイン名に置き換えてください。path: URL のパス。CLB インスタンスは、リクエストが指定された host と path に一致する場合にのみ、受信リクエストを backend に転送します。この例では、パスは/coffeeと/teaです。backend: サービス名とサービスポートで構成されます。サービス名: Ingress がトラフィックを転送する backend サービスの名前。この例では、サービス名は
coffee-svcとtea-svcです。サービスポート: サービスによって公開されるポート。この例では、ポートは
80です。
次のコマンドを実行して Ingress を作成します。
kubectl apply -f test-ingress.yaml次のコマンドを実行して Ingress を表示し、その Elastic IP Address (例:
8.xxx.xxx.117) を取得します。kubectl get ingress期待される出力:
NAME CLASS HOSTS ADDRESS PORTS AGE test-nginx-ingress nginx test-nginx-ingress.com,www.test-nginx-ingress.com 8.xxx.xxx.117 80 2m39s次のコマンドを実行して、Nginx Ingress が機能していることを確認します。取得した Elastic IP Address を使用します。
curl http://8.xxx.xxx.117/coffee -H "Host: test-nginx-ingress.com"期待される出力:
... <title>Hello World</title> ... <p>Server address:10.xxx.xxx.19:80Server name:coffee-96d4bc87-l29dhDate:08/Aug/2025:02:21:02 +0000URI:/coffee
ドメイン名の名前解決の設定
この手順は、Alibaba Cloud に登録されていないドメイン名にのみ適用されます。Alibaba Cloud ドメイン名からドメイン名を購入した場合、それはパブリック権威 DNS と自動的に同期され、直接 DNS レコードを追加できます。
1. ドメイン名の追加
|
|
2. DNS レコードの追加
詳細については、「Web サイトの解決レコードの追加」をご参照ください。 |
|
3. ドメイン名とパスが有効であることを確認する ブラウザで また、DNS 解決をテストする方法を参照して結果を確認することもできます。解決が有効でない場合は、「DNS 解決の失敗を迅速にトラブルシューティングする」をご参照ください。 |
|
HTTPS 暗号化の設定 (TLS 設定)
[前提条件] セクションで説明されているように、まず証明書を購入して申請します。次に、これらの手順に従って証明書をダウンロードし、TLS 設定を追加します。これにより、暗号化された HTTPS 接続を介してドメイン名にアクセスできるようになります。
コンソール
1. 証明書のダウンロード
詳細については、「SSL 証明書のダウンロード」をご参照ください。 |
|
2. シークレットの作成
|
|
3. TLS 設定の追加
|
|
4. HTTPS アクセスの確認 ブラウザで |
|
kubectl
デジタル証明書管理サービスコンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
公式証明書 タブで、ダウンロードしたい証明書を選択し、証明書リストの左下隅にある [ダウンロード] をクリックします。
表示されるダイアログボックスで、サーバータイプとして [Nginx] を選択し、証明書パッケージをダウンロードして解凍します。
次のコマンドを実行して、ダウンロードした証明書ファイル (.pem) と秘密鍵ファイル (.key) を使用してシークレットを作成します。
kubectl create secret tls nginx-ingress-tls --cert test-nginx-ingress.com.pem --key test-nginx-ingress.com.key -n default次のコマンドを実行して、
test-nginx-ingressIngress に TLS 設定を追加します。コマンド内のtest-nginx-ingress.comを登録済みのドメイン名に置き換えてください。kubectl patch ingress test-nginx-ingress -p '{"spec":{"tls":[{"hosts":["test-nginx-ingress.com"],"secretName":"nginx-ingress-tls"}]}}'次のコマンドを実行して、暗号化された HTTPS 接続を介してドメイン名とサービスパスにアクセスできることを確認します。Elastic IP Address を使用します。
curl -v -k https://8.xxx.xxx.117/coffee -H "Host: test-nginx-ingress.com"パラメーターの説明:
-v: TLS ハンドシェイク情報を含む詳細な通信プロセスを表示します。-k(または --insecure): 自己署名証明書を使用する場合、このパラメーターを使用して証明書の検証を無視できます。
期待される出力:
... * Trying 8.xxx.xxx.117:443... * Connected to 8.xxx.xxx.117 (8.xxx.xxx.117) port 443 * ALPN: curl offers h2,http/1.1 * (304) (OUT), TLS handshake, Client hello (1): * (304) (IN), TLS handshake, Server hello (2): * (304) (IN), TLS handshake, Unknown (8): * (304) (IN), TLS handshake, Certificate (11): * (304) (IN), TLS handshake, CERT verify (15): * (304) (IN), TLS handshake, Finished (20): * (304) (OUT), TLS handshake, Finished (20): ... <title>Hello World</title> ... <p>Server address:10.xxx.xxx.159:80Server name:coffee-96d4bc87-6cstvDate:14/Aug/2025:09:27:42 +0000URI:/coffee
その他の設定
段階的リリース
サービスを更新する際には、ローリングアップグレード、段階的リリース、ブルーグリーンリリースなどのリリース方法を使用できます。詳細については、「Nginx Ingress を使用して段階的リリースとブルーグリーンリリースを実装する」をご参照ください。
バックエンドサービスプロトコル
nginx.ingress.kubernetes.io/backend-protocol アノテーションを追加することで、バックエンドサービスのプロトコルを指定できます。サポートされているプロトコルは HTTP、HTTPS、gRPC、および gRPCS です。設定例については、「Nginx Ingress Controller のバックエンドに gRPC サービスをデプロイする」をご参照ください。
パスの再書き込み
NGINX Ingress controller を使用する場合、NGINX は完全なパスをバックエンドに転送します。たとえば、Ingress パス /service1/api へのリクエストは、バックエンド Pod の /service1/api/ に転送されます。バックエンドサービスのパスが /api の場合、パスの不一致が発生し、404 エラーが返されます。この場合、nginx.ingress.kubernetes.io/rewrite-target アノテーションを使用して、パスを正しいディレクトリに書き換えることができます。
詳細については、「URL リダイレクトのためのルーティングサービスの設定」をご参照ください。
アノテーションの追加
Nginx Ingress は、アノテーションを追加してより多くの機能を有効にすることをサポートしています。詳細については、「Nginx Ingress 設定ディクショナリ」および「高度な Nginx Ingress 設定」をご参照ください。
可観測性
クラスターを作成する際に Simple Log Service (SLS) を有効にします。その後、SLS コンソールで Nginx Ingress アクセスログの分析レポートを表示し、Nginx Ingress のリアルタイムステータスをモニターできます。詳細については、「Nginx Ingress アクセスログの分析と監視」をご参照ください。
高ペイロードシナリオ
高ペイロードシナリオで Nginx Ingress Controller のパフォーマンスと安定性を向上させる方法については、「高ペイロードシナリオ向けの Nginx Ingress Controller の設定」および「Nginx Ingress Controller の使用に関する提案」をご参照ください。
よくある質問
クラスター内から Server Load Balancer インスタンスの外部エンドポイントにアクセスできないのはなぜですか?
大きなクライアントヘッダーまたは Cookie を持つリクエストを許可するにはどうすればよいですか?
Nginx Ingress のクロスドメインアクセスを設定するにはどうすればよいですか?
クライアント IP アドレスのパススルーを設定するにはどうすればよいですか?
関連ドキュメント
Nginx Ingress Controller コンポーネントのバージョンとリリースノートについては、「Nginx Ingress Controller コンポーネント」をご参照ください。
一般的な問題とトラブルシューティング方法の詳細については、「Nginx Ingress のよくある質問」および「Nginx Ingress の問題のトラブルシューティング」をご参照ください。













