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

Container Service for Kubernetes:Nginx Ingress Controller のネットワークタイプの設定

最終更新日:May 01, 2026

Nginx Ingress Controller は、パブリックネットワークとプライベートネットワークの両方へのアクセス、パブリックネットワークのみへのアクセス、プライベートネットワークのみへのアクセスという 3 種類のアクセスモードをサポートしています。これにより、異なるネットワーク環境におけるクライアントのアクセス要件を満たすことができます。

仕組み

クラスター内で、SLB インスタンスがクライアントからのリクエストを受け取り、Nginx Ingress Controller ワークロードに転送します。その後、ワークロードが他のサービスにリクエストを転送します。

パブリックネットワークおよびプライベートネットワークの両方へのアクセスを有効にする Nginx Ingress の設定

Nginx Ingress Controller のバックエンド Pod に対して 2 つのサービスをデプロイします。1 つはパブリック SLB インスタンスに関連付け、もう 1 つはプライベート SLB インスタンスに関連付けます。これにより、パブリックネットワークおよびプライベートネットワークの両方へのアクセスが可能になります。

  1. 現在の SLB のネットワークタイプを確認します。

    kubectl describe service -n kube-system nginx-ingress-lb | grep "service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type"

    出力に intranet が含まれている場合、現在のタイプはプライベートです。それ以外の場合はパブリックです。

  2. パブリックおよびプライベートの両方のネットワークタイプが存在することを保証するため、新しいサービスを作成します。

    nginx-ingress-lb-new.yaml という名前のファイルを作成して保存し、kubectl apply -f nginx-ingress-lb-new.yaml を実行してサービスを作成します。

    プライベートネットワークのサービスを追加

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-ingress-lb-intranet
      namespace: kube-system
      labels:
        app: nginx-ingress-lb
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: intranet # SLB インスタンスがプライベートネットワークアドレスを使用することを指定します。
    spec:
      type: LoadBalancer
      externalTrafficPolicy: "Cluster"
      ports:
      - port: 80
        name: http
        targetPort: 80
      - port: 443
        name: https
        targetPort: 443
      selector:
        app: ingress-nginx

    パブリックネットワークのサービスを追加

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-ingress-lb-internet
      namespace: kube-system
      labels:
        app: nginx-ingress-lb
    spec:
      type: LoadBalancer
      externalTrafficPolicy: "Cluster"
      ports:
      - port: 80
        name: http
        targetPort: 80
      - port: 443
        name: https
        targetPort: 443
      selector:
        app: ingress-nginx
  3. 次のコマンド内の <service-name> を新しく作成したサービスの名前に置き換え、コマンドを実行します。戻り値が 200 の場合、新しいサービスが正しく動作しています。

    curl -s -o /dev/null -w "%{http_code}\n" http://$(kubectl get service -n kube-system <service-name> -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
  4. <service-name> を新しく作成したサービスの名前に置き換え、kubectl get service <service-name> を実行します。サービスの External IP を記録し、サービスのタイプに基づいて DNS を設定します。

    新しいプライベートネットワークのサービス

    1. Alibaba Cloud DNS – Private DNS にログインします。イントラネット権威 > User Defined Zones タブで、Add Zone をクリックします。すでにドメインを追加済みの場合は、手順 c に進んでください。

    2. イントラネット権威ドメイン名 (Zone) にドメイン名を入力します。その他のオプションはデフォルトのままにして、OK をクリックします。

    3. 対象のドメインをクリックします。Settings タブで、Add Record をクリックします。以下の表の値を使用してフォームに入力します。その他の設定はデフォルトのままにして、OK をクリックします。

      設定項目

      Record Type

      A

      Hostname

      必要に応じてサブドメインプレフィックスを入力します。

      Record Value

      新しいサービスの IP アドレス。

    4. User Defined Zones リストに戻ります。対象ドメインの操作列で、Effective Scope を選択します。Alibaba Cloud VPC イントラネットで有効 の下で、ACK クラスターが配置されている VPC を選択し、OK をクリックします。

    新しいパブリックネットワークのサービス

    1. Alibaba Cloud DNS – Public Authoritative DNS にログインします。対象のドメインをクリックして 解決設定 ページを開き、Add Record ボタンをクリックします。

    2. 以下の表の値を使用してフォームに入力します。その他の設定はデフォルトのままにして、OK をクリックします。

      設定項目

      レコードタイプ

      A.

      ホストレコード

      必要に応じてサブドメインプレフィックスを入力します。

      レコード値

      新しいサービスの IP アドレス。

ネットワークタイプの変更

重要

この操作では、SLB インスタンスを置き換えるためにサービスを削除して再作成します。これにより、Nginx Ingress が一時的に中断されます。削除された SLB インスタンスおよびその IP アドレスは復旧できません。

  1. 既存の SLB インスタンスにトラフィックがないことを確認します。

    1. Container Service 管理コンソール にログインします。対象のクラスターをクリックし、左側のナビゲーションウィンドウで ネットワーク > サービス に移動します。kube-system 名前空間で nginx-ingress-lb を探します。外部 IP アドレス (External IP) を記録します。

    2. Classic Load Balancer コンソール にログインします。クラスターと同じリージョンを選択します。前の手順で記録した IP アドレスと一致する IP を持つ CLB インスタンスを探します。インスタンスをクリックし、モニタ タブで接続数が 0 であることを確認してから、次の手順に進んでください。

  2. Nginx Ingress Controller で使用中の現在のサービスを削除します。

    kubectl delete svc -n kube-system nginx-ingress-lb
  3. nginx-ingress-lb.yaml という名前のファイルを作成して保存し、kubectl apply -f nginx-ingress-lb.yaml を実行してサービスを作成します。

    重要

    新しいサービス名は nginx-ingress-lb である必要があります。

    プライベートネットワークのサービス

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-ingress-lb
      namespace: kube-system
      labels:
        app: nginx-ingress-lb
      annotations:
        service.beta.kubernetes.io/alibaba-cloud-loadbalancer-address-type: intranet # SLB インスタンスがプライベートネットワークアドレスを使用することを指定します。
    spec:
      type: LoadBalancer
      externalTrafficPolicy: "Cluster"
      ports:
      - port: 80
        name: http
        targetPort: 80
      - port: 443
        name: https
        targetPort: 443
      selector:
        app: ingress-nginx

    パブリックネットワークのサービス

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-ingress-lb
      namespace: kube-system
      labels:
        app: nginx-ingress-lb
    spec:
      type: LoadBalancer
      externalTrafficPolicy: "Cluster"
      ports:
      - port: 80
        name: http
        targetPort: 80
      - port: 443
        name: https
        targetPort: 443
      selector:
        app: ingress-nginx
  4. 新しいサービスをテストします。戻り値が 200 の場合、サービスが正しく動作しています。

    curl -s -o /dev/null -w "%{http_code}\n" http://$(kubectl get service -n kube-system nginx-ingress-lb -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
  5. kubectl get service nginx-ingress-lb を実行します。サービスの External IP を記録し、サービスのタイプに基づいて DNS を設定します。

    新しいプライベートネットワークのサービス

    1. Alibaba Cloud DNS – Private DNS にログインします。イントラネット権威 > User Defined Zones タブで、Add Zone をクリックします。すでにドメインを追加済みの場合は、手順 c に進んでください。

    2. イントラネット権威ドメイン名 (Zone) にドメイン名を入力します。その他のオプションはデフォルトのままにして、OK をクリックします。

    3. 対象のドメインをクリックします。Settings タブで、Add Record をクリックします。以下の表の値を使用してフォームに入力します。その他の設定はデフォルトのままにして、OK をクリックします。

      設定項目

      Record Type

      A

      Hostname

      必要に応じてサブドメインプレフィックスを入力します。

      Record Value

      新しいサービスの IP アドレス。

    4. User Defined Zones リストに戻ります。対象ドメインの操作列で、Effective Scope を選択します。Alibaba Cloud VPC イントラネットで有効 の下で、ACK クラスターが配置されている VPC を選択し、OK をクリックします。

    新しいパブリックネットワークのサービス

    1. Alibaba Cloud DNS – Public Authoritative DNS にログインします。対象のドメインをクリックして 解決設定 ページを開き、Add Record ボタンをクリックします。

    2. 以下の表の値を使用してフォームに入力します。その他の設定はデフォルトのままにして、OK をクリックします。

      設定項目

      レコードタイプ

      A.

      ホストレコード

      必要に応じてサブドメインプレフィックスを入力します。

      レコード値

      新しいサービスの IP アドレス。

よくある質問

古いサービスを削除する前に新しいサービスを作成できないのはなぜですか?

Nginx Ingress Controller のネットワークタイプを変更する際、新しいサービスを先に作成してから古いサービスを削除する方法では切り替えられません。古いサービスを削除した後に新しいサービスを作成する必要があります。コンポーネントのアップグレード中に、Nginx Ingress Controller ワークロードはデフォルトの名前 (nginx-ingress-lb) でサービスとマッチングします。サービスは同じ名前を共有できないため、古いサービスを削除せずに新しいサービスを作成すると、ワークロードが正しい SLB インスタンスとマッチングできず、アップグレードが失敗します。

クライアントが使用する IP アドレスがコンソールに表示されるエンドポイントと異なるのはなぜですか?

コンソールの Ingress ページに表示される エンドポイント は、nginx-ingress-lb という名前のサービスに関連付けられた SLB インスタンスの IP アドレスです。LoadBalancer タイプのサービスを複数構成している場合でも、Nginx Ingress はすべてのリクエストを正しく転送します。ただし、コンソールにはデフォルトのサービスに紐づく SLB インスタンスの IP アドレスのみが表示されます。クライアントが実際にアクセスする IP アドレスは、使用する SLB インスタンスによって異なります(これは DNS 名前解決テストで確認できます)。そのため、コンソールに表示される エンドポイント と異なる場合があります。

nginx-ingress-lb を削除して同じ名前のサービスを再作成した場合は、表示されるエンドポイントを更新するために Ingress リソースを更新する必要があります。

誤った変更を行った後のロールバック方法を教えてください。

できるだけ早く、以下の手順を順番に実行してください。

  1. コンポーネントがデフォルトのサービスを作成できなくなるような名前衝突を防ぐため、新しく作成したサービスを削除します。

  2. コンソールで、Nginx Ingress Controller コンポーネントをアンインストールして再インストール します。これにより、クラスター内に新しいデフォルトのサービスが作成され、Nginx Ingress のエントリポイントが復元されます。

  3. DNS を設定 して、新しいデフォルトのサービス (nginx-ingress-lb) のドメイン名名前解決を追加し、転送が正しく機能するかテストします。

関連ドキュメント

既存の SLB インスタンスに対するアノテーションの設定方法の詳細については、「既存の SLB インスタンスの使用」をご参照ください。