本主題說明如何部署適用於 Contour 入口的 TKG 延伸 v1.3.1。Contour 是使用 Envoy 反向 Proxy 的 Kubernetes 入口控制器。部署適用於 Contour 入口的 TKG 延伸,以向 Tanzu Kubernetes 叢集上執行的服務公開入口路由。
延伸必要條件
- 佈建叢集。請參閱使用 TKGS v1alpha2 API 佈建 Tanzu Kubernetes 叢集的工作流程。
- 連線至叢集。請參閱以 vCenter Single Sign-On 使用者身分連線至 Tanzu Kubernetes 叢集。
- 下載 TKG 延伸 v1.3.1 服務包到執行 kubectl 的用戶端主機。
- 在目標叢集上安裝 TKG 延伸必要條件。
部署 Contour 延伸
容器 | 資源類型 | 複本 | 說明 |
---|---|---|---|
Envoy | DaemonSet | 3 | 高效能反向 Proxy |
Contour | 部署 | 2 | 適用於 Envoy 的管理和組態伺服器 |
- 確認您已完成各個延伸必要條件。請參閱延伸必要條件。
- 將目錄變更為 Contour 延伸檔案的下載位置。
cd /tkg-extensions-v1.3.1+vmware.1/extensions/ingress/contour
- 執行下列命令,以建立
tanzu-system-ingress
命名空間以及 Contour 服務帳戶和角色物件。kubectl apply -f namespace-role.yaml
- 為 vSphere 建立 Contour 資料值檔案。
cp vsphere/contour-data-values-lb.yaml.example vsphere/contour-data-values.yaml
- 透過更新檔案
vsphere/contour-data-values.yaml
來設定 Contour。範例資料值檔案將提供所需的最低組態。如需所有組態欄位和選項的說明,請參閱設定 Contour 延伸。。
例如,下列適用於 vSphere 的 Contour 組態使用 LoadBalancer 類型的服務。infrastructure_provider: "vsphere" contour: image: repository: projects.registry.vmware.com/tkg envoy: image: repository: projects.registry.vmware.com/tkg tag: v1.17.3_vmware.1 service: type: "LoadBalancer"
- 使用資料值建立密碼。
kubectl create secret generic contour-data-values --from-file=values.yaml=vsphere/contour-data-values.yaml -n tanzu-system-ingress
secret/contour-data-values
是在tanzu-system-ingress
命名空間中建立的。使用下列命令進行驗證:kubectl get secrets -n tanzu-system-ingress
- 部署 Contour 入口控制器應用程式。
kubectl apply -f contour-extension.yaml
成功後,您應該會看到
app.kappctrl.k14s.io/contour created
。 - 檢查 Contour 入口控制器應用程式的狀態。
kubectl get app contour -n tanzu-system-ingress
成功後,狀態會從Reconciling
變更為Reconcile succeeded
。如果狀態為Reconcile failed
,請參閱疑難排解 Contour 入口部署。 - 檢視有關 Contour 入口控制器應用程式的詳細資訊。
kubectl get app contour -n tanzu-system-ingress -o yaml
- 檢視類型為 LoadBalancer 的 Envoy 服務。
kubectl get service envoy -n tanzu-system-ingress -o wide
成功後,您應該會看到 Envoy LoadBalancer 詳細資料。NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR envoy LoadBalancer 10.79.65.110 10.178.147.73 80:30437/TCP,443:30589/TCP 2m42s app=envoy,kapp.k14s.io/app=1629916985840017976
- 驗證 Envoy DaemonSet。
kubectl get daemonsets -n tanzu-system-ingress
成功後,您應該會看到 3 個網繭的 Envoy DaemonSet。NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE envoy 3 3 3 3 3 <none> 6m10s
- 驗證 Contour 部署。
kubectl get deployments -n tanzu-system-ingress
成功後,您應該會看到 2 個網繭的 Contour 部署。NAME READY UP-TO-DATE AVAILABLE AGE contour 2/2 2 2 8m7s
- 確認 Contour 入口控制器已正確安裝且可隨時使用。
kubectl get pod,svc -n tanzu-system-ingress
Contour 和 Envoy 網繭的狀態應為Running
,並且為用於 Envoy 服務的 LoadBalancer 指派EXTERNAL-IP
。NAME READY STATUS RESTARTS AGE pod/contour-84bb5475cf-7h4cx 1/1 Running 0 9m52s pod/contour-84bb5475cf-v8k9r 1/1 Running 0 9m52s pod/envoy-4828j 2/2 Running 0 9m52s pod/envoy-c54dw 2/2 Running 0 9m52s pod/envoy-qpjqp 2/2 Running 0 9m52s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/contour ClusterIP 10.105.6.207 <none> 8001/TCP 9m52s service/envoy LoadBalancer 10.79.65.110 10.178.147.73 80:30437/TCP,443:30589/TCP 9m52s
疑難排解 Contour 入口部署
如果部署或協調失敗,請執行 kubectl get pods -n tanzu-system-ingress
以檢視網繭狀態。contour
和 envoy
網繭應為 Running
狀態。如果網繭狀態為 ImagePullBackOff
或 ImageCrashLoopBackOff
,則無法提取容器映像。檢查資料值和延伸 YAML 檔案中的登錄 URL,並確保其正確無誤。
name-XXXX
是
kubectl get pods -A
執行所在的唯一網繭名稱:
kubectl logs pod/envoy-XXXXX -c envoy -n tanzu-system-ingress
kubectl logs pod/contour-XXXXX -c contour -n tanzu-system-ingress
如果發現 Contour 網繭停滯在 ContainerCreating
狀態,但未失敗並顯示上述其中一個映像錯誤,並且沒有進度 (「contour-xxxxx 處理逾時」),則可能表示存在 IP 位址衝突。確保在設定工作負載網路時指定的節點 CIDR 範圍不會與叢集規格中的網繭 CIDR 範圍衝突,後者預設為 192.168.0.0/16
。如果發生衝突,請使用不同的網繭子網路更新叢集,或變更節點網路。
更新 Contour 延伸
更新部署到 Tanzu Kubernetes 叢集的 Contour 延伸。
- 從密碼取得 Contour 資料值。
kubectl get secret contour-data-values -n tanzu-system-ingress -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > contour-data-values.yaml
- 更新
ingress/contour/values.yaml
中的 Contour 入口資料值。請參閱設定 Contour 延伸。。例如,下列適用於 vSphere 的 Contour 組態使用 LoadBalancer 類型的服務。infrastructure_provider: "vsphere" contour: image: repository: projects.registry.vmware.com/tkg envoy: image: repository: projects.registry.vmware.com/tkg tag: v1.17.3_vmware.1 service: type: "LoadBalancer"
- 更新 Contour 資料值密碼。
kubectl create secret generic contour-data-values --from-file=values.yaml=contour-data-values.yaml -n tanzu-system-ingress -o yaml --dry-run | kubectl replace -f-
將使用新的資料值來協調 Contour 延伸。備註: 依預設,kapp-controller 將每 5 分鐘同步一次應用程式。更新應在 5 分鐘內生效。如果您想讓更新立即生效,請將contour-extension.yaml
中的syncPeriod
變更為較小值,然後使用kubectl apply -f contour-extension.yaml
重新部署延伸。 - 檢查應用程式的狀態。
kubectl get app contour -n tanzu-system-ingress
更新 Contour 之後,狀態應變更為
Reconcile Succeeded
。 - 檢視詳細狀態。
kubectl get app contour -n tanzu-system-ingress -o yaml
- 視需要進行疑難排解。請參閱疑難排解 Contour 入口部署。
刪除 Contour 延伸。
從 Tanzu Kubernetes 叢集刪除 Contour 延伸。
- 將目錄變更為 Contour 延伸。
cd extensions/ingress/contour/
- 刪除 Contour 入口控制器應用程式。
kubectl delete app contour -n tanzu-system-ingress
預期結果:
app.kappctrl.k14s.io "contour" deleted
。 - 確認 Contour 入口控制器應用程式是否已刪除。
kubectl get app contour -n tanzu-system-ingress
預期結果:
apps.kappctrl.k14s.io "contour" not found
。 - 刪除
tanzu-system-ingress
命名空間以及 Contour 延伸服務帳戶和角色物件。kubectl delete -f namespace-role.yaml
升級 Contour 延伸
- 匯出 Contour configmap 並將其儲存為備份。
kubectl get configmap contour -n tanzu-system-ingress -o 'go-template={{ index .data "contour.yaml" }}' > contour-configmap.yaml
- 刪除現有的 Contour 部署。請參閱刪除 Contour 延伸。。
- 部署最新的 Contour 延伸。請參閱部署 Contour 延伸。
設定 Contour 延伸。
/extensions/ingress/contour/vsphere/contour-data-values.yaml
中設定。
參數 | 說明 | 類型 | 預設值 |
---|---|---|---|
infrastructure_provider | 基礎結構提供者。支援的值:vsphere、aws、azure | string | 必要參數 |
contour.namespace | 將部署 Contour 的命名空間 | string | tanzu-system-ingress |
contour.config.requestTimeout | 要傳遞到 Envoy 的用戶端要求逾時 | time.Duration | 0s 請參閱檔案下載的路由逾時。 |
contour.config.server.xdsServerType | 要使用的 XDS 伺服器類型:支援的值:contour 或 envoy | string | 空值 |
contour.config.tls.minimumProtocolVersion | Contour 將交涉的最低 TLS 版本 | string | 1.1 |
contour.config.tls.fallbackCertificate.name | 包含要求 (與為 vhost 定義之 SNI 不相符) 的後援憑證之密碼的名稱 | string | 空值 |
contour.config.tls.fallbackCertificate.namespace | 包含後援憑證之密碼的命名空間 | string | 空值 |
contour.config.tls.envoyClientCertificate.name | 要用作用戶端憑證之密碼的名稱,私密金鑰用於與後端服務建立 TLS 連線 | string | 空值 |
namespace.config.tls.envoyClientCertificate.namespace | 要用作用戶端憑證之密碼的命名空間,私密金鑰用於與後端服務建立 TLS 連線 | string | 空值 |
contour.config.leaderelection.configmapName | 要用於 contour leaderelection 的 configmap 名稱 | string | leader-elect |
contour.config.leaderelection.configmapNamespace | contour leaderelection configmap 的命名空間 | string | tanzu-system-ingress |
contour.config.disablePermitInsecure | 停用 ingressroute permitInsecure 欄位 | 布林值 | false |
contour.config.accesslogFormat | 存取記錄格式 | string | envoy |
contour.config.jsonFields | 將記錄的欄位 | 字串陣列 | https://godoc.org/github.com/projectcontour/contour/internal/envoy#JSONFields |
contour.config.useProxyProtocol | https://projectcontour.io/guides/proxy-proto/ | 布林值 | false |
contour.config.defaultHTTPVersions | Contour 為提供服務而應對 Envoy 進行程式設計的 HTTP 版本 | 字串陣列 | "HTTP/1.1 HTTP2" |
contour.config.timeouts.requestTimeout | 整個要求的逾時 | time.Duration | 空值 (逾時將會停用) |
contour.config.timeouts.connectionIdleTimeout | 終止閒置連線前的等待時間 | time.Duration | 60s |
contour.config.timeouts.streamIdleTimeout | 終止要求或串流 (無活動) 前的等待時間 | time.Duration | 5m |
contour.config.timeouts.maxConnectionDuration | 終止連線 (不論活動與否) 前的等待時間 | time.Duration | 空值 (逾時將會停用) |
contour.config.timeouts.ConnectionShutdownGracePeriod | 傳送初始和最終 GOAWAY 之間等待的時間 | time.Duration | 5s |
contour.config.cluster.dnsLookupFamily | Dns-lookup-family 用於來自 HTTPProxy 路由之針對 externalName 類型服務的上游要求 | string | 空值 (支援的值:auto、v4、v6) |
contour.config.debug | 開啟 contour 偵錯 | 布林值 | false |
contour.config.ingressStatusAddress | 針對每個入口資源的狀態設定的位址 | string | 空值 |
contour.certificate.duration | contour 憑證的持續時間 | time.Duration | 8760h |
contour.certificate.renewBefore | 應更新 contour 憑證前的持續時間 | time.Duration | 360h |
contour.deployment.replicas | contour 複本數 | 整數 | 2 |
contour.image.repository | 具有 Contour 映像的存放庫的位置。預設為公用 VMware 登錄。如果您要使用私人存放庫 (例如氣隙環境),請變更此值。 | string | projects.registry.vmware.com/tkg |
contour.image.name | contour 映像的名稱 | string | contour |
contour.image.tag | Contour 映像標籤。如果您要升級 Contour 版本,則可能需要更新此值。 | string | v1.11.0_vmware.1 |
contour.image.pullPolicy | Contour 映像提取原則 | string | IfNotPresent |
envoy.image.repository | 具有 Envoy 映像的存放庫的位置。預設為公用 VMware 登錄。如果您要使用私人存放庫 (例如氣隙環境),請變更此值。 | string | projects.registry.vmware.com/tkg |
envoy.image.name | envoy 映像的名稱 | string | envoy |
envoy.image.tag | Envoy 映像標籤。如果您要升級 Envoy 版本,則可能需要更新此值。 | string |
|
envoy.image.pullPolicy | Envoy 映像提取原則 | string | IfNotPresent |
envoy.hostPort.enable | 公開主機上 envoy 連接埠的旗標 | 布林值 | true |
envoy.hostPort.http | Envoy HTTP 主機連接埠 | 整數 | 80 |
envoy.hostPort.https | Envoy HTTPS 主機連接埠 | 整數 | 443 |
envoy.service.type | 要公開 envoy 的服務類型。支援的值:ClusterIP、NodePort、LoadBalancer | string | 必要參數,vSphere:NodePort 或 LoadBalancer,AWS:LoadBalancer,Azure:LoadBalancer |
envoy.service.annotations | Envoy 服務註解 | 對應 (索引鍵-值) | 空白對應 |
envoy.service.externalTrafficPolicy | envoy 服務的外部流量原則。支援的值:Local、Cluster | string | 叢集 |
envoy.service.nodePort.http | HTTP 要求所使用之類型為 NodePort 的服務所需的 nodePort | 整數 | 空值 - Kubernetes 會指派動態節點連接埠 |
envoy.service.nodePort.https | 用於 HTTPS 要求的類型為 NodePort 的服務所需的 nodePort | 整數 | 空值 - Kubernetes 會指派動態節點連接埠 |
envoy.deployment.hostNetwork | 在 hostNetwork 上執行 envoy | 布林值 | false |
envoy.service.aws.LBType | 用於公開 envoy 服務的 AWS LB 類型。支援的值:classic、nlb | string | classic |
envoy.loglevel | 要用於 envoy 的記錄層級 | string | 資訊 |
檔案下載的路由逾時
參數 contour.config.requestTimeout
將定義 Contour 路由逾時持續時間。預設值為 0s
。如果使用 Contour 進行檔案傳輸,您可能需要調整此值。
根據 Contour 說明文件,0s
的逾時值會指示 Contour 使用 Envoy 逾時。根據 Envoy 說明文件,Envoy 的預設逾時為 15 秒。此外,Envoy 還預期在逾時間隔內完成整個請求回應作業。
這意味著,如果 Contour 預設逾時設定為 0s
,則必須在 15 秒內完成檔案傳輸。對於大型檔案傳輸,這可能時間不夠。若要停用預設 Envoy 逾時,請將 contour.config.requestTimeout
值設定為 0
。