コンテナ ネットワーク インターフェイス (CNI)、プロキシ サーバ、TLS 証明書などの主要な機能のグローバル設定を使用して、Tanzu Kubernetes Grid サービス をカスタマイズできます。グローバル機能とクラスタ単位の機能を実装する場合は、トレードオフと考慮事項に注意してください。

TkgServiceConfiguration v1alpha2 仕様

TkgServiceConfiguration 仕様は、 Tanzu Kubernetes Grid サービス インスタンスを構成するためのフィールドを提供します。
apiVersion: run.tanzu.vmware.com/v1alpha2
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
注意: Tanzu Kubernetes Grid サービス の構成は、グローバルに行われます。 TkgServiceConfiguration 仕様に対して行った変更は、そのサービスによってプロビジョニングされたすべての Tanzu Kubernetes クラスタに適用されます。ローリング アップデートが手動またはアップグレードによって開始された場合は、変更されたサービス仕様によってクラスタが更新されます。

注釈付きの TkgServiceConfiguration v1alpha2 仕様

次の YAML は、 TkgServiceConfiguration 仕様の各パラメータについて、構成可能なフィールドを示し、説明したものです。例については、 Tanzu Kubernetes Grid サービス v1alpha1 API の構成の例を参照してください。
apiVersion: run.tanzu.vmware.com/v1alpha2
kind: TkgServiceConfiguration
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 Supervisor Cluster Pod, Egress, Ingress CIDRs
    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

プロキシ サーバの構成要件

構成されているプロキシ サーバは、クラスタによって送信 HTTP および HTTPS トラフィックに使用されます。 Tanzu Kubernetes クラスタのプロキシ サーバを構成するには、次の要件に留意してください。
  • 必要な proxy パラメータは httpProxyhttpsProxy、および noProxy です。proxy スタンザを追加する場合、3 つのフィールドはすべて必須です。
  • HTTP を使用してプロキシ サーバに接続できます。HTTPS 接続はサポートされていません。
  • 必要な spec.proxy.noProxy 値は、[ワークロード ネットワーク] から取得します。[名前空間ネットワーク](旧称はポッドの CIDR)、[Ingress](旧称は入力方向 CIDR)、および [Egress](旧称は出力方向 CIDR)を noProxy フィールドに含めてプロキシにすることはできません。次のサンプル イメージを参照してください。
  • noProxy フィールドにサービスの CIDR を含める必要はありません。Tanzu Kubernetes クラスタは、このサブネットと連携しません。
  • noProxy フィールドに Tanzu Kubernetes クラスタ仕様の network.services.cidrBlocks 値および network.pods.cidrBlocks 値を含める必要はありません。これらのサブネットは自動的にプロキシされません。
  • noProxy フィールドに localhost および 127.0.0.1 を含める必要はありません。エンドポイントは自動的にプロキシされません。

[ワークロード ネットワーク] 設定ウィンドウ。[名前空間ネットワーク]、[Ingress]、[Egress] の各フィールドが強調表示されています。

[ワークロード ネットワーク] 設定ウィンドウ。[ポッド CIDR]、[Ingress CIDR]、[Egress CIDR] が強調表示されています。

グローバル構成オプションとクラスタ単位の構成オプションの使い分け

TkgServiceConfiguration は、Tanzu Kubernetes Grid サービス インスタンスによってプロビジョニングされているすべての Tanzu Kubernetes クラスタに影響するグローバルな仕様です。

TkgServiceConfiguration 仕様を編集する前に、グローバル構成よりも、クラスタ単位の代替方法のほうが使用事例に適合する可能性について確認してください。
表 1. グローバル構成オプションとクラスタ単位の構成オプション
設定 グローバル オプション クラスタ単位のオプション
デフォルトの CNI TkgServiceConfiguration 仕様を編集します。Tanzu Kubernetes Grid サービス v1alpha1 API の構成の例を参照してください。 クラスタ仕様で CNI を指定します。たとえば、デフォルトの CNI は Antrea です。Calico を使用するには、クラスタの YAML 内で指定します。Tanzu Kubernetes Grid サービス v1alpha1 API を使用した Tanzu Kubernetes クラスタのプロビジョニングの例を参照してください
プロキシ サーバ TkgServiceConfiguration 仕様を編集します。Tanzu Kubernetes Grid サービス v1alpha1 API の構成の例を参照してください。 クラスタ仕様にプロキシ サーバ構成パラメータを含めます。Tanzu Kubernetes Grid サービス v1alpha1 API を使用した Tanzu Kubernetes クラスタのプロビジョニングの例を参照してください。
証明書の信頼 TkgServiceConfiguration 仕様を編集します。外部コンテナ レジストリと証明書ベース プロキシ構成の 2 つの使用事例があります。Tanzu Kubernetes Grid サービス v1alpha1 API の構成の例を参照してください はい。カスタム証明書をクラスタ単位で含めることも、クラスタ仕様でグローバルに設定された trust 設定をオーバーライドすることもできます。Tanzu Kubernetes Grid サービス v1alpha1 API を使用した Tanzu Kubernetes クラスタのプロビジョニングの例を参照してください。
注: TkgServiceConfiguration でグローバル プロキシが構成されている場合、そのプロキシ情報は、クラスタの初期デプロイ後にクラスタ マニフェストに伝達されます。グローバル プロキシ構成は、クラスタの作成時にプロキシ構成フィールドがない場合にのみ、クラスタ マニフェストに追加されます。つまり、クラスタごとの構成が優先されるため、グローバル プロキシ構成は上書きされます。詳細については、『 Tanzu Kubernetes Grid サービス v1alpha1 API の構成パラメータ』を参照してください。

TkgServiceConfiguration 仕様を編集する前に、設定をグローバル レベルで適用する場合の影響を確認してください。

フィールド 適用 追加/変更した場合の既存のクラスタへの影響 クラスタ作成時のクラスタ単位のオーバーライド クラスタ更新時のクラスタ単位のオーバーライド
defaultCNI グローバル なし 可能。クラスタ作成時にグローバル設定をオーバーライドできます 不可能。既存のクラスタの CNI は変更できません。クラスタ作成時にグローバルに設定されたデフォルトの CNI を使用した場合は、変更できません
proxy グローバル なし 可能。クラスタ作成時にグローバル設定をオーバーライドできます 可能。U2+ を使用している場合は、クラスタ更新時にグローバル設定をオーバーライドできます
trust グローバル なし 可能。クラスタ作成時にグローバル設定をオーバーライドできます 可能。U2+ を使用している場合は、クラスタ更新時にグローバル設定をオーバーライドできます

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

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}}}}"