本主題說明如何將 Contour 部署到 Tanzu Kubernetes Grid 中的工作負載叢集。
Contour 是使用 Envoy Edge 和服務 Proxy 的 Kubernetes 輸入控制器。Tanzu Kubernetes Grid 包含 Contour 和 Envoy 的簽署二進位檔,可供您部署到工作負載叢集,在這些叢集中提供入口控制服務。
您可以將 Contour 和 Envoy 直接部署到工作負載叢集。如果您要部署 Prometheus、Grafana 和 Harbor 套件,則必須部署 Contour。
如需輸入控制的一般資訊,請參閱 Kubernetes 說明文件中的輸入控制器。
kubectl
,如安裝 Tanzu CLI 和其他工具以用於 vSphere with Tanzu 主管或安裝 Tanzu CLI 和其他工具以用於獨立管理叢集中所述。重要在此版本的 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
如果叢集沒有安裝 Contour 套件的套件存儲庫,例如 tanzu-standard
存放庫,請安裝一個:
附註如果要將以計劃為基礎的叢集 (舊版) 為目標,請跳過此步驟。對於以計劃為基礎的叢集,會在
tanzu-package-repo-global
命名空間中的每個叢集中,自動啟用tanzu-standard
套件存放庫。
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) 清單。在叢集中安裝 cert-manager (如果尚未安裝)。如需相關指示,請參閱安裝 cert-manager 以用於憑證管理。
繼續下面的將 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
如果您要將 Contour 安裝到使用 vSphere with Tanzu 主管建立的工作負載叢集,請執行下列其中一個動作:
沒有 hostPorts
:
如果 Envoy DaemonSet 不需要 hostPorts
,請編輯 contour-data-values.yaml
,將 envoy.hostPorts.enable
設定為 false
:
contour-data-values.yaml
envoy:
hostPorts:
enable: false
有 hostPorts
:
如果需要 hostPorts
,請建立 ClusterRoleBinding
,讓 Envoy 服務帳戶能夠存取 tkg-system-privileged
PSP:
kubectl create clusterrolebinding envoy-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --serviceaccount=tanzu-system-ingress:envoy
如果要將 Contour 安裝到使用 NSX ALB 作為負載平衡器服務提供者的 vSphere 叢集,請修改 contour-default-values.yaml
檔以將 envoy.service.type
設為 LoadBalancer
:
[...]
envoy:
service:
type: LoadBalancer
如果要將 Contour 安裝到網際網路受限的 AWS 環境,請修改 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 套件預設部署兩個 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 上,負載平衡器的名稱類似 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
從啟動機器中,透過將 curl
查詢傳送到 存取 Envoy 管理介面中列出的 Envoy 管理端點,從 Contour 部署中擷取資訊。例如,使用 /config_dump
端點擷取目前載入的設定:
curl http://localhost:9001/config_dump
在叢集中開始執行工作負載後,您可以用定向非循環圖 (DAG) 的形式,將 Contour 公開的流量資訊視覺化。
安裝 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 |
無 | 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 |
無 | 要為 Envoy 佈建的 Kubernetes 服務類型。有效值為 LoadBalancer 、NodePort 和 ClusterIP 。如果未指定,則 vsphere 會使用 NodePort 服務,其他所有目標平台會使用 LoadBalancer 。 |
envoy.service.externalTrafficPolicy |
Local |
Envoy 服務的外部流量原則。有效值為 Local 和 Cluster 。 |
envoy.service.annotations |
無 | 要在 Envoy 服務上設定的註解。 |
envoy.service.loadBalancerIP |
無 | Envoy 服務所需的負載平衡器 IP。如果 envoy.service.type 未設定為 LoadBalancer ,則會忽略此設定 |
envoy.service.nodePorts.http |
無 | 如果 envoy.service.type == NodePort ,則為公開 Envoy HTTP 接聽程式的節點連接埠號碼。如果未指定,Kubernetes 將自動指派節點連接埠。 |
envoy.service.nodePorts.https |
無 | 如果 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 |
無 | 要套用至 Envoy 網繭的網繭安全性原則 (PSP) (逗號分隔清單)。 |
infrastructure_provider |
vsphere |
底層目標平台。有效值為 vsphere 、aws 和 azure 。 |
loadBalancerIP |
無 | 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
套用變更可能需要長達五分鐘的時間。
如需 tanzu package installed update
命令的詳細資訊,請參閱安裝和管理套件中的更新套件。您可以使用此命令更新已安裝的套件版本或組態。