v1alpha3 API を使用してプロビジョニングされる TKG クラスタ向けに、コンテナ ネットワーク インターフェイス (CNI)、プロキシ サーバ、TLS 証明書などの TKG サービス構成をカスタマイズできます。

TkgServiceConfiguration のカスタマイズについて

TkgServiceConfiguration を編集して、Tanzu Kubernetes クラスタ向けにグローバル設定を構成できます。この構成により、デフォルト CNI の設定、グローバル プロキシ サーバの追加、1 つ以上の信頼された 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 でグローバル プロキシが構成されている場合、そのプロキシ情報は、クラスタの初期デプロイ後にクラスタ マニフェストに伝達されます。グローバル プロキシ構成は、クラスタの作成時にプロキシ構成フィールドがない場合にのみ、クラスタ マニフェストに追加されます。つまり、クラスタごとの構成が優先されるため、グローバル プロキシ構成は上書きされます。

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

    tkg-service-configuration 仕様が、KUBE_EDITOR または EDITOR 環境変数によって定義されたデフォルトのテキスト エディタで開かれます。

  6. 要件に応じて TkgServiceConfiguration を編集します。
  7. 変更を適用するには、テキスト エディタでこのファイルを保存します。キャンセルするには、保存せずにエディタを閉じます。

    テキスト エディタで変更を保存すると、kubectl によって tkg-service-configuration サービス仕様が更新されます。

  8. TkgServiceConfiguration 仕様が更新されていることを確認します。
    kubectl get tkgserviceconfigurations

既存のクラスタへのグローバル構成変更の伝達

TkgServiceConfiguration でグローバル レベルの設定を行っても、既存のクラスタにはその設定が自動的に伝達されない可能性があります。たとえば、TkgServiceConfigurationproxytrust の設定を変更しても、すでにプロビジョニングされているクラスタには影響しない可能性があります。

既存のクラスタにグローバルな変更を手動で伝達するには、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}}}}"