您可以為使用 v1alpha3 API 佈建的 TKG 叢集自訂 TKG 服務組態,包括容器網路介面 (CNI)、Proxy 伺服器和 TLS 憑證。

關於自訂 TkgServiceConfiguration

您可以透過編輯 TkgServiceConfiguration 來為 Tanzu Kubernetes 叢集設定全域設定。透過此組態可以設定預設 CNI,新增全域 Proxy 伺服器以及新增一或多個受信任的 TLS 憑證。

注意: 自訂 TkgServiceConfiguration 是一項全域作業。對 TkgServiceConfiguration 物件進行的任何變更適用於該服務所佈建的所有 TKG 叢集。如果以手動方式或透過升級起始輪流更新,則叢集將透過變更的服務規格進行更新。
備註: TkgServiceConfiguration 自訂適用於使用 v1alpha3 API 佈建的 Tanzu Kubernetes 叢集。它不適用於使用 v1beta1 API 佈建的叢集。

TkgServiceConfiguration 規格

TkgServiceConfiguration 規格提供了用於設定 Tanzu Kubernetes Grid 執行個體的欄位。
重要: 有效金鑰名稱只能包含英數字元、破折號 (如 key-name)、底線 (如 KEY_NAME) 或點 (如 key.name)。不能在金鑰名稱中使用空格。
apiVersion: run.tanzu.vmware.com/v1alpha3
kind: TkgServiceConfiguration
metadata:
  name: tkg-service-configuration-spec
spec:
  defaultCNI: string
  proxy:
    httpProxy: string
    httpsProxy: string
    noProxy: [string]
  trust:
    additionalTrustedCAs:
      - name: string
        data: string
  defaultNodeDrainTimeout: time

標註的 TkgServiceConfiguration 規格

下列 YAML 列出並說明了每個 TkgServiceConfiguration 規格參數的可設定欄位。
apiVersion: run.tanzu.vmware.com/v1alpha3
kind: TkgServiceConfiguration
#valid config key must consist of alphanumeric characters, '-', '_' or '.'
metadata:
  name: tkg-service-configuration-spec
spec:
  #defaultCNI is the default CNI for all Tanzu Kubernetes 
  #clusters to use unless overridden on a per-cluster basis 
  #supported values are antrea, calico, antrea-nsx-routed
  #defaults to antrea
  defaultCNI: string
  #proxy configures a proxy server to be used inside all 
  #clusters provisioned by this TKGS instance
  #if implemented all fields are required
  #if omitted no proxy is configured 
  proxy:
    #httpProxy is the proxy URI for HTTP connections 
    #to endpionts outside the clusters
    #takes the form http://<user>:<pwd>@<ip>:<port>
    httpProxy: string
    #httpsProxy is the proxy URI for HTTPS connections 
    #to endpoints outside the clusters
    #takes the frorm http://<user>:<pwd>@<ip>:<port>
    httpsProxy: string
    #noProxy is the list of destination domain names, domains, 
    #IP addresses, and other network CIDRs to exclude from proxying
    #must include from Workload Network: [Namespace Netowrk, Ingress, Egress]
    noProxy: [string]
  #trust configures additional trusted certificates 
  #for the clusters provisioned by this TKGS instance
  #if omitted no additional certificate is configured
  trust: 
    #additionalTrustedCAs are additional trusted certificates 
    #can be additional CAs or end certificates
    additionalTrustedCAs:
      #name is the name of the additional trusted certificate
      #must match the name used in the filename
      - name: string
        #data holds the contents of the additional trusted cert 
        #PEM Public Certificate data encoded as a base64 string
        data: string
  #defaultNodeDrainTimeout is the total amount of time the
  #controller spends draining a node; default is undefined
  #which is the value of 0, meaning the node is drained 
  #without any time limitations; note that `nodeDrainTimeout` 
  #is different from `kubectl drain --timeout`
  defaultNodeDrainTimeout: time
圖 1. 所需的 noProxy 值
所需的 noProxy 值
備註: 如果在 TkgServiceConfiguration 上設定了全域 Proxy,該 Proxy 資訊將在初始部署該叢集後散佈到叢集資訊清單。只有在建立叢集時不存在 Proxy 組態欄位的情況下,全域 Proxy 組態才會新增至叢集資訊清單。換句話說,每個叢集的組態優先,而且將覆寫全域 Proxy 組態。

TkgServiceConfiguration 規格範例

下列 YAML 列出並說明了每個 TkgServiceConfiguration 規格參數的可設定欄位。

apiVersion: run.tanzu.vmware.com/v1alpha3
kind: TkgServiceConfiguration
metadata:
  name: tkgserviceconfiguration_example
spec:
  defaultCNI: calico
  proxy:
    #supported format is `http://<user>:<pwd>@<ip>:<port>`
    httpProxy: http://admin:[email protected]:80
    httpsProxy: http://admin:[email protected]:80
    #noProxy vaulues are from Workload Network: [Namespace Network, Ingress, Egress]
    noProxy: [10.246.0.0/16,192.168.144.0/20,192.168.128.0/20]
  trust: 
    additionalTrustedCAs:
      #name is the name of the public cert
      - name: CompanyInternalCA-1
      #data is base64-encoded string of a PEM encoded public cert
        data: LS0tLS1C...LS0tCg==
        #where "..." is the middle section of the long base64 string
      - name: CompanyInternalCA-2
        data: MTLtMT1C...MT0tPg==        
  defaultNodeDrainTimeout: 0

編輯 TkgServiceConfiguration

請參閱以下程序編輯 TkgServiceConfiguration 規格。
  1. 設定 Kubectl 編輯。請參閱為 Kubectl 設定文字編輯器
  2. 使用 主管 進行驗證。
    kubectl vsphere login --server=SVC-IP-ADDRESS --vsphere-username USERNAME
  3. 將內容切換為目標 vSphere 命名空間
    kubectl config use-context vSphere-Namespace
  4. 取得 TkgServiceConfiguration 規格。
    kubectl get tkgserviceconfigurations
  5. 載入以編輯 TkgServiceConfiguration 規格。
    kubectl edit tkgserviceconfigurations tkg-service-configuration

    系統會在 KUBE_EDITOR 或 EDITOR 環境變數所定義的預設文字編輯器中開啟 tkg-service-configuration 規格。

  6. 根據您的需求編輯 TkgServiceConfiguration
  7. 若要套用變更,請在文字編輯器中儲存該檔案。若要取消,請關閉編輯器而無需儲存。

    當您在文字編輯器中儲存變更時,kubectl 會更新 tkg-service-configuration 服務規格。

  8. 驗證 TkgServiceConfiguration 規格是否已更新。
    kubectl get tkgserviceconfigurations

將全域組態變更散佈到現有叢集

TkgServiceConfiguration 中的全域層級進行的設定可能不會自動散佈到現有叢集。例如,如果您對 TkgServiceConfiguration 中的 proxytrust 設定進行變更,則此類變更可能不會影響已佈建的叢集。

若要手動將全域變更散佈到現有叢集,則必須修補 Tanzu Kubernetes 叢集,使叢集繼承對 TkgServiceConfiguration 所做的變更。

例如:
kubectl patch tkc <CLUSTER_NAME> -n <NAMESPACE> --type merge -p "{\"spec\":{\"settings\":{\"network\":{\"proxy\": null}}}}"
kubectl patch tkc <CLUSTER_NAME> -n <NAMESPACE> --type merge -p "{\"spec\":{\"settings\":{\"network\":{\"trust\": null}}}}"