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

Container Service for Kubernetes:Nginx Ingress の使用

最終更新日:Mar 27, 2026

Container Service for Kubernetes (ACK) Edge クラスターは、クラウドノードプールとエッジノードプールそれぞれに、異なる Service タイプとアクセス方法を持つ独立した NGINX Ingress コントローラーを実行します。このトピックでは、両方のノードプールに NGINX Ingress をデプロイおよび設定する方法、そしてトラフィックが正しくルーティングされることを確認する方法について説明します。

前提条件

作業を開始する前に、以下のものが揃っていることを確認してください:

  • 少なくとも 1 つのクラウドノードプールと 1 つのエッジノードプールを持つ ACK Edge クラスター

  • 両方のノードプールにデプロイされた NGINX Ingress コントローラー (「NGINX Ingress コントローラーのインストール」をご参照ください)

ACK Edge クラスターでは、NGINX Ingress コントローラーはアプリケーションマーケットプレイスからのみデプロイできます。

仕組み

ACK Edge は、クラウドノードプール用とエッジノードプール用に、2 つの独立した NGINX Ingress コントローラーを実行します。トラフィックは、各 Ingress リソースの ingressClassName フィールドに基づいて、正しいコントローラーに到達します。

2 つのコントローラーは、サービスを公開する方法が異なります:

クラウドノードプール エッジノードプール
名前空間 ingress-cloud ingress-edge
Service タイプ LoadBalancer NodePort
外部アクセス ロードバランサーの IP アドレス ノード IP アドレス + NodePort
Ingress クラス ack-nginx-cloud ack-nginx-edge
Ingress の ADDRESS フィールド ロードバランサーの外部 IP (自動入力) NodePort サービスの ClusterIP

NGINX Ingress コントローラーの確認

NGINX Ingress コントローラーをインストールした後、Pod とサービスが両方のノードプールで実行されていることを確認します。

  1. クラウドノードプールの Pod ステータスを確認します:

    kubectl get po -n ingress-cloud -o wide

    期待される出力:

    NAME                                                     READY   STATUS    RESTARTS   AGE     IP           NODE           NOMINATED NODE   READINESS GATES
    ack-ingress-nginx-v1-cloud-controller-7d7b555f8b-5kgqb   1/1     Running   0          20s     10.10.0.1    cloud-node-1   <none>           <none>
    ack-ingress-nginx-v1-cloud-controller-7d7b555f8b-725cl   1/1     Running   0          20s     10.10.0.2    cloud-node-2   <none>           <none>
  2. クラウドノードプールの Service ステータスを確認します:

    kubectl get svc -n ingress-cloud

    期待される出力:

    NAME                                    TYPE           CLUSTER-IP      EXTERNAL-IP       PORT(S)                      AGE
    ack-ingress-nginx-v1-cloud-controller   LoadBalancer   172.12.0.1     xxx.xxx.xxx.xxx   80:30080/TCP,443:30443/TCP    30S

    EXTERNAL-IP フィールドには、ロードバランサーの IP アドレスが表示されます。この IP のポート 80 または 443 に送信されたトラフィックは、クラウド Ingress コントローラーによってルーティングされます。

  3. エッジノードプールの Pod ステータスを確認します:

    kubectl get po -n ingress-edge -o wide

    期待される出力:

    NAME                                                    READY   STATUS    RESTARTS   AGE   IP           NODE          NOMINATED NODE   READINESS GATES
    ack-ingress-nginx-v1-edge-controller-7d57b84c88-4wsm4   1/1     Running   0          17s   10.10.0.1    edge-node-1   <none>           <none>
    ack-ingress-nginx-v1-edge-controller-7d57b84c88-fqvj8   1/1     Running   0          17s   10.10.1.1    edge-node-2   <none>           <none>
  4. エッジノードプールの Service ステータスを確認します:

    kubectl get svc -n ingress-edge

    期待される出力:

    NAME                                   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
    ack-ingress-nginx-v1-edge-controller   NodePort   172.12.0.2      <none>        80:32080/TCP,443:32443/TCP   3m51s

    エッジコントローラーは NodePort を使用します。ノードプールの外部からエッジサービスにアクセスするには、任意のエッジノードの IP と、サービスによって公開されている NodePort (例:HTTP の場合はポート 32080) を使用します。

テストアプリケーションのデプロイ

  1. cube.yaml という名前のファイルを作成し、次の内容を記述します:

    apiVersion: v1
    kind: Service
    metadata:
      name: cube-svc
      annotations:
        openyurt.io/topologyKeys: openyurt.io/nodepool
    spec:
      type: ClusterIP
      selector:
        app: cube
      ports:
        - port: 80
          targetPort: 80
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cube
      labels:
        app: cube
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: cube
      template:
        metadata:
          labels:
            app: cube
        spec:
          containers:
          - name: cube-web
            image: registry.cn-hangzhou.aliyuncs.com/acr-toolkit/ack-cube:1.0
            ports:
            - containerPort: 80
  2. マニフェストを適用して、cube アプリケーションとその Service を作成します:

    kubectl apply -f cube.yaml
  3. Pod が両方のノードプールで実行されていることを確認します:

    kubectl get pod -o wide

    期待される出力:

    NAME                    READY   STATUS    RESTARTS   AGE   IP            NODE
    cube-757558c974-9zfkn   1/1     Running   0          11m   10.10.0.1     cloud-node-1
    cube-757558c974-cw72m   1/1     Running   0          11m   10.10.0.2     cloud-node-2
    cube-757558c974-fbvlf   1/1     Running   0          11m   10.10.1.1     edge-node-1
    cube-757558c974-ngwxt   1/1     Running   0          11m   10.10.1.2     edge-node-2

    続行する前に、Pod がクラウドノードとエッジノードの両方にスケジュールされていることを確認してください。

Ingress リソースの作成

  1. ingress.yaml という名前のファイルを作成し、次の内容を記述します:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cube-ingress-cloud
      namespace: default
    spec:
      ingressClassName: ack-nginx-cloud               # クラウド Ingress コントローラー用の Ingress を作成します。
      rules:
      - host: example.cube.com
        http:
          paths:
          - path: /
            backend:
              service:
                name: cube-svc
                port:
                  number: 80
            pathType: ImplementationSpecific
    
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cube-ingress-edge
      namespace: default
    spec:
      ingressClassName: ack-nginx-edge                 # エッジ Ingress コントローラー用の Ingress を作成します。
      rules:
      - host: example.cube.com
        http:
          paths:
          - path: /
            backend:
              service:
                name: cube-svc
                port:
                  number: 80
            pathType: ImplementationSpecific

    両方の Ingress リソースは同じ cube-svc Service をターゲットにしますが、ingressClassName フィールドによって、どちらのコントローラーがトラフィックを処理するかが決まります。

  2. マニフェストを適用します:

    kubectl apply -f ingress.yaml
  3. 両方の Ingress リソースが作成され、アドレスが割り当てられていることを確認します:

    kubectl get ingress

    期待される出力:

    NAME                 CLASS             HOSTS              ADDRESS           PORTS   AGE
    cube-ingress-cloud   ack-nginx-cloud   example.cube.com   139.224.xxx.xxx   80      24m
    cube-ingress-edge    ack-nginx-edge    example.cube.com   172.20.xxx.xxx    80      24m
    • cube-ingress-cloud:ADDRESS フィールドには、ロードバランサーの外部 IP が表示されます。この IP を使用して、クラウドコントローラー経由でサービスにアクセスします。

    • cube-ingress-edge:ADDRESS フィールドには、NodePort サービスの ClusterIP が表示されますが、これはクラスターの外部から直接アクセスできません。ノードプールの外部からエッジサービスにアクセスするには、任意のエッジノードの IP と NodePort を使用します。

次のステップ

ACK Edge クラスターは、ACK Pro マネージドクラスターの機能を拡張して、エッジノードをデータセンターに接続します。次の表は、追加の NGINX Ingress 操作と、ACK Edge 固有の違いを示しています:

操作 リファレンス ACK Edge での違い
NGINX Ingress の作成 NGINX Ingress の作成 実際のシナリオに基づいてトラフィックのトポロジーを設定
NGINX Ingress コントローラーのインストール NGINX Ingress コントローラーのインストール アプリケーションマーケットプレイスからのデプロイのみをサポート
NGINX Ingress コントローラーの更新 ACK コンソールのマーケットプレイスページから ack-ingress-nginx を ack-ingress-nginx-v1 に更新 アプリケーションマーケットプレイスからのアップグレードのみをサポート
高負荷アプリケーション向けのインストール 高負荷シナリオでの NGINX Ingress コントローラーのインストール なし
インターネット向けおよび内部向け CLB インスタンスの設定 インターネット向けまたは内部向け NGINX Ingress コントローラーの設定 クラウドノードプールにデプロイされた Ingress コントローラーのみをサポート
カナリアリリースとブルーグリーンリリース NGINX Ingress コントローラーを使用したカナリアリリースとブルーグリーンリリースの実装 なし
ネットワークトラフィックのミラーリング Ingress コントローラーを使用したネットワークトラフィックのミラーリング なし
トレース分析 NGINX Ingress コントローラーでのトレース分析の実行 なし
アクセスログの表示 nginx-ingress-controller のアクセスログの分析とモニター コマンドラインでの有効化のみをサポート
gRPC サービスへのアクセス Ingress コントローラーによる gRPC サービスへのアクセス なし

関連ドキュメント