入力方向制御のための Contour のインストール

このトピックでは、Tanzu Kubernetes Grid のワークロード クラスタに Contour を展開する方法について説明します。

Contour は、Envoy エッジおよびサービス プロキシを使用する Kubernetes Ingress コントローラです。Tanzu Kubernetes Grid には、Contour および Envoy 用の署名付きバイナリが含まれています。このバイナリをワークロード クラスタに展開して、これらのクラスタで入力方向制御サービスを提供できます。

Contour と Envoy をワークロード クラスタに直接展開します。Prometheus、Grafana、Harbor パッケージを展開する場合は、Contour の展開が前提条件です。

入力方向制御の一般的な情報については、Kubernetes ドキュメントの「入力方向コントローラ」を参照してください。

前提条件

重要

このリリースの Tanzu Kubernetes Grid では、Contour と Envoy の提供される実装では、自己署名証明書を使用することを前提としています。

Contour 展開のためのワークロード クラスタの準備

クラスタを準備するには、次の手順を実行します。

  1. Contour を展開するワークロード クラスタの admin 認証情報を取得します。例:

    tanzu cluster kubeconfig get my-cluster --admin
    

    上記の例では、my-cluster はクラスタの名前です。

  2. kubectl のコンテキストをクラスタに設定します。例:

    kubectl config use-context my-cluster-admin@my-cluster
    
  3. クラスタに、tanzu-standard リポジトリなどの Contour パッケージがインストールされたパッケージ リポジトリがない場合は、次の方法でインストールします。

    プランベースのクラスタ(レガシー)をターゲットとする場合は、この手順をスキップします。プランベースのクラスタの場合は、tanzu-standard パッケージ リポジトリは、すべてのクラスタの tanzu-package-repo-global 名前空間で自動的に有効になります。

    tanzu package repository add PACKAGE-REPO-NAME --url PACKAGE-REPO-ENDPOINT --namespace tkg-system
    

    ここで、

    • PACKAGE-REPO-NAME はパッケージ リポジトリの名前です。tanzu-standard や、ADDITIONAL_IMAGE_REGISTRY 変数で構成されたプライベート イメージ レジストリの名前が入ります。
    • PACKAGE-REPO-ENDPOINT はパッケージ リポジトリの URL です。

      • このリリースでは、tanzu-standard の URL は projects.registry.vmware.com/tkg/packages/standard/repo:v2.2.0 です。Tanzu CLI からこの値を取得するには、「パッケージ リポジトリの一覧表示」を参照してください。また、Tanzu Mission Control では [クラスタ (Cluster)] ペインの [アドオン (Addons)] > [リポジトリ (Repositories)] リストを参照してください。
  4. まだクラスタに cert-manager をインストールしていない場合は、インストールします。手順については、「証明書管理用の cert-manager のインストール」を参照してください。

  5. 次の「ワークロード クラスタへの Contour の展開」に進みます。

ワークロード クラスタへの Contour の展開

クラスタを設定したら、最初に Contour パッケージをインストールするときに使用する構成ファイルを作成してから、パッケージをインストールする必要があります。

  1. Contour パッケージのデフォルト構成を取得して、Contour パッケージの構成ファイルを作成します。

    tanzu package available get contour.tanzu.vmware.com/PACKAGE-VERSION --default-values-file-output FILE-PATH
    

    ここで、PACKAGE-VERSION はインストールする Contour パッケージのバージョンで、FILE-PATHcontour-data-values.yaml などの構成ファイルを保存する場所です。

  2. contour-data-values.yaml ファイルで次の構成を行います。

    vSphere
    このファイルは vSphere での Contour パッケージを構成します。
    ---
    infrastructure_provider: vsphere
    namespace: tanzu-system-ingress
    contour:
     configFileContents: {}
     useProxyProtocol: false
     replicas: 2
     pspNames: "vmware-system-restricted"
     logLevel: info
    envoy:
     service:
       type: NodePort
       annotations: {}
       nodePorts:
         http: null
         https: null
       externalTrafficPolicy: Cluster
       disableWait: false
     hostPorts:
       enable: true
       http: 80
       https: 443
     hostNetwork: false
     terminationGracePeriodSeconds: 300
     logLevel: info
     pspNames: null
    certificates:
     duration: 8760h
     renewBefore: 360h
    
    AWS
    このファイルは vSphere での Contour パッケージを構成します。
    ---
    infrastructure_provider: aws
    namespace: tanzu-system-ingress
    contour:
     configFileContents: {}
     useProxyProtocol: false
     replicas: 2
     pspNames: "vmware-system-restricted"
     logLevel: info
    envoy:
     service:
       type: LoadBalancer
       annotations: {}
       nodePorts:
         http: null
         https: null
       externalTrafficPolicy: Cluster
       aws:
         LBType: classic
       disableWait: false
     hostPorts:
       enable: true
       http: 80
       https: 443
     hostNetwork: false
     terminationGracePeriodSeconds: 300
     logLevel: info
     pspNames: null
    certificates:
     duration: 8760h
     renewBefore: 360h
    
    Azure
    このファイルは Azure での Contour パッケージを構成します。
    ---
    infrastructure_provider: azure
    namespace: tanzu-system-ingress
    contour:
     configFileContents: {}
     useProxyProtocol: false
     replicas: 2
     pspNames: "vmware-system-restricted"
     logLevel: info
    envoy:
     service:
       type: LoadBalancer
       annotations: {}
       nodePorts:
         http: null
         https: null
       externalTrafficPolicy: Cluster
       disableWait: false
     hostPorts:
       enable: true
       http: 80
       https: 443
     hostNetwork: false
     terminationGracePeriodSeconds: 300
     logLevel: info
     pspNames: null
    certificates:
     duration: 8760h
     renewBefore: 360h
    
  3. vSphere with Tanzu スーパーバイザーを使用して作成されたワークロード クラスタに Contour をインストールする場合は、次のいずれかを実行します。

    • hostPorts なし

      Envoy daemonset に hostPorts が不要な場合は、contour-data-values.yaml を編集して envoy.hostPorts.enablefalse に設定します。

      contour-data-values.yaml
      envoy:
        hostPorts:
          enable: false
      
    • hostPorts あり

      hostPorts が必要な場合は、Envoy サービス アカウントが tkg-system-privileged PSP にアクセスできるようにする ClusterRoleBinding を作成します。

      kubectl create clusterrolebinding envoy-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --serviceaccount=tanzu-system-ingress:envoy
      
  4. NSX ALB をロード バランサ サービス プロバイダとして使用する vSphere クラスタに Contour をインストールする場合は、contour-default-values.yaml ファイルを変更して envoy.service.typeLoadBalancer に設定します。

    [...]
    envoy:
     service:
       type: LoadBalancer
    
  5. インターネットが制限された AWS 環境に Contour をインストールする場合は、contour-data-values.yaml ファイルを変更して、Envoy サービスに次の注釈を追加します。

    infrastructure_provider: aws
    [...]
    envoy:
     service:
       annotations:
         service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    
  6. (オプション)必要に応じて、contour-data-values.yaml ファイルを変更します。「オプションの構成」セクションには、contour-data-values.yaml ファイルでカスタマイズできる値と、ターゲット クラスタの Contour のデフォルトの動作を変更するために使用する方法が記載されています。たとえば、Contour パッケージはデフォルトで 2 つの Contour レプリカを展開しますが、レプリカの数は構成可能です。この数値は、contour-data-values.yamlcontour.replicas 値で設定します。ほとんどの場合、contour-data-values.yaml ファイルを変更する必要はありません。

    また、これらの値を取得するには、ターゲット クラスタに対して次のコマンドを実行します。

    tanzu package available get contour.tanzu.vmware.com/AVAILABLE-VERSION --values-schema
    

    ここで、AVAILABLE-VERSION は Contour パッケージのバージョンです。--values-schema フラグは、Contour パッケージの Package API リソースから valuesSchema セクションを取得します。値スキーマの出力形式 --output は、yamljson、または table に設定できます。詳細については、「パッケージのインストールと管理」の「パッケージ」を参照してください。

    例:

    tanzu package available get contour.tanzu.vmware.com/1.17.1+vmware.1-tkg.1 --values-schema
    
  7. contour-data-values.yaml ファイルにコメントが含まれている場合は、それらを削除します。

    yq -i eval '... comments=""' contour-data-values.yaml
    
  8. Contour パッケージをインストールします。

    1. 使用可能なパッケージの名前を取得します。

      tanzu package available list -A
      
    2. 使用可能なパッケージのバージョンを取得します。

      tanzu package available list contour.tanzu.vmware.com -A
      
    3. このパッケージをインストールします。

      tanzu package install contour \
      --package contour.tanzu.vmware.com \
      --version AVAILABLE-PACKAGE-VERSION \
      --values-file contour-data-values.yaml \
      --namespace TARGET-NAMESPACE
      

      ここで、

      • TARGET-NAMESPACE は、Contour パッケージをインストールする名前空間です。たとえば、my-packages または tanzu-cli-managed-packages 名前空間などです。

        • --namespace フラグが指定されていない場合、Tanzu CLI は default 名前空間を使用します。Contour および Envoy ポッド、および Contour コンポーネントに関連付けられているその他のリソースは、tanzu-system-ingress 名前空間に作成されます。Contour パッケージをこの名前空間にインストールしないでください。
        • 指定された名前空間は、たとえば kubectl create namespace my-packages を実行することによってすでに存在している必要があります。
      • AVAILABLE-PACKAGE-VERSION は、上で取得したバージョンです。

      例:

      tanzu package install contour \
      --package contour.tanzu.vmware.com \
      --version 1.17.1+vmware.1-tkg.1 \
      --values-file contour-data-values.yaml \
      --namespace my-packages
      
  9. contour パッケージがインストールされていることを確認します。

    tanzu package installed list -A
    

    例:

    tanzu package installed list -A
    - Retrieving installed packages...
      NAME            PACKAGE-NAME                     PACKAGE-VERSION                   STATUS               NAMESPACE
      cert-manager    cert-manager.tanzu.vmware.com    1.1.0+vmware.1-tkg.2              Reconcile succeeded  my-packages
      contour         contour.tanzu.vmware.com         1.17.1+vmware.1-tkg.1             Reconcile succeeded  my-packages
      antrea          antrea.tanzu.vmware.com                                            Reconcile succeeded  tkg-system
      [...]
    

    パッケージの詳細を表示するために、次のコマンドを実行することもできます。

    tanzu package installed get contour --namespace PACKAGE-NAMESPACE
    

    ここで、PACKAGE-NAMESPACE は、contour パッケージがインストールされている名前空間です。

    例:

    tanzu package installed get contour --namespace my-packages
    \ Retrieving installation details for contour...
    NAME:                    contour
    PACKAGE-NAME:            contour.tanzu.vmware.com
    PACKAGE-VERSION:         1.17.1+vmware.1-tkg.1
    STATUS:                  Reconcile succeeded
    CONDITIONS:              [{ReconcileSucceeded True  }]
    USEFUL-ERROR-MESSAGE:
    
  10. contour アプリケーションが PACKAGE-NAMESPACE で正常に調整されていることを確認します。

    kubectl get apps -A
    

    例:

    NAMESPACE     NAME             DESCRIPTION           SINCE-DEPLOY   AGE
    my-packages   cert-manager     Reconcile succeeded   78s            3h5m
    my-packages   contour          Reconcile succeeded   57s            6m3s
    tkg-system    antrea           Reconcile succeeded   45s            3h18m
    [...]
    

    ステータスが Reconcile Succeeded でない場合は、contour アプリケーションの完全なステータスの詳細を表示します。完全なステータスを表示すると、問題のトラブルシューティングに役立ちます。

    kubectl get app contour --namespace PACKAGE-NAMESPACE -o yaml
    

    ここで、PACKAGE-NAMESPACE は、パッケージをインストールした名前空間です。トラブルシューティングを行っても問題を解決できない場合は、パッケージをアンインストールしてから再度インストールする必要があります。

    tanzu package installed delete contour --namespace PACKAGE-NAMESPACE
    
  11. Contour ポッドと Envoy ポッドが tanzu-system-ingress 名前空間で実行されていることを確認します。

    kubectl get pods -A
    

    例:

    kubectl get pods -A
    NAMESPACE              NAME                                                        READY   STATUS    RESTARTS   AGE
    [...]
    tanzu-system-ingress   contour-5dc6fc667c-c4w8k                                    1/1     Running   0          14m
    tanzu-system-ingress   contour-5dc6fc667c-jnqwn                                    1/1     Running   0          14m
    tanzu-system-ingress   envoy-mgfll                                                 2/2     Running   0          14m
    [...]
    
  12. Contour を AWS または Azure に展開した場合は、Envoy サービス用にロード バランサが作成されていることを確認します。

    kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
    

    AWS では、loadbalancer の名前は aabaaad4dfc8e4a808a70a7cbf7d9249-1201421080.us-west-2.elb.amazonaws.com のようになります。Azure では、20.54.226.44 のような IP アドレスになります。

Envoy 管理インターフェイスへのリモート アクセス

Contour をクラスタに展開した後、組み込みの Envoy 管理インターフェイスを使用して、展開に関するデータを取得できます。

Envoy 管理インターフェイスの詳細については、Envoy ドキュメントの「管理インターフェイス」を参照してください。

  1. Envoy ポッドの名前を取得します。

    ENVOY_POD=$(kubectl -n tanzu-system-ingress get pod -l app=envoy -o name | head -1)
    
  2. Envoy ポッドをブートストラップ マシンのポート 9001 に転送します。

    kubectl -n tanzu-system-ingress port-forward $ENVOY_POD 9001
    
  3. ブートストラップ マシンから、「Envoy 管理インターフェイスへのアクセス」にリストされている Envoy 管理エンドポイントに curl クエリを送信して、Contour 展開から情報を取得します。たとえば、/config_dump エンドポイントを使用して、現在ロードされている構成を取得します。

    curl http://localhost:9001/config_dump
    

内部 Contour Directed Acyclic Graph(有向非巡回グラフ、DAG)の可視化

クラスタでワークロードの実行を開始すると、Contour が公開するトラフィック情報を、Directed Acyclic Graph(有向非巡回グラフ、DAG)の形式で視覚化できます。

  1. Graphviz をインストールします(インストールされていない場合)。このパッケージは、DAG イメージ ファイルを作成する dot コマンドを提供します。

  2. Contour ポッドの名前を取得します。

    CONTOUR_POD=$(kubectl -n tanzu-system-ingress get pod -l app=contour -o name | head -1)
    
  3. Contour ポッドでポート 6060 を転送します。

    kubectl -n tanzu-system-ingress port-forward $CONTOUR_POD 6060
    
  4. 新しいターミナル ウィンドウを開き、DAG をダウンロードして *.png ファイルとして保存します。次のコマンドを実行するには、dot をシステムにインストールする必要があります(まだ存在しない場合)。

    curl localhost:6060/debug/dag | dot -T png > contour-dag.png
    
  5. contour-dag.png を開いてグラフを表示します。

    Contour DAG ファイル

オプションの構成

Contour パッケージ構成ファイルのデフォルト値を編集して、構成をさらにカスタマイズできます。

次の表に、contour-data-values.yaml ファイルでカスタマイズできる値と、ワークロード クラスタに展開する際に Contour のデフォルトの動作を変更するために使用する方法について説明します。

初期展開後に Contour 設定を再構成する場合は、「実行中の Contour 展開の更新」の手順に従って、新しい構成をクラスタに適用する必要があります。

設定 デフォルト 説明
certificates.duration 8760h Contour と Envoy 間の通信を保護するための証明書の有効期間。
certificates.renewBefore 360h 有効期限が切れるどのくらい前に、Contour と Envoy 間の通信を保護するための証明書を更新する必要があるか。
contour.configFileContents none Contour 構成ファイルの YAML コンテンツ。詳細については、Contour ドキュメントの「構成ファイル」を参照してください。
contour.replicas 2 所有する Contour ポッド レプリカの数。
contour.useProxyProtocol false すべての Envoy リスナーの PROXY プロトコルを有効にするかどうか。
contour.logLevel info Contour ログ レベル。有効な値は、info および debug です。
contour.pspNames vmware-system-restricted Contour ポッドに適用するポッド セキュリティ ポリシー (PSP) のカンマ区切りリスト。
envoy.service.type none Envoy 用にプロビジョニングする Kubernetes サービスのタイプ。有効な値は、LoadBalancerNodePortClusterIP です。指定しない場合、vsphere には NodePort サービスが使用され、他のすべてのターゲット プラットフォームには LoadBalancer が使用されます。
envoy.service.externalTrafficPolicy Local Envoy サービスの外部トラフィック ポリシー。有効な値は、Local および Cluster です。
envoy.service.annotations none Envoy サービスで設定する注釈。
envoy.service.loadBalancerIP none Envoy サービスに必要なロード バランサの IP アドレス。envoy.service.typeLoadBalancer に設定されていない場合、この設定は無視されます。
envoy.service.nodePorts.http none envoy.service.type == NodePort の場合、Envoy の HTTP リスナーを公開するノード ポート番号。指定しない場合、Kubernetes によってノード ポートが自動的に割り当てられます。
envoy.service.nodePorts.https none envoy.service.type == NodePort の場合、Envoy の HTTPS リスナーを公開するノード ポート番号。指定しない場合、Kubernetes によってノード ポートが自動的に割り当てられます。
envoy.service.aws.LBType classic infrastructure_provider == aws の場合、使用する AWS ロード バランサのタイプ。有効な値は、classic および nlb です。aws を使用していない場合、この値は無視されます。
envoy.hostPorts.enable false Envoy ポッドのホスト ポートを有効にするかどうか。false の場合、envoy.hostPorts.http および envoy.hostPorts.https は無視されます。
envoy.hostPorts.http 80 envoy.hostPorts.enable == true の場合、Envoy の HTTP リスナーを公開するホスト ポート番号。
envoy.hostPorts.https 443 envoy.hostPorts.enable == trueの場合、Envoy の HTTPS リスナーを公開するホスト ポート番号。
envoy.hostNetwork false Envoy ポッドのホスト ネットワークを有効にするかどうか。
envoy.terminationGracePeriodSeconds 300 Envoy ポッドの終了猶予期間(秒単位)。
envoy.logLevel info Envoy ログ レベル。有効な値は、tracedebuginfowarnerrorcriticaloff です。
envoy.pspNames none Envoy ポッドに適用するポッド セキュリティ ポリシー (PSP) のカンマ区切りリスト。
infrastructure_provider vsphere 基盤となるターゲット プラットフォーム。有効な値は、vsphereawsazure です。
loadBalancerIP none Envoy サービスに必要なロード バランサの IP アドレス。envoy.service.typeLoadBalancer に設定されていない場合、この設定は無視されます。
namespace tanzu-system-ingress Contour および Envoy ポッドが実行される名前空間。パッケージが展開されている場所とは異なります。

実行中の Contour 展開の更新

展開後に Contour パッケージの構成を変更する必要がある場合は、次の手順に従って、展開された Contour パッケージを更新します。

  1. contour-data-values.yaml ファイルで Contour 構成を更新します。たとえば、contour.replicas を新しい値に設定することで、Contour レプリカの数を変更できます。

  2. インストール済みパッケージを更新します。

    tanzu package installed update contour \
    --version INSTALLED-PACKAGE-VERSION \
    --values-file contour-data-values.yaml \
    --namespace INSTALLED-PACKAGE-NAMESPACE
    

    ここで、

    • INSTALLED-PACKAGE-VERSION は、インストールされている Contour パッケージのバージョンです。
    • INSTALLED-PACKAGE-NAMESPACE は、Contour パッケージがインストールされている名前空間です。

    例:

    tanzu package installed update contour \
    --version 1.17.1+vmware.1-tkg.1 \
    --values-file contour-data-values.yaml \
    --namespace my-packages
    

    Contour パッケージは、追加した新しい値を使用して調整されます。kapp-controller が変更を適用するまでに最大 5 分かかることがあります。

    tanzu package installed update コマンドの詳細については、「パッケージのインストールと管理」の「パッケージの更新」を参照してください。 このコマンドを使用して、インストールされているパッケージのバージョンまたは構成を更新できます。

check-circle-line exclamation-circle-line close-line
Scroll to top icon