すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Nginx Ingress を作成してサービスを公開する

最終更新日:Nov 10, 2025

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) インスタンスに関連付けられます。

    クラスター作成時にインストール

    1. コンポーネントの選択

    1. ACK コンソールにログインし、[クラスターの作成] をクリックします。

    2. [コンポーネント設定] ステップで、[Ingress] セクションを見つけ、[Nginx Ingress] を選択します。

    image

    2. ロードバランサーソースの選択

    • 作成: クラスターの VPC 内に、指定されたインスタンスタイプの 仕様保証型マルチゾーンのパブリック向けまたは内部向け CLB インスタンスを自動的に作成します。

    • 既存の使用: クラスターと同じリージョン内の既存のパブリック向け CLB インスタンス、またはクラスターと同じ VPC 内の内部向け CLB インスタンスを選択します。CLB インスタンスを別のクラスターに関連付けることはできません。

    image

    コンポーネント管理ページからのインストールと設定

    コンポーネント管理ページからコンポーネントをインストールすると、Nginx Ingress のトラフィックイングレスとして機能する、パブリック向けの仕様保証型small I (slb.s1.small) CLB インスタンスが自動的に作成されます。

    1. コンポーネントの選択と設定

    1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    2. クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アドオン] をクリックします。

    3. 検索バーを使用するか、[ネットワーク] タブをクリックしてコンポーネントを見つけます。[Nginx Ingress Controller] カードの右下隅にある [インストール] をクリックします。

    4. [コンポーネント Nginx Ingress Controller のインストール] ダイアログボックスで、パラメーターを設定し、[OK] をクリックしてインストールを完了します。

    image

  • クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続していること。

  • ドメイン名を登録こと。

  • 商用証明書購入して証明書を申請し、使用する証明書が [発行済み] 状態であることを確認していること。

サンプルアプリケーションの作成

サンプルアプリケーションは、coffeetea という名前の 2 つのステートレスワークロード (デプロイメント) と、coffee-svctea-svc という名前の対応するサービスをデプロイします。

コンソール

1. リソースの作成

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、ワークロード > 展開 を選択します。

  3. [YAML から作成] をクリックします。[サンプルテンプレート] ドロップダウンリストから [カスタム] を選択します。次に、次の内容をテンプレートエディターにコピーし、[作成] をクリックします。

image

サンプルアプリケーション YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  name: coffee
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: coffee
  template:
    metadata:
      labels:
        app: coffee
    spec:
      containers:
      - name: coffee
        image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: coffee-svc
  namespace: default
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: coffee
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tea
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tea
  template:
    metadata:
      labels:
        app: tea
    spec:
      containers:
      - name: tea
        image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: tea-svc
  namespace: default
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: tea
  type: ClusterIP

2. 作成結果の表示

[YAML リソース作成結果] ダイアログボックスで、リソースの [アクション] 列にある [表示] をクリックして作成結果を確認します。

image

kubectl

  1. test-deployment-service.yaml という名前のファイルを作成し、次の内容を含めます。

    サンプル YAML ファイル

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coffee
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: coffee
      template:
        metadata:
          labels:
            app: coffee
        spec:
          containers:
          - name: coffee
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: coffee-svc
      namespace: default
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: coffee
      type: ClusterIP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tea
      namespace: default
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: tea
      template:
        metadata:
          labels:
            app: tea
        spec:
          containers:
          - name: tea
            image: registry.cn-hangzhou.aliyuncs.com/acs-sample/nginxdemos:latest
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: tea-svc
      namespace: default
    spec:
      ports:
      - port: 80
        targetPort: 80
        protocol: TCP
      selector:
        app: tea
      type: ClusterIP
  2. 次のコマンドを実行して、デプロイメントとサービスを作成します。

    kubectl apply -f test-deployment-service.yaml
  3. coffee および tea デプロイメントの作成の進行状況を確認するには、次のコマンドを実行します。

    kubectl get deployment coffee tea

    期待される出力:

    NAME     READY   UP-TO-DATE   AVAILABLE   AGE
    coffee   2/2     2            2           14m
    tea      2/2     2            2           14m
  4. coffee-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. リソースの作成

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、[ネットワーク] > [Ingress] を選択します。default 名前空間を選択し、[Ingress の作成] をクリックします。次の例に基づいて Ingress を設定します。

    • ゲートウェイタイプ: Nginx Ingress

    • 名前: test-nginx-ingress

    • ドメイン名: test-nginx-ingress.com (これを登録済みのドメイン名に置き換えます)

    • パスマッピング:

      • パス: /coffee

      • 一致ルール: デフォルト (ImplementationSpecific)

      • サービス名: coffee-svc

      • ポート: 80

  3. [+ パスの追加] をクリックして、tea-svc サービスのルートを設定します。

    • パスマッピング:

      • パス: /tea

      • 一致ルール: デフォルト (ImplementationSpecific)

      • サービス名: tea-svc

      • ポート: 80

  4. 上記の手順に従い、[+ ルールの追加] をクリックして、ドメイン名 www.test-nginx-ingress.com (これを登録済みのドメイン名に置き換えます) とそれに対応するパスマッピングを追加します。次に、[OK] をクリックします。

image

2. エンドポイントの取得

Ingress が作成された後、約 1 分待ってから右上隅のリフレッシュボタンをクリックします。[エンドポイント] フィールドに対応する Elastic IP Address (関連付けられたパブリック向け CLB インスタンスのエンドポイント) が表示された場合、Nginx Ingress は正常に作成されています。

エンドポイント情報が長時間更新されない場合は、Ingress 名をクリックし、[イベント] タブに移動して問題をトラブルシューティングしてください。

image

kubectl

  1. 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 インスタンスは、リクエストが指定された hostpath に一致する場合にのみ、受信リクエストを backend に転送します。この例では、パスは /coffee/tea です。

    • backend: サービス名とサービスポートで構成されます。

      • サービス名: Ingress がトラフィックを転送する backend サービスの名前。この例では、サービス名は coffee-svctea-svc です。

      • サービスポート: サービスによって公開されるポート。この例では、ポートは 80 です。

  2. 次のコマンドを実行して Ingress を作成します。

    kubectl apply -f test-ingress.yaml
  3. 次のコマンドを実行して 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
  4. 次のコマンドを実行して、Nginx Ingress が機能していることを確認します。取得した Elastic IP Address を使用します。

    curl http://8.xxx.xxx.117/coffee -H "Host: test-nginx-ingress.com"

    期待される出力:

    ...
    <title>Hello World</title>
    ...
    <p>Server&nbsp;address:10.xxx.xxx.19:80Server&nbsp;name:coffee-96d4bc87-l29dhDate:08/Aug/2025:02:21:02 +0000URI:/coffee

ドメイン名の名前解決の設定

この手順は、Alibaba Cloud に登録されていないドメイン名にのみ適用されます。Alibaba Cloud ドメイン名からドメイン名を購入した場合、それはパブリック権威 DNS と自動的に同期され、直接 DNS レコードを追加できます。

1. ドメイン名の追加

  1. Alibaba Cloud DNS - パブリック権威ゾーンに移動します。

    [権威ドメイン名] ページで、[ドメイン名の追加] をクリックします。

  2. [ドメイン名の追加] ダイアログボックスで、管理したいドメイン名を入力し、購入したパブリック権威ゾーンインスタンスを選択します。

image

2. DNS レコードの追加

  1. 対象のドメイン名を見つけ、[アクション] 列の [DNS 設定] をクリックします。[レコードの追加] をクリックします。レコードタイプを A に、ホストレコードを @ に設定した DNS レコードを追加します。[レコード値]Nginx Ingress のエンドポイントに設定します。

  2. 上記の手順に従って、ホストレコードを www に設定した別の DNS レコードを追加します。

  3. 作成した DNS レコードの横にある [ステータスの確認] をクリックして、解決結果を表示します。

詳細については、「Web サイトの解決レコードの追加」をご参照ください。

image

3. ドメイン名とパスが有効であることを確認する

ブラウザで http://test-nginx-ingress.com/coffee (これを登録済みのドメイン名に置き換えます) にアクセスし、ドメイン名を通じてビジネスパスにアクセスできることを確認します。

また、DNS 解決をテストする方法を参照して結果を確認することもできます。解決が有効でない場合は、「DNS 解決の失敗を迅速にトラブルシューティングする」をご参照ください。

image

HTTPS 暗号化の設定 (TLS 設定)

[前提条件] セクションで説明されているように、まず証明書を購入して申請します。次に、これらの手順に従って証明書をダウンロードし、TLS 設定を追加します。これにより、暗号化された HTTPS 接続を介してドメイン名にアクセスできるようになります。

コンソール

1. 証明書のダウンロード

  1. デジタル証明書管理サービスコンソールにログインします。 左側のナビゲーションウィンドウで、[証明書管理] > [SSL 証明書] を選択します。

  2. 公式証明書 タブで、ダウンロードしたい証明書を選択し、証明書リストの左下隅にある [ダウンロード] をクリックします。

  3. 表示されるダイアログボックスで、サーバータイプとして [Nginx] を選択し、証明書パッケージをダウンロードして解凍します。

詳細については、「SSL 証明書のダウンロード」をご参照ください。

image

2. シークレットの作成

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスター ページで、変更したいクラスターの名前をクリックします。左側のナビゲーションウィンドウで、[設定] > [シークレット] を選択します。

  3. [シークレット] ページで、default 名前空間を選択し、左上隅の [作成] をクリックします。表示されるパネルで、新しいシークレットを設定します。 設定が完了したら、[OK] をクリックします。

    • 名前: nginx-ingress-tls

    • タイプ: TLS 証明書

    • 証明書: ダウンロードして解凍した証明書ファイル (.pem) の完全な内容。

    • キー: ダウンロードして解凍した秘密鍵ファイル (.key) の完全な内容。

image

3. TLS 設定の追加

  1. 左側のナビゲーションウィンドウで、[ネットワーク] > [Ingress] を選択します。対象の Ingress の [アクション] 列で、[更新] をクリックします。

  2. [Ingress の編集] ページで、次の TLS 設定を追加し、[OK] をクリックします。

    • TLS 設定: 有効

    • ドメイン名: test-nginx-ingress.com (これを登録済みのドメイン名に置き換えます)

    • シークレット: nginx-ingress-tls

image

4. HTTPS アクセスの確認

ブラウザで https://test-nginx-ingress.com/coffee (これを登録済みのドメイン名に置き換えます) にアクセスし、暗号化された HTTPS 接続を介してドメイン名とビジネスパスにアクセスできることを確認します。

image

kubectl

  1. デジタル証明書管理サービスコンソールにログインします。 左側のナビゲーションウィンドウで、[証明書管理] > [SSL 証明書] を選択します。

  2. 公式証明書 タブで、ダウンロードしたい証明書を選択し、証明書リストの左下隅にある [ダウンロード] をクリックします。

  3. 表示されるダイアログボックスで、サーバータイプとして [Nginx] を選択し、証明書パッケージをダウンロードして解凍します。

  4. 次のコマンドを実行して、ダウンロードした証明書ファイル (.pem) と秘密鍵ファイル (.key) を使用してシークレットを作成します。

    kubectl create secret tls nginx-ingress-tls --cert test-nginx-ingress.com.pem --key test-nginx-ingress.com.key -n default
  5. 次のコマンドを実行して、test-nginx-ingress Ingress に TLS 設定を追加します。コマンド内の test-nginx-ingress.com を登録済みのドメイン名に置き換えてください。

    kubectl patch ingress test-nginx-ingress -p '{"spec":{"tls":[{"hosts":["test-nginx-ingress.com"],"secretName":"nginx-ingress-tls"}]}}'
  6. 次のコマンドを実行して、暗号化された 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&nbsp;address:10.xxx.xxx.159:80Server&nbsp;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 インスタンスの外部エンドポイントにアクセスできないのはなぜですか?

現象

クラスター内の一部のノード上の Pod は、Nginx Ingress Controller の外部エンドポイント (SLB インスタンスの IP アドレス) を介してバックエンド Pod にアクセスできませんが、他のノード上の Pod はアクセスできます。

原因

この問題は、Nginx Ingress Controller のサービスの externalTrafficPolicy 設定が原因で発生します。これは、外部トラフィックの処理方法を決定します。これが local に設定されている場合、コントローラーの Pod と同じノード上のバックエンド Pod のみがリクエストを受信できます。これが cluster に設定されている場合、アクセスは正常です。クラスター内から SLB インスタンスの外部エンドポイントへのリクエストも外部トラフィックとして処理されます。

解決策

  • (推奨) Kubernetes クラスター内から ClusterIP またはサービス名を介して Nginx Ingress にアクセスします。Nginx Ingress のサービス名は nginx-ingress-lb.kube-system です。

  • kubectl edit svc nginx-ingress-lb -n kube-system コマンドを実行して Nginx Ingress サービスを変更します。サービス設定の externalTrafficPolicy の値を Cluster に変更します。クラスターのコンテナーネットワークプラグインが Flannel の場合、クライアントの送信元 IP アドレスは失われます。Terway を使用する場合、送信元 IP アドレスは保持されます。

    例:

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/backend-type: eni   # ENI にパススルーします。
      labels:
        app: nginx-ingress-lb
      name: nginx-ingress-lb
      namespace: kube-system
    spec:
      externalTrafficPolicy: Cluster

サービスアノテーションの詳細については、「アノテーションを使用して Classic Load Balancer (CLB) インスタンスを設定する」をご参照ください。

大きなクライアントヘッダーまたは Cookie を持つリクエストを許可するにはどうすればよいですか?

クライアントリクエストに大きなヘッダーまたは Cookie がある場合、Nginx Ingress にアクセスする際に "400 Request Header Or Cookie Too Large /Bad request" のようなエラーメッセージが表示されることがあります。この場合、関連するバッファーサイズの設定を調整する必要があります。次の 2 つの設定パラメーターが利用可能です:

  • client-header-buffer-size: クライアントヘッダーバッファーのサイズ。デフォルト値は 1 KB です。

  • large-client-header-buffers: 大きなクライアントリクエストヘッダーを読み取るためのバッファーの最大数とサイズ。デフォルト値は 4 8 KB です。

kubectl edit cm -n kube-system nginx-configuration コマンドを実行して ConfigMap を編集し、これら 2 つのパラメーターを変更できます。例:

client-header-buffer-size: "16k"
large-client-header-buffers: "4 32k" 

設定が完了したら、設定が Nginx データプレーンに適用されたことを確認します。kubectl exec <nginx-ingress-pod> -n kube-system -- cat /etc/nginx/nginx.conf コマンドを実行して nginx.conf ファイルを表示し、ConfigMap に加えられた変更が反映されていることを確認できます。

Nginx Ingress のクロスドメインアクセスを設定するにはどうすればよいですか?

Ingress リソースの metadata.annotations セクションに特定のアノテーションを追加することで、クロスドメインアクセスを有効にできます。詳細については、「Nginx Ingress のクロスドメインアクセスを設定する」をご参照ください。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/enable-cors: "true"     # CORS を有効にします。
    nginx.ingress.kubernetes.io/cors-allow-origin: "*"  # すべてのドメインからのアクセスを許可します。
    nginx.ingress.kubernetes.io/cors-allow-methods: "GET, PUT, POST, DELETE, PATCH, OPTIONS"  # 許可される HTTP メソッド。
     # 許可されるカスタムリクエストヘッダー。
    nginx.ingress.kubernetes.io/cors-allow-headers: "DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range" 
    nginx.ingress.kubernetes.io/cors-expose-headers: "Content-Length,Content-Range"  # 公開されるレスポンスヘッダー。
    nginx.ingress.kubernetes.io/cors-max-age: "86400"  # プリフライトリクエストのキャッシュ期間。
spec:
  ingressClassName: nginx
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: example-service
            port:
              number: 80

クライアント IP アドレスのパススルーを設定するにはどうすればよいですか?

デフォルトでは、Nginx Ingress は X-Forwarded-For および X-Real-IP ヘッダーでクライアント IP アドレスを転送します。ただし、クライアントがリクエストにこれらのヘッダーを明示的に含めると、サーバーは実際のクライアント IP アドレスを取得できません。

kubectl edit cm -n kube-system nginx-configuration コマンドを実行して ConfigMap に設定を追加し、Ingress のレイヤー 7 クライアント IP アドレスのパススルーを有効にできます。

compute-full-forwarded-for: "true"
forwarded-for-header: "X-Forwarded-For"
use-forwarded-headers: "true"

Nginx Ingress の前に複数のプロキシレイヤーがある場合は、proxy-real-ip-cidr パラメーターに基づいて設定を調整する必要があります。アップストリームプロキシの IP アドレスを CIDR 形式で proxy-real-ip-cidr に追加します。複数の CIDR ブロックはカンマで区切ります。詳細については、「WAF の使用」をご参照ください。

proxy-real-ip-cidr:  "0.0.0.0/0,::/0"  

IPv6 シナリオで、Nginx Ingress が受信した X-Forwarded-For ヘッダーが空で、アップストリームに CLB インスタンスがある場合、CLB インスタンスの Proxy Protocol を有効にしてクライアント IP アドレスを取得できます。Proxy Protocol の詳細については、「CLB インスタンスのレイヤー 4 リスナーを介して実際のクライアント IP アドレスを取得する」をご参照ください。

関連ドキュメント