安裝 Contour 以用於入口控制

本主題說明如何將 Contour 部署到 Tanzu Kubernetes Grid 中的工作負載叢集。

Contour 是使用 Envoy Edge 和服務 Proxy 的 Kubernetes 輸入控制器。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. 如果叢集沒有安裝 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) 清單。
  4. 在叢集中安裝 cert-manager (如果尚未安裝)。如需相關指示,請參閱安裝 cert-manager 以用於憑證管理

  5. 繼續下面的將 Contour 部署到工作負載叢集

將 Contour 部署到工作負載叢集

設定叢集後,必須先建立安裝 Contour 套件時使用的組態檔,然後再安裝套件。

  1. 擷取 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

  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. 如果您要將 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
      
  4. 如果要將 Contour 安裝到使用 NSX ALB 作為負載平衡器服務提供者的 vSphere 叢集,請修改 contour-default-values.yaml 檔以將 envoy.service.type 設為 LoadBalancer

    [...]
    envoy:
     service:
       type: LoadBalancer
    
  5. 如果要將 Contour 安裝到網際網路受限的 AWS 環境,請修改 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 套件預設部署兩個 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 設定為 yamljsontable。如需詳細資訊,請參閱《安裝和管理套件》中的套件

    例如:

    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-packagestanzu-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 上,負載平衡器的名稱類似 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. 從啟動機器中,透過將 curl 查詢傳送到 存取 Envoy 管理介面中列出的 Envoy 管理端點,從 Contour 部署中擷取資訊。例如,使用 /config_dump 端點擷取目前載入的設定:

    curl http://localhost:9001/config_dump
    

視覺化內部 Contour 定向非循環圖 (DAG)

在叢集中開始執行工作負載後,您可以用定向非循環圖 (DAG) 的形式,將 Contour 公開的流量資訊視覺化。

  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 Contour 組態檔的 YAML 內容。如需詳細資訊,請參閱 Contour 說明文件中的組態檔
contour.replicas 2 要有多少個 Contour 網繭複本。
contour.useProxyProtocol false 是否為所有 Envoy 接聽程式啟用 PROXY 通訊協定。
contour.logLevel info Contour 記錄層級。有效值為 infodebug
contour.pspNames vmware-system-restricted 要套用至 Contour 網繭的網繭安全性原則 (PSP) (逗號分隔清單)。
envoy.service.type 要為 Envoy 佈建的 Kubernetes 服務類型。有效值為 LoadBalancerNodePortClusterIP。如果未指定,則 vsphere 會使用 NodePort 服務,其他所有目標平台會使用 LoadBalancer
envoy.service.externalTrafficPolicy Local Envoy 服務的外部流量原則。有效值為 LocalCluster
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 負載平衡器類型。有效值為 classicnlb。如果不使用 aws,則會忽略此值。
envoy.hostPorts.enable false 是否為 Envoy 網繭啟用主機連接埠。如果為 false,將忽略 envoy.hostPorts.httpenvoy.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 要套用至 Envoy 網繭的網繭安全性原則 (PSP) (逗號分隔清單)。
infrastructure_provider vsphere 底層目標平台。有效值為 vsphereawsazure
loadBalancerIP Envoy 服務所需的負載平衡器 IP。如果 envoy.service.type 未設定為 LoadBalancer,則會忽略此設定
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 套用變更可能需要長達五分鐘的時間。

    如需 tanzu package installed update 命令的詳細資訊,請參閱安裝和管理套件中的更新套件。您可以使用此命令更新已安裝的套件版本或組態。

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