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

Container Service for Kubernetes:NGINX Ingress の作成と使用

最終更新日:Jun 21, 2026

NGINX Ingress Controller は、Container Service for Kubernetes (ACK) のマネージドクラスターのイングレスゲートウェイとして機能し、柔軟なルーティングルールによって外部トラフィックを内部サービスにルーティングします。HTTPS 暗号化、カナリアリリース、アノテーションによるカスタム構成などの機能をサポートし、セキュアで高可用性かつスケーラブルなレイヤー 7 (L7) ネットワークアクセスを提供します。

重要

注意事項

  • NGINX Ingress Controller が使用するデフォルトの Service は削除しないでください。アドオンがインストールされると、kube-system 名前空間に nginx-ingress-lb という名前のデフォルトの Service が作成されます。この Service を削除すると、アドオンが不安定になり、クラッシュする可能性があります。

  • アドオンのカスタムパラメーターを設定するには、アドオン または OpenAPI を使用してください。他の方法で設定を変更すると、アドオンが誤動作し、将来のアップグレードに支障をきたす可能性があります。

  • カスタム設定には、NGINX Ingress ConfigMap を使用してください。スニペットや Lua コードなどの追加設定が原因で発生した問題は、テクニカルサポートの対象外です。

  • アップストリームコミュニティバージョンのバグやセキュリティ脆弱性による業務の中断を防ぐために、NGINX Ingress Controller アドオン を速やかにアップグレードしてください。

NGINX Ingress Controller アドオンのインストール

クラスター作成時

1. アドオンの選択

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

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

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

  • 新しく作成する:クラスターの VPC に、マルチゾーンのパブリックまたはプライベート CLB インスタンスが自動的に作成されます。このインスタンスは スペック保証型 の課金方法を使用し、指定されたインスタンスタイプ になります。

  • 既存を使用:クラスターと同じリージョンにある既存のパブリック CLB インスタンス、または同じ VPC にあるプライベート CLB インスタンスを選択します。CLB インスタンスが別のクラスターに関連付けられていないことを確認してください。

アドオンページからのインストール

アドオンページからアドオンをインストールすると、スペック保証型 の課金方法を使用し、Small I (slb.s1.small) のインスタンスタイプを持つパブリック向け CLB インスタンスが自動的に作成されます。このインスタンスは、NGINX Ingress のトラフィックエントリーポイントとして機能します。

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

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

  4. 確定」ダイアログボックスでパラメーターを設定し、OK をクリックします。

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

このサンプルアプリケーションは、coffeetea という 2 つのステートレスワークロードである Deployment、およびそれらに対応する coffee-svctea-svc という Service をデプロイします。

コンソール

1. リソースの作成

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ワークロード] > [デプロイ] を選択します。

  3. 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. 結果の表示

YAML リソース作成結果 ダイアログボックスで、リソースの アクション 列にある ビュー をクリックすると、リソースが作成されたことを確認できます。

kubectl

  1. クラスターの KubeConfig を取得し、kubectl を使用してクラスターに接続します

  2. 次の内容で 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
  3. 設定を適用して Deployment と Service を作成します。

    kubectl apply -f test-deployment-service.yaml
  4. coffeetea の Deployment のステータスを確認します。

    kubectl get deployment coffee tea

    出力は次のようになります。

    NAME     READY   UP-TO-DATE   AVAILABLE   AGE
    coffee   2/2     2            2           14m
    tea      2/2     2            2           14m
  5. coffee-svctea-svc の Service のステータスを確認します。

    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 を使用しています。これをお客様自身の登録済みドメイン名に置き換えてください。パスマッピング (paths) は、サンプルアプリケーションの作成の例のものです。これらのパスをアプリケーションの設定に合わせて変更してください。

コンソール

1. Ingress の作成

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

  2. クラスターリスト ページで、対象のクラスター名をクリックします。左側メニューで、ネットワーク > Ingress を選択します。 default 名前空間を選択し、Ingress の作成 をクリックして、Ingress を次のように設定します。

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

    • [名前]:test-nginx-ingress

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

    • [マッピング]:

      • [パス]:/coffee

      • [ルール]:Default (ImplementationSpecific)

      • [サービス]:coffee-svc

      • [ポート]:80

  3. 追加 をクリックして、tea-svc Service のパスを設定します。

    • [マッピング]:

      • [パス]:/tea

      • [ルール]:Default (ImplementationSpecific)

      • [サービス]:tea-svc

      • [ポート]:80

  4. ルールの追加 をクリックして、www.test-nginx-ingress.com のドメイン名 (登録済みのドメイン名に置き換えます) を追加し、そのパスマッピングを設定します。完了したら、OK をクリックします。

2. Endpoint の取得

約 1 分後にページを更新します。エンドポイント 列に Elastic IP (EIP) が表示されれば、Nginx Ingress は正常に作成されています。この EIP は、関連付けられている Cloud Load Balancer (CLB) インスタンスのパブリックサービスアドレスです。

数分経っても Endpoint 情報が表示されない場合は、Ingress 名をクリックし、イベント タブを確認して、トラブルシューティングを行ってください。

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:Service にアクセスするために使用するドメイン名です。この例では、ドメイン名は test-nginx-ingress.com です。これを登録済みのドメイン名に置き換えてください。

    • path:ルールの URL パスです。リクエストが backend にルーティングされるには、指定された hostpath に一致する必要があります。この例では、パスは /coffee/tea です。

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

      • Service 名:Ingress がトラフィックを転送する backend Service の名前です。例:coffee-svctea-svc

      • Service ポート:バックエンド Service のターゲットポートです。この例では、ポートは 80 です。

  2. Ingress を作成します。

    kubectl apply -f test-ingress.yaml
  3. Ingress を表示し、8.xxx.xxx.117 などの Elastic IP (EIP) を取得します。

    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. この EIP を使用して、Nginx Ingress が正しく動作していることを確認します。

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

    想定される出力:

    ...
    <title>Hello World</title>
    ...
    <p><span>Server&nbsp;address:</span> <span>10.xxx.xxx.19:80</span></p>
    <p><span>Server&nbsp;name:</span> <span>coffee-96d4bc87-l29dh</span></p>
    <p class="smaller"><span>Date:</span> <span>08/Aug/2025:02:21:02 +0000</span></p>
    <p class="smaller"><span>URI:</span> <span>/coffee</span></p>
    ...
        <div id="footer">
            <div id="center" align="center">
                Request ID: 42e2d73c85b16b55b6ab52deb7d995d4<br/>
                &copy; NGINX, Inc. 2018
            </div>
        </div>
    ...

DNS 名前解決の設定

ドメイン名を登録。ドメイン名を追加する必要があるのは、サードパーティのプロバイダーで登録されている場合のみです。Alibaba Cloud は、自社プラットフォームで購入したドメイン名を Alibaba Cloud DNS のパブリック権威ゾーンに自動的に追加するため、直接 DNS レコードを追加できます。

1. ドメイン名の追加

  1. Alibaba Cloud DNS – Public Authoritative DNS にアクセスします。

    インターネット権威]タブで、[ドメイン名の追加]をクリックします。

  2. サードパーティドメイン名を入力します。次に、作成した インターネットの権威ある DNS 解決 インスタンスを選択します。パラメーターの詳細については、「ドメインの購入とバインド」をご参照ください。

2. DNS レコードの追加

  1. 対象のドメイン名を見つけ、Actions 列の 解決設定 をクリックします。次に、Add Record をクリックします。レコードタイプを A、ホストレコードを @ に設定した DNS レコードを追加します。レコード値 は、NGINX Ingress のアクセスアドレスです。

  2. 同じ手順で、ホストレコードを www に設定した別の DNS レコードを追加します。

  3. 新しい DNS レコードの横にある 有効の検出 をクリックして、名前解決のステータスを確認します。

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

3. ドメイン名とパスの検証

ブラウザーで http://test-nginx-ingress.com/coffee にアクセスし、test-nginx-ingress.com を実際のドメイン名に置き換えて、サービスパスにアクセスできることを確認します。

リクエストが成功すると、ページは NGINX バックエンド Pod からの情報 (server addressserver nameDateURI フィールドなど) を返します。

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

HTTPS セキュリティの設定

商用証明書を購入し、証明書を申請します。証明書が [発行済み] であることを確認します。次に、これらの手順に従って証明書をダウンロードし、TLS 設定を追加します。これにより、ドメインへの暗号化された HTTPS アクセスが可能になります。

コンソール

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

  1. Certificate Management Service コンソールにログインします。左側メニューで、 証明書管理 > SSL 証明書管理 を選択します。

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

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

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

2. Secret の作成

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[設定] > [秘密] を選択します。

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

    • [名前]: nginx-ingress-tls

    • [タイプ]: [TLS 証明書]

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

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

3. TLS 設定の追加

  1. 左側メニューで、 ネットワーク > Ingress を選択します。対象の Ingress の アクション 列で、 更新 をクリックします。

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

    • [TLS 設定]: 有効

    • [ドメイン名]: test-nginx-ingress.com (実際の登録済みドメイン名に置き換えてください)

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

4. HTTPS アクセスの検証

Web ブラウザーで https://test-nginx-ingress.com/coffee (実際の登録済みドメイン名に置き換えてください) にアクセスし、サービスパスへの暗号化された HTTPS アクセスを検証します。

Kubectl

  1. Certificate Management Service コンソールにログインします。左側メニューで、 証明書管理 > SSL 証明書管理 を選択します。

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

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

  4. ダウンロードした証明書ファイル (.pem) と秘密鍵ファイル (.key) を使用して Secret を作成します。

    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. 実際の Elastic IP Address を使用して次のコマンドを実行し、サービスパスへの暗号化された HTTPS アクセスを検証します。

    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><span>Server&nbsp;address:</span> <span>10.xxx.xxx.159:80</span></p>
      <p><span>Server&nbsp;name:</span> <span>coffee-96d4bc87-6cstv</span></p>
      <p class="smaller"><span>Date:</span> <span>14/Aug/2025:09:27:42 +0000</span></p>
      <p class="smaller"><span>URI:</span> <span>/coffee</span></p>
      ...
          <div id="footer">
              <div id="center" align="center">
                  Request ID: fee5fe107106748a35d99a2dbbbc6652<br/>
                  &copy; NGINX, Inc. 2018
              </div>
          </div>
      ...

その他の設定

カナリアリリース

サービスをアップグレードするには、ローリングアップデート、段階的リリース、ブルー/グリーンデプロイメント、カナリアリリースなど、さまざまなデプロイ戦略を使用できます。詳細な手順については、「NGINX Ingress を使用した段階的リリースとブルー/グリーンデプロイメントの実装」をご参照ください。

バックエンドサービスのプロトコル

バックエンドサービスのプロトコルを指定するには、nginx.ingress.kubernetes.io/backend-protocol アノテーションを追加します。サポートされているプロトコルは、HTTP、HTTPS、gRPC、gRPCS です。設定例については、「NGINX Ingress の gRPC サービスの設定」をご参照ください。

URL リライト

NGINX Ingress コントローラーを使用する場合、NGINX は完全なリクエストパスに基づいてリクエストを転送します。 たとえば、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) を有効にすると、包括的な NGINX Ingress のアクセスログ分析レポートとリアルタイムモニタリングダッシュボードにアクセスできます。詳細については、「NGINX Ingress アクセスログの分析とモニタリング」をご参照ください。

高負荷シナリオ

高負荷シナリオで NGINX Ingress Controller のパフォーマンスと安定性を向上させるには、「高ペイロードシナリオ向けの NGINX Ingress Controller の設定」および「NGINX Ingress Controller の使用に関する推奨事項」をご参照ください。

よくある質問

クラスター内から外部 IP にアクセスできない

症状

クラスター内の一部の Pod は、NGINX Ingress Controller の外部アドレス (ロードバランサーインスタンスの IP アドレス) を使用してバックエンド Pod にアクセスできませんが、他の Pod はアクセスできます。

原因

この問題は、コントローラーの Service の externalTrafficPolicy 設定が原因です。この設定は、外部トラフィックの処理方法を決定します。local に設定されている場合、コントローラー Pod と同じノード上のバックエンド Pod のみがリクエストを受信できます。Cluster に設定されている場合、アクセスは正常に機能します。クラスター内のリソースがロードバランサーの外部 IP アドレスを使用して Service にアクセスする場合、リクエストも外部トラフィックとして扱われます。

解決策

  • (推奨) Kubernetes クラスター内から、NGINX Ingress の ClusterIP またはサービス名を使用してアクセスしてください。NGINX Ingress のサービス名は nginx-ingress-lb.kube-system です。

  • kubectl edit svc nginx-ingress-lb -n kube-system を実行して、NGINX Ingress Service を変更します。LoadBalancer Service の externalTrafficPolicyCluster に変更します。クラスターの CNI プラグインが Flannel の場合、クライアントソース IP は失われます。Terway を使用している場合、クライアントソース IP は保持されます。

    例:

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        service.beta.kubernetes.io/backend-type: eni   # トラフィックを Elastic Network Interface (ENI) に直接渡します。
      labels:
        app: nginx-ingress-lb
      name: nginx-ingress-lb
      namespace: kube-system
    spec:
      externalTrafficPolicy: Cluster

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

大きなヘッダーまたはクッキー

クライアントリクエストに大きなリクエストヘッダーまたはクッキーが含まれている場合、NGINX Ingress は "400 Request Header Or Cookie Too Large /Bad request" などのエラーを返すことがあります。これを解決するには、次の設定を変更してバッファーサイズを増やしてください。

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

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

kubectl edit cm -n kube-system nginx-configuration を実行して ConfigMap を編集し、これらの設定を変更します。例:

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 | less を実行して nginx.conf ファイルを表示し、ConfigMap の変更が同期されていることを確認します。

CORS 設定

Ingress リソースの metadata.annotations セクションに特定のアノテーションを追加することで、オリジン間リソース共有 (CORS) を有効にできます。詳細については、「NGINX Ingress の CORS 設定」をご参照ください。

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 アドレスを取得できない可能性があります。

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

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"  

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

関連ドキュメント