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

Container Service for Kubernetes:NGINX Ingressの使用方法

最終更新日:Nov 10, 2024

NGINX Ingressは、Container Service for Kubernetes (ACK) クラスターのネットワークトラフィック管理ソリューションであり、Ingress APIオブジェクトを介して外部トラフィックをKubernetesクラスター内のサービスにルーティングします。 NGINX Ingressコントローラーはクラスター内にデプロイされ、高いパフォーマンスとカスタマイズを提供します。 ACK Edgeクラスターが提供するNGINX Ingressコントローラーは、オープンソースバージョンとAlibaba Cloudサービスの機能を統合し、シンプルなユーザーエクスペリエンスを提供します。 このトピックでは、ACK EdgeクラスターでNGINX Ingressを使用する方法について説明します。

手順

  1. クラウドノードプールとエッジノードプールの両方にNGINX Ingressコントローラーをデプロイします。 詳細については、「NGINX Ingressコントローラーのインストール」をご参照ください。 デプロイ後にNGINX Ingressコントローラーのステータスとサービスの公開を確認できます。

    1. 次のコマンドを実行して、クラウドノードプール内のNGINX Ingressコントローラポッドのステータスを表示します。

      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. 次のコマンドを実行して、クラウドノードプール内のNGINX Ingress controller 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
    3. 次のコマンドを実行して、エッジノードプール内のNGINX Ingressコントローラポッドのステータスを表示します。

      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. 次のコマンドを実行して、エッジノードプールのNGINX Ingressコントローラーサービスのステータスを表示します。

      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
  2. 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
  3. 次のコマンドを実行して、テストアプリケーションキューブとサービスを作成します。

    kubectl apply -f cube.yaml

    次のコマンドを実行して、アプリケーションポッドがクラウドノードプールとエッジノードプールの両方にデプロイされているかどうかを確認します。

    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    
  4. ingress.yamlという名前のファイルを作成し、次の内容をファイルにコピーして、クラウドIngressコントローラーとエッジIngressコントローラーの両方にingressを作成します。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: cube-ingress-cloud
      namespace: default
    spec:
      ingressClassName: ack-nginx-cloud               # Create an Ingress for the cloud Ingress controller.
      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                 # Create an Ingress for the edge Ingress controller.
      rules:
      - host: example.cube.com
        http:
          paths:
          - path: /
            backend:
              service:
                name: cube-svc
                port:
                  number: 80
            pathType: ImplementationSpecific

    次のコマンドを実行して、Ingressリソースを作成します。

    kubectl apply -f ingress.yaml
  5. 次のコマンドを実行して、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
    • クラウドノードプールのIngressコントローラーは、LoadBalancerサービスを使用してインターネットに対応するサービスを提供します。 ロードバランサーのIPアドレスは、Ingressのaddressフィールドに自動的に入力されます。 このIPアドレスを使用してサービスにアクセスできます。

    • エッジノードプールのIngressコントローラーは、NodePortサービスを使用してインターネットに対応するサービスを提供します。 ClusterIPタイプのサービスのIPアドレスは、Ingressのアドレスフィールドに入力されます。 ノードのIPアドレスとノードポートを使用して、サービスにアクセスできます。

関連ドキュメント

ACKエッジクラスターは、ACK Proクラスターに基づいてエッジノードプールの機能を拡張し、エッジノードとデータセンターを接続します。 したがって、ACK EdgeクラスターのNGINX Ingressは次の機能をサポートしています。

API 操作

参照

ACKエッジの違い

NGINX Ingressを作成するには?

NGINX Ingressの作成

実際のシナリオに基づいてトラフィックトポロジを設定します。

NGINX Ingressコントローラーのデプロイ方法は?

NGINX Ingressコントローラーのインストール

アプリケーションマーケットプレイスを介したデプロイのみをサポートします。

NGINX Ingressコントローラーを更新する方法は?

ackコンソールのMarketplaceページからACK-ingress-nginxをack-ingress-nginx-v1に更新

アプリケーションマーケットプレイスを介したアップグレードのみをサポートします。

高負荷アプリケーション用にNGINX Ingressコントローラーをデプロイする方法は?

高負荷シナリオ用のNGINX Ingressコントローラーのインストール

なし。

インターネット接続と内部接続のCLBインスタンスを使用するようにIngressコントローラーを設定する方法は?

インターネット接続または内部接続NGINX Ingressコントローラーの設定

クラウドノードプールにデプロイされたIngress Controllerのみをサポートします。

NGINX Ingressを介してカナリアリリースと青緑色のデプロイを実装する方法は?

NGINX Ingressコントローラーを使用したカナリアリリースとブルーグリーン展開の実装

なし。

Ingressコントローラーを介してネットワークトラフィックをミラーリングする方法は?

Ingressコントローラーを使用したネットワークトラフィックのミラーリング

なし。

NGINX Ingressコントローラーでトレース分析を使用する方法は?

NGINX Ingressコントローラーのトレースの有効化

なし。

NGINX Ingressアクセスログをデプロイして表示する方法は?

nginx-ingress-controllerのアクセスログの分析と監視

コマンドラインの有効化のみをサポートします。

Ingressコントローラーを介してgRPCサービスにアクセスする方法は?

NGINX IngressコントローラーのバックエンドにgRPCサービスをデプロイする

なし。