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

Container Service for Kubernetes:クラスターに複数のIngressコントローラーをデプロイする

最終更新日:Dec 10, 2024

このトピックでは、Container Service for Kubernetes (ACK) クラスターに複数の独立したNGINX Ingressコントローラーをデプロイして、異なるインターネット接続サービスを提供する方法について説明します。

前提条件

背景情報

デフォルトのNGINX Ingressコントローラーの設定を変更して、内部対応のServer Load Balancer (SLB) インスタンスを使用できます。 詳細については、「インターネット接続または内部接続NGINX Ingressコントローラーの設定」をご参照ください。 インターネット向けまたは内部向けのSLBインスタンスを使用して、ほとんどのシナリオの要件を満たすことができます。 ただし、特定のシナリオでは、一部のインターネット接続サービスは外部ユーザーがアクセスできる必要がありますが、他のサービスは同じ仮想プライベートクラウド (VPC) 内のKubernetes以外のワークロードからのリクエストのみを許可します。 この場合、2つの独立したNGINX Ingressコントローラーをデプロイし、異なるネットワークタイプのSLBインスタンスにバインドできます。

新しいNGINX Ingressコントローラーのデプロイ

ACKクラスターが作成されると、2つのポッドレプリカを持つNGINX Ingressコントローラーが自動的にデプロイされます。 インターネットに接続するSLBインスタンスも、フロントエンド負荷分散サービスとして作成されます。

次の手順を実行して、別の独立したNGINX Ingressコントローラーをクラスターにデプロイできます。

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

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 クラスターの詳細ページの左側のウィンドウで、[アプリケーション] > [ヘルム] を選択します。

  3. [Helm] ページで、[デプロイ] をクリックします。 [基本情報] ステップで、次の表に基づいてパラメーターを設定します。

    パラメーター

    アプリケーション名

    アプリケーションの名前。 この例では、このパラメータはack-ingress-nginxに設定されています。

    名前空間

    namaspaceの名前。 この例では、このパラメーターはkube-systemに設定されています。

    ソース

    アプリケーションのソース。 デフォルト値: Marketplace

    チャート

    • Use ScenariosパラメーターをAllに設定します。

    • Supported Architectureパラメーターをamd64に設定します。

    • 検索ボックスにack-ingress-nginxと入力します。

      • クラスターがKubernetes 1.20以前を実行している場合は、ack-ingress-nginxをクリックします。

      • クラスターがKubernetes 1.22以降を実行する場合は、ack-ingress-nginx-v1をクリックします。

    [次へ] をクリックします。

  4. [パラメーター] ステップで、[グラフバージョン] パラメーターを設定し、[OK] をクリックします。

    説明

    ACKクラスターがKubernetes 1.22以降を実行する場合にのみ、グラフバージョン4.0.17以降 (ack-ingress-nginx-v1 1.8.0-aliyun.1以降) を選択できます。 ACKクラスターがKubernetes 1.20を実行する場合、チャートバージョン4.0.16 (ack-ingress-nginx-v1 1.2.1-aliyun.1) を選択します。

    次の表に、ack-ingress-nginx-v1のパラメーターを示します。

    パラメーター

    説明

    controller.image.repository

    ingress-nginxのイメージレジストリ。

    controller.image.tag

    ingress-nginxのイメージバージョン。 詳細については、「NGINX Ingressコントローラー」をご参照ください。

    controller.ingressClassResource.name

    IngressコントローラーのIngressクラス。 Ingressコントローラは、Ingressクラスで注釈が付けられたIngressのみを処理します。

    重要

    このパラメーターは、1.22より前のバージョンのKubernetesを実行するACKクラスターで使用されるcontroller.ingressClassパラメーターの代わりに使用されます。 このパラメーターは、kubernetes.io/ingress.classアノテーションで指定することもできます。 各IngressコントローラーのIngressクラスは、クラスター内で一意である必要があります。 クラスター内のデフォルトのIngressコントローラーのIngressクラスはnginxです。 したがって、このパラメーターをnginxに設定しないでください。

    controller.ingressClassResource.controllerValue

    Ingressコントローラのコントローラクラス。

    重要

    各Ingressコントローラーのコントローラークラスは、クラスター内で一意である必要があります。 クラスター内のデフォルトのIngressコントローラーのコントローラークラスは、k8s.io/ingress-nginxです。 したがって、このパラメーターをk8s.io/ingress-nginxに設定しないでください。

    controller.replicaCount

    Ingressコントローラーにプロビジョニングされているポッドの数。

    controller.service.enabled

    負荷分散にインターネット向けSLBインスタンスと内部向けSLBインスタンスのどちらを使用するかを指定します。

    controller.service.external.enabled

    負荷分散にインターネット接続のSLBインスタンスを使用するかどうかを指定します。 インターネット接続のSLBインスタンスを使用しない場合は、このパラメーターをfalseに設定します。

    controller.service.int ernal.enabled

    負荷分散に内部向きのSLBインスタンスを使用するかどうかを指定します。 内部対応のSLBインスタンスを使用する場合は、このパラメーターをtrueに設定します。

    controller.kind

    Ingressコントローラーの展開モード。 有効な値: DeploymentおよびDaemonSet

    controller.electionID

    プライマリIngressコントローラーの選択中にIngressのステータスを更新するために使用されるID。

    重要

    ACKコンソールのマーケットプレイスから同じ名前空間に属する複数のIngressコントローラーをデプロイする場合、異なるIngressコントローラーに対してelectionIDパラメーターを異なる値に設定する必要があります。 これは、主要なIngressコントローラーの選挙中の競合を防ぐのに役立ちます。

    controller.metrics.enabled

    ingress-nginxメトリックを有効にするかどうかを指定します。

    controller.metrics.serviceMonitor.enabled

    メトリックを収集するためのルールを構成するために使用されるServiceMonitorを有効にするかどうかを指定します。

    説明

    ingress-nginxメトリックを有効にした後、ServiceMonitorを有効にすることを推奨します。 次に、システムはメトリックを収集するためにPrometheusのManaged Serviceを自動的に設定します。

  5. デプロイされたNGINX Ingressコントローラーを表示します。

    Helmページで、新しいNGINX Ingressコントローラーがデプロイされていることを確認できます。

ネットワーク接続のテスト

次の例では、アプリケーションが作成され、新しいNGINX Ingressコントローラーを使用してインターネットに接続するサービスを提供します。

  1. NGINXアプリケーションをデプロイします。

    apiVersion: apps/v1
    kind: 配置
    メタデータ:
      名前: nginx
    spec:
      replicas: 1
      セレクタ:
        matchLabels:
          run: nginx
      template:
        metadata:
          labels:
            run: nginx
        仕様:
          containers:
          - image: nginx
            imagePullPolicy: Always
            name: nginx
            ポート:
            - containerPort: 80
              protocol: TCP
          restartPolicy: 常に
    ---
    apiVersion: v1
    種類: サービス
    メタデータ:
      名前: nginx
    spec:
      ポート:
      - port: 80
        protocol: TCP
        targetPort: 80
      セレクタ:
        run: nginx
      sessionAffinity: None
      タイプ: NodePort 
  2. NGINX Ingressコントローラーを使用して、インターネット接続サービスを提供します。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    メタデータ:
      name: nginx
      アノテーション:
        # 値を新しいNGINX IngressコントローラーのIngressクラスに設定します。 
        kubernetes.io/ingress.class: "<YOUR_INGRESS_CLASS>"
    spec:
      rules:
      - host: foo.bar.com
        http:
          paths:
          - path: /
            backend:
              service: 
                name: nginx
                port:
                  number: 80
            pathType: ImplementationSpecific 
    説明

    kubernetes.io/ingress.classアノテーションを設定する必要があります。

    アプリケーションをデプロイした後、次の手順を実行して、Ingress IPアドレスと新しいNGINX IngressコントローラーのIPアドレスを照会します。

    • 次のコマンドを実行して、デフォルトのNGINX Ingressコントローラーに関連付けられているインターネットに接続されているSLBインスタンスのIPアドレスを照会します。

      kubectl -n kube-system get svc nginx-ingress-lb

      期待される出力:

      名タイプCLUSTER-IP EXTERNAL-IPポート年齢
      nginx-ingress-lb LoadBalancer 172.19.XX.XX 192.0.XX.XX 80:31429/TCP、443:32553/TCP 2d 
    • 次のコマンドを実行して、新しいNGINX Ingressコントローラーに関連付けられているインターネット接続SLBインスタンスのIPアドレスを照会します。

      kubectl -n <YOUR_NAMESPACE> get svc nginx-ingress-lb

      期待される出力:

      名タイプCLUSTER-IP EXTERNAL-IPポート年齢
      nginx-ingress-lb LoadBalancer 172.19.XX.XX 198.51.XX.XX 80:30969/TCP、443:31325/TCP 39m 
    • 次のコマンドを実行して、Ingressの設定を照会します。

      kubectl get ing

      期待される出力:

      名ホストアドレスポート年齢
      ngin x foo.bar.com 198.51.XX.XX 80 5m 

    出力は、Ingress IPアドレスが新しいNGINX IngressコントローラのIPアドレスと同じであることを示しています。

  3. デフォルトのNGINX Ingressコントローラーと新しいNGINX Ingressコントローラーを使用して、アプリケーションにアクセスします。

    # デフォルトのNGINX ingressコントローラーを使用してアプリケーションにアクセスします。 404のステータスコードが必要です。 
      カール-H「ホスト: foo.bar.com」http:// 192.0.2.0
    default backend - 404                                                                                                                                                                                        
      # 新しいNGINX Ingressコントローラーを使用してアプリケーションにアクセスします。 NGINXのウェルカムページが予定されています。 
      curl -H「ホスト: foo.bar.com」http:// 198.51.XX.XX
    <!DOCTYPE html>
    <html>
    <ヘッド>
    <title> nginxへようこそ!</title>
    <style>
        body {
            幅: 35em;
            マージン: 0 auto;
            フォントファミリー: タホマ、ヴェルダナ、アリアル、サンセリフ。
        }
    </style>
    </head>
    <body>
    <h1> nginxへようこそ!</h1>
    <p> このページが表示されると、nginx webサーバーが正常にインストールされ、働いています。 さらなる設定が必要です。</p>
    
    <p> オンラインドキュメントおよびサポートについては、を参照してください
    <a href=" http://nginx.org/">nginx.org</a> 。<br/>
    商用サポートは
    <a href=" http://nginx.com/">nginx.com</a> 。</p>
    
    <p><em> nginxをご利用いただきありがとうございます。</em></p>
    </body>
    </html> 

上記のテストでは、異なるNGINX Ingressコントローラーを使用して公開されるサービスが互いに干渉しないことを示しています。 このソリューションは、一部のサービスが外部ユーザーにアクセス可能である必要があり、他のサービスが同じVPC内のKubernetes以外のワークロードからのリクエストのみを許可するシナリオに適しています。