このトピックでは、Tanzu Kubernetes Grid のワークロード クラスタに Contour を展開する方法について説明します。
Contour は、Envoy エッジおよびサービス プロキシを使用する Kubernetes Ingress コントローラです。Tanzu Kubernetes Grid には、Contour および Envoy 用の署名付きバイナリが含まれています。このバイナリをワークロード クラスタに展開して、これらのクラスタで入力方向制御サービスを提供できます。
Contour と Envoy をワークロード クラスタに直接展開します。Prometheus、Grafana、Harbor パッケージを展開する場合は、Contour の展開が前提条件です。
入力方向制御の一般的な情報については、Kubernetes ドキュメントの「入力方向コントローラ」を参照してください。
kubectl
。重要このリリースの Tanzu Kubernetes Grid では、Contour と Envoy の提供される実装では、自己署名証明書を使用することを前提としています。
クラスタを準備するには、次の手順を実行します。
Contour を展開するワークロード クラスタの admin
認証情報を取得します。例:
tanzu cluster kubeconfig get my-cluster --admin
上記の例では、my-cluster
はクラスタの名前です。
kubectl
のコンテキストをクラスタに設定します。例:
kubectl config use-context my-cluster-admin@my-cluster
クラスタに standard
パッケージ リポジトリがまだインストールされていない場合は、インストールします。
注プランベースのクラスタ(レガシー)をターゲットとする場合は、この手順をスキップします。プランベースのクラスタの場合は、
tanzu-standard
パッケージ リポジトリは、すべてのクラスタのtanzu-package-repo-global
名前空間で自動的に有効になります。
tanzu package repository add tanzu-standard --url PACKAGE-REPOSITORY-ENDPOINT --namespace tkg-system
ここで、PACKAGE-REPOSITORY-ENDPOINT
は standard
パッケージ リポジトリの URL です。このリリースでは、URL は projects.registry.vmware.com/tkg/packages/standard/repo:v2.1.1
です。
Tanzu CLI からこの値を取得するには、「パッケージ リポジトリの一覧表示」を参照してください。また、Tanzu Mission Control では [クラスタ (Cluster)] ペインの [アドオン (Addons)] > [リポジトリ (Repositories)] リストを参照してください。
まだクラスタに cert-manager をインストールしていない場合は、インストールします。手順については、「証明書管理用の cert-manager のインストール」を参照してください。
次の「ワークロード クラスタへの Contour の展開」に進みます。
クラスタを設定したら、最初に Contour パッケージをインストールするときに使用する構成ファイルを作成してから、パッケージをインストールする必要があります。
Contour パッケージのデフォルト構成を取得して、Contour パッケージの構成ファイルを作成します。
tanzu package available get contour.tanzu.vmware.com/PACKAGE-VERSION --default-values-file-output FILE-PATH
ここで、PACKAGE-VERSION
はインストールする Contour パッケージのバージョンで、FILE-PATH
は contour-data-values.yaml
などの構成ファイルを保存する場所です。
contour-data-values.yaml
ファイルで次の構成を行います。
---
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
---
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
---
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
vSphere with Tanzu スーパーバイザーを使用して作成されたワークロード クラスタに Contour をインストールする場合は、次のいずれかを実行します。
hostPorts
なし:
Envoy daemonset に hostPorts
が不要な場合は、contour-data-values.yaml
を編集して envoy.hostPorts.enable
を false
に設定します。
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
NSX ALB をロード バランサ サービス プロバイダとして使用する vSphere クラスタに Contour をインストールする場合は、contour-default-values.yaml
ファイルを変更して envoy.service.type
を LoadBalancer
に設定します。
[...]
envoy:
service:
type: LoadBalancer
インターネットが制限された AWS 環境に Contour をインストールする場合は、contour-data-values.yaml
ファイルを変更して、Envoy サービスに次の注釈を追加します。
infrastructure_provider: aws
[...]
envoy:
service:
annotations:
service.beta.kubernetes.io/aws-load-balancer-internal: "true"
(オプション)必要に応じて、contour-data-values.yaml
ファイルを変更します。「オプションの構成」セクションには、contour-data-values.yaml
ファイルでカスタマイズできる値と、ターゲット クラスタの Contour のデフォルトの動作を変更するために使用する方法が記載されています。たとえば、Contour パッケージはデフォルトで 2 つの Contour レプリカを展開しますが、レプリカの数は構成可能です。この数値は、contour-data-values.yaml
の contour.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
は、yaml
、json
、または table
に設定できます。詳細については、「パッケージのインストールと管理」の「パッケージ」を参照してください。
例:
tanzu package available get contour.tanzu.vmware.com/1.17.1+vmware.1-tkg.1 --values-schema
contour-data-values.yaml
ファイルにコメントが含まれている場合は、それらを削除します。
yq -i eval '... comments=""' contour-data-values.yaml
Contour パッケージをインストールします。
使用可能なパッケージの名前を取得します。
tanzu package available list -A
使用可能なパッケージのバージョンを取得します。
tanzu package available list contour.tanzu.vmware.com -A
このパッケージをインストールします。
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
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:
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
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
[...]
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 アドレスになります。
Contour をクラスタに展開した後、組み込みの Envoy 管理インターフェイスを使用して、展開に関するデータを取得できます。
Envoy 管理インターフェイスの詳細については、Envoy ドキュメントの「管理インターフェイス」を参照してください。
Envoy ポッドの名前を取得します。
ENVOY_POD=$(kubectl -n tanzu-system-ingress get pod -l app=envoy -o name | head -1)
Envoy ポッドをブートストラップ マシンのポート 9001 に転送します。
kubectl -n tanzu-system-ingress port-forward $ENVOY_POD 9001
ブートストラップ マシンから、「Envoy 管理インターフェイスへのアクセス」にリストされている Envoy 管理エンドポイントに curl
クエリを送信して、Contour 展開から情報を取得します。たとえば、/config_dump
エンドポイントを使用して、現在ロードされている構成を取得します。
curl http://localhost:9001/config_dump
クラスタでワークロードの実行を開始すると、Contour が公開するトラフィック情報を、Directed Acyclic Graph(有向非巡回グラフ、DAG)の形式で視覚化できます。
Graphviz をインストールします(インストールされていない場合)。このパッケージは、DAG イメージ ファイルを作成する dot
コマンドを提供します。
Contour ポッドの名前を取得します。
CONTOUR_POD=$(kubectl -n tanzu-system-ingress get pod -l app=contour -o name | head -1)
Contour ポッドでポート 6060 を転送します。
kubectl -n tanzu-system-ingress port-forward $CONTOUR_POD 6060
新しいターミナル ウィンドウを開き、DAG をダウンロードして *.png
ファイルとして保存します。次のコマンドを実行するには、dot
をシステムにインストールする必要があります(まだ存在しない場合)。
curl localhost:6060/debug/dag | dot -T png > contour-dag.png
contour-dag.png
を開いてグラフを表示します。
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 サービスのタイプ。有効な値は、LoadBalancer 、NodePort 、ClusterIP です。指定しない場合、vsphere には NodePort サービスが使用され、他のすべてのターゲット プラットフォームには LoadBalancer が使用されます。 |
envoy.service.externalTrafficPolicy |
Local |
Envoy サービスの外部トラフィック ポリシー。有効な値は、Local および Cluster です。 |
envoy.service.annotations |
none | Envoy サービスで設定する注釈。 |
envoy.service.loadBalancerIP |
none | Envoy サービスに必要なロード バランサの IP アドレス。envoy.service.type が LoadBalancer に設定されていない場合、この設定は無視されます。 |
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 ログ レベル。有効な値は、trace 、debug 、info 、warn 、error 、critical 、off です。 |
envoy.pspNames |
none | Envoy ポッドに適用するポッド セキュリティ ポリシー (PSP) のカンマ区切りリスト。 |
infrastructure_provider |
vsphere |
基盤となるターゲット プラットフォーム。有効な値は、vsphere 、aws 、azure です。 |
loadBalancerIP |
none | Envoy サービスに必要なロード バランサの IP アドレス。envoy.service.type が LoadBalancer に設定されていない場合、この設定は無視されます。 |
namespace |
tanzu-system-ingress |
Contour および Envoy ポッドが実行される名前空間。パッケージが展開されている場所とは異なります。 |
展開後に Contour パッケージの構成を変更する必要がある場合は、次の手順に従って、展開された Contour パッケージを更新します。
contour-data-values.yaml
ファイルで Contour 構成を更新します。たとえば、contour.replicas
を新しい値に設定することで、Contour レプリカの数を変更できます。
インストール済みパッケージを更新します。
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
コマンドの詳細については、「パッケージのインストールと管理」の「パッケージの更新」を参照してください。 このコマンドを使用して、インストールされているパッケージのバージョンまたは構成を更新できます。