本主題說明如何部署適用於 Contour 入口的 TKG 延伸 v1.3.1。Contour 是使用 Envoy 反向 Proxy 的 Kubernetes 入口控制器。部署適用於 Contour 入口的 TKG 延伸,以向 Tanzu Kubernetes 叢集上執行的服務公開入口路由。

延伸必要條件

部署適用於 Contour 入口的 TKG 延伸 v1.3.1 之前,請遵循下列需求。

部署 Contour 延伸

適用於 Contour 入口的 TKG 延伸會在叢集上安裝兩個容器:Envoy 和 Contour。如需詳細資訊,請參閱 https://projectcontour.io/
容器 資源類型 複本 說明
Envoy DaemonSet 3 高效能反向 Proxy
Contour 部署 2 適用於 Envoy 的管理和組態伺服器
延伸設定為從位於 https://projects.registry.vmware.com/ 的 VMware 公用登錄提取容器。如果使用私人登錄,請變更資料值和延伸組態中的端點 URL 以便相符。請參閱 設定 Contour 延伸。
  1. 確認您已完成各個延伸必要條件。請參閱延伸必要條件
  2. 將目錄變更為 Contour 延伸檔案的下載位置。
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/ingress/contour
  3. 執行下列命令,以建立 tanzu-system-ingress 命名空間以及 Contour 服務帳戶和角色物件。
    kubectl apply -f namespace-role.yaml
  4. 為 vSphere 建立 Contour 資料值檔案。
    cp vsphere/contour-data-values-lb.yaml.example vsphere/contour-data-values.yaml
  5. 透過更新檔案 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"
    備註: 建議您指定 Envoy 映像版本 v1.17.3_vmware.1,以便不使用具有 CVE 的 Envoy 映像版本 v1.16.2_vmware.1。如需詳細資訊,請參閱 版本說明
  6. 使用資料值建立密碼。
    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
  7. 部署 Contour 入口控制器應用程式。
    kubectl apply -f contour-extension.yaml

    成功後,您應該會看到 app.kappctrl.k14s.io/contour created

  8. 檢查 Contour 入口控制器應用程式的狀態。
    kubectl get app contour -n tanzu-system-ingress
    成功後,狀態會從 Reconciling 變更為 Reconcile succeeded。如果狀態為 Reconcile failed,請參閱疑難排解 Contour 入口部署
  9. 檢視有關 Contour 入口控制器應用程式的詳細資訊。
    kubectl get app contour -n tanzu-system-ingress -o yaml
  10. 檢視類型為 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
  11. 驗證 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
  12. 驗證 Contour 部署。
    kubectl get deployments -n tanzu-system-ingress
    成功後,您應該會看到 2 個網繭的 Contour 部署。
    NAME      READY   UP-TO-DATE   AVAILABLE   AGE
    contour   2/2     2            2           8m7s
  13. 確認 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 以檢視網繭狀態。contourenvoy 網繭應為 Running 狀態。如果網繭狀態為 ImagePullBackOffImageCrashLoopBackOff,則無法提取容器映像。檢查資料值和延伸 YAML 檔案中的登錄 URL,並確保其正確無誤。

檢查容器記錄,其中 name-XXXXkubectl 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 延伸。

  1. 從密碼取得 Contour 資料值。
    kubectl get secret contour-data-values -n tanzu-system-ingress -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > contour-data-values.yaml
    
  2. 更新 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"
    備註: 建議您指定 Envoy 映像版本 v1.17.3_vmware.1,以便不使用具有 CVE 的 Envoy 映像版本 v1.16.2_vmware.1。如需詳細資訊,請參閱 版本說明
  3. 更新 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 重新部署延伸。
  4. 檢查應用程式的狀態。
    kubectl get app contour -n tanzu-system-ingress

    更新 Contour 之後,狀態應變更為 Reconcile Succeeded

  5. 檢視詳細狀態。
    kubectl get app contour -n tanzu-system-ingress -o yaml
  6. 視需要進行疑難排解。請參閱疑難排解 Contour 入口部署

刪除 Contour 延伸。

Tanzu Kubernetes 叢集刪除 Contour 延伸。

備註: 按順序完成步驟。請不要在完全刪除 Contour 入口控制器應用程式之前,先刪除命名空間、服務帳戶和角色物件。這樣做可能會導致系統錯誤。
  1. 將目錄變更為 Contour 延伸。
    cd extensions/ingress/contour/
  2. 刪除 Contour 入口控制器應用程式。
    kubectl delete app contour -n tanzu-system-ingress

    預期結果:app.kappctrl.k14s.io "contour" deleted

  3. 確認 Contour 入口控制器應用程式是否已刪除。
    kubectl get app contour -n tanzu-system-ingress

    預期結果:apps.kappctrl.k14s.io "contour" not found

  4. 刪除 tanzu-system-ingress 命名空間以及 Contour 延伸服務帳戶和角色物件。
    kubectl delete -f namespace-role.yaml

升級 Contour 延伸

如果已部署現有的 Contour 延伸,可以將其升級至最新版本。
  1. 匯出 Contour configmap 並將其儲存為備份。
    kubectl get configmap contour -n tanzu-system-ingress -o 'go-template={{ index .data "contour.yaml" }}' > contour-configmap.yaml
  2. 刪除現有的 Contour 部署。請參閱刪除 Contour 延伸。
  3. 部署最新的 Contour 延伸。請參閱部署 Contour 延伸

設定 Contour 延伸。

Contour 入口控制器組態值於 /extensions/ingress/contour/vsphere/contour-data-values.yaml 中設定。
表 1. Contour 入口組態參數
參數 說明 類型 預設值
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

v1.17.3_vmware.1

備註: 由於 CVE,請勿使用 Envoy 映像 v1.16.2_vmware.1。如需詳細資訊,請參閱 版本說明
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