カスタム ClusterClass に基づいて TKG クラスタをプロビジョニングするには、次の手順を参照してください。これらの手順は、vSphere 8 U1 環境に固有であることに注意してください。
前提条件
カスタム ClusterClass に基づいて TKG クラスタをプロビジョニングする手順は、vSphere 8 U1 リリース以降で使用できます。vSphere 8 U2 を使用している場合は、「v1beta1 の例:カスタム ClusterClass に基づくクラスタ(vSphere 8 U2 以降のワークフロー)」を参照してください。
- vSphere 8 U1 環境
- ワークロード管理が有効
- スーパーバイザー 構成済み
- vSphere 向け Kubernetes CLI Tools がインストールされている Ubuntu クライアント
パート 1:カスタム ClusterClass の作成
tanzukubernetescluster
という名前のデフォルトの ClusterClass のクローンを作成することで、カスタム ClusterClass を作成します。
- custom-ns という名前の vSphere 名前空間 を作成します。
- スーパーバイザー にログインします。
- custom-ns という名前の vSphere 名前空間 にコンテキストを切り替えます。
- デフォルトの ClusterClass を取得します。
kubectl get clusterclass tanzukubernetescluster -o json
- デフォルトの ClusterClass のクローンを作成することで、custom-cc という名前のカスタム ClusterClass を作成します。
kubectl get clusterclass tanzukubernetescluster -o json | jq '.metadata.name="custom-cc"' | kubectl apply -f -
予期される結果:clusterclass.cluster.x-k8s.io/custom-cc created
- カスタム ClusterClass を取得します。
kubectl get clusterclass custom-cc -o json
必要に応じて、 を使用してカスタム ClusterClass を表示できます。
kubectl get clusterclass custom-cc -o json | less
注: コマンド「q」を発行して終了を減らします。
パート 2:TKG クラスタをプロビジョニングするために必要な スーパーバイザー オブジェクトの作成
- 自己署名拡張機能証明書の発行者を作成します。
#self-signed-extensions-issuer.yaml apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: self-signed-extensions-issuer spec: selfSigned: {}
kubectl apply -f self-signed-extensions-issuer.yaml -n custom-ns
予期される結果:issuer.cert-manager.io/self-signed-extensions-issuer created
- 拡張機能 CA 証明書のシークレットを作成します。
#extensions-ca-certificate.yaml apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: ccc-cluster-extensions-ca spec: commonName: kubernetes-extensions duration: 87600h0m0s isCA: true issuerRef: kind: Issuer name: self-signed-extensions-issuer secretName: ccc-cluster-extensions-ca usages: - digital signature - cert sign - crl sign
kubectl apply -f extensions-ca-certificate.yaml -n custom-ns
予期される結果:certificate.cert-manager.io/ccc-cluster-extensions-ca created
- 拡張機能 CA 証明書の発行者を作成します。
#extensions-ca-issuer.yaml apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: ccc-cluster-extensions-ca-issuer spec: ca: secretName: ccc-cluster-extensions-ca
kubectl apply -f extensions-ca-issuer.yaml -n custom-ns
予期される結果:issuer.cert-manager.io/ccc-cluster-extensions-ca-issuer created
- 認証サービス証明書のシークレットを作成します。
#auth-svc-cert.yaml apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: ccc-cluster-auth-svc-cert spec: commonName: authsvc dnsNames: - authsvc - localhost - 127.0.0.1 duration: 87600h0m0s issuerRef: kind: Issuer name: ccc-cluster-extensions-ca-issuer secretName: ccc-cluster-auth-svc-cert usages: - server auth - digital signature
kubectl apply -f auth-svc-cert.yaml -n custom-ns
予期される結果:certificate.cert-manager.io/ccc-cluster-auth-svc-cert created
- 発行者と証明書の作成を確認します。
kubectl get issuers -n custom-ns NAME READY AGE ccc-cluster-extensions-ca-issuer True 2m57s self-signed-extensions-issuer True 14m
kubectl get certs -n custom-ns NAME READY SECRET AGE ccc-cluster-auth-svc-cert True ccc-cluster-auth-svc-cert 34s ccc-cluster-extensions-ca True ccc-cluster-extensions-ca 5m
パート 3:カスタム ClusterClass に基づく TKG クラスタの作成
変数 | 説明 |
---|---|
vmClass | TKG サービス クラスタでの仮想マシン クラスの使用を参照してください。 |
storageClass | vSphere 名前空間 のパーシステント ストレージの構成を参照してください。 |
ntp | スーパーバイザー を有効にするために使用される NTP サーバ。 |
extensionCert | 前のセクションで「拡張機能 CA 証明書」が作成された後に自動生成されます。 |
clusterEncryptionConfigYaml | 以下のセクションでは、このファイルを取得するプロセスについて説明します。 |
- 暗号化シークレットを作成します。
#encryption-secret.yaml apiVersion: v1 data: key: all3dzZpODFmRmh6MVlJbUtQQktuN2ViQzREbDBQRHlxVk8yYXRxTW9QQT0= kind: Secret metadata: name: ccc-cluster-encryption type: Opaque
kubectl apply -f encryption-secret.yaml -n custom-ns
予期される結果:secret/ccc-cluster-encryption created
- スーパーバイザー から NTP サーバを収集します。
kubectl -n vmware-system-vmop get configmap vmoperator-network-config -o jsonpath={.data.ntpservers}
cluster-with-ccc.yaml
マニフェストを作成してクラスタをプロビジョニングします。#cluster-with-ccc.yaml apiVersion: cluster.x-k8s.io/v1beta1 kind: Cluster metadata: name: ccc-cluster spec: clusterNetwork: pods: cidrBlocks: - 193.0.0.0/16 serviceDomain: managedcluster1.local services: cidrBlocks: - 198.201.0.0/16 topology: class: custom-cc version: v1.26.5---vmware.2-fips.1-tkg.1 controlPlane: metadata: {} replicas: 3 workers: machineDeployments: - class: node-pool metadata: { } name: node-pool-workers replicas: 3 variables: - name: vmClass value: guaranteed-medium - name: storageClass value: tkg-storage-profile - name: ntp value: time.acme.com - name: extensionCert value: contentSecret: key: tls.crt name: ccc-cluster-extensions-ca - name: clusterEncryptionConfigYaml value: LS0tCm...Ht9Cg==
クラスタ マニフェストで、次のフィールドを確認または更新します。パラメータ 説明 metadata.name
v1beta1 クラスタの名前。 spec.topology.class
カスタム ClusterClass の名前。 spec.topology.version
Tanzu Kubernetes リリース のバージョン spec.topology.variables.storageClass.value
クラスタがプロビジョニングされる vSphere 名前空間 に適用されている StoragePolicy spec.topology.variables.ntp.value
NTP サーバのアドレス spec.topology.variables.extensionCert.value.contentSecret.name
確認 spec.topology.variables.clusterEncryptionConfigYaml.value
ClusterEncryptionConfig シークレットの data.key
の値を入力します。- カスタム ClusterClass に基づいてクラスタを作成します。
kubectl apply -f cluster-with-ccc.yaml -n custom-ns
予期される結果:cluster.cluster.x-k8s.io/ccc-cluster created
vSphere Client を使用して、クラスタが作成されていることを確認します。
- TKG クラスタにログインします。
kubectl vsphere login --server=xxx.xxx.xxx.xxx --vsphere-username [email protected] --tanzu-kubernetes-cluster-name ccc-cluster --tanzu-kubernetes-cluster-namespace custom-ns
パート 4:TKG クラスタを管理するために必要な スーパーバイザー オブジェクトの作成
パラメータ | 値 |
---|---|
認証 | 認証値を収集して values.yaml という名前のファイルに更新する必要があります。 |
Base64 エンコード | values.yaml ファイルは base64 文字列にエンコードされます。 |
guest-cluster-auth-service-data-values.yaml | この文字列は、ファイルを適用する前に、 CCC_config_yamls.tar.gz からダウンロードした guest-cluster-auth-service-data-values.yaml ファイルに追加されます。 |
GuestClusterAuthSvcDataValues シークレット | 最後に、ゲスト クラスタ ブートストラップを変更して、新しく作成された GuestClusterAuthSvcDataValues シークレットを参照する必要があります。 |
- クラスタがプロビジョニングされている vSphere 名前空間 にコンテキストを切り替えます。
kubectl config use-context custom-ns
authServicePublicKeys
の値を取得します。kubectl -n vmware-system-capw get configmap vc-public-keys -o jsonpath="{.data.vsphere\.local\.json}"
結果をvalues.yaml
という名前のテキスト ファイルにコピーします。authServicePublicKeys: '{"issuer_url":"https://...SShrDw=="]}]}}'
- クラスタ UID を取得して、
authServicePublicKeys
を更新します。kubectl get cluster -n custom-ns ccc-cluster -o yaml | grep uid
values.yaml
ファイルのauthServicePublicKeys
セクションで、クラスタ UID を「client_id
」の値に追加します。構文:
vmware-tes:vc:vns:k8s:clusterUID
例:vmware-tes:vc:vns:k8s:7d95b50b-4fd4-4642-82a3-5dbfe87f499c
- 証明書の値を取得します(ccc-cluster を選択したクラスタ名に置き換えます)。
kubectl -n custom-ns get secret ccc-cluster-auth-svc-cert -o jsonpath="{.data.tls\.crt}" | base64 -d
- 証明書を
values.yaml
に追加します。authServicePublicKeys
セクションの下に証明書の内容を追加します。注: 障害を回避するには、証明書を 4 つのスペースでインデントする必要があります。例:authServicePublicKeys: '{"issuer_url":"https://...SShrDw=="]}]}}' ceritificate: | -----BEGIN CERTIFICATE----- MIIDPTCCAiWgAwIBAgIQMibGSjeuJelQoPxCof/+xzANBgkqhkiG9w0BAQsFADAg ... sESk/RDTB1UAvi8PD3zcbEKZuRxuo4IAJqFFbAabwULhjUo0UwT+dIJo1gLf5/ep VoIRJS7j6VT98WbKyZp5B4I= -----END CERTIFICATE-----
- privateKey の値を取得します。
kubectl -n custom-ns get secret ccc-cluster-auth-svc-cert -o jsonpath="{.data.tls\.key}"
values.yaml
ファイルを確認します。authServicePublicKeys: '{"issuer_url":"https://10.197.79.141/openidconnect/vsphere.local","client_id":"vmware-tes:vc:vns:k8s:7d95...499c",...SShrDw=="]}]}}' certificate: | -----BEGIN CERTIFICATE----- MIIDPTCCAiWgAwIBAgIQWQyXAQDRMhgrGre8ysVN0DANBgkqhkiG9w0BAQsFADAg ... uJSBP49sF0nKz5nf7w+BdYE= -----END CERTIFICATE----- privateKey: LS0tLS1CRUdJTi...VktLS0tLQo=
values.yaml
ファイルを base64 エンコードでハッシュ化して、guest-cluster-auth-service-data-values.yaml
ファイルの出力を収集します。base64 -i values.yaml -w 0
guest-cluster-auth-service-data-values.yaml
ファイルを作成します。シークレットのテンプレートを次に示します。apiVersion: v1 data: values.yaml: YXV0a...ExRbz0K kind: Secret metadata: labels: tkg.tanzu.vmware.com/cluster-name: ccc-cluster tkg.tanzu.vmware.com/package-name: guest-cluster-auth-service.tanzu.vmware.com.1.3.0+tkg.2-vmware name: ccc-cluster-guest-cluster-auth-service-data-values type: Opaque
次の表を参照して、想定されるシークレット値を入力します。パラメータ 値 data.values.yaml
values.yaml
の base64 エンコード文字列metadata.labels.cluster-name
クラスタの名前(例:
ccc-cluster
)metadata.labels.package-name
guest-cluster-auth-service.tanzu.vmware.com.version
この値を取得するには、
kubectl get tkr v1.26.5---vmware.2-fips.1-tkg.1 -o yaml
コマンドを実行します使用しているバージョンに応じて TKR のバージョンを変更します。
metadata.name
クラスタの名前(例:
ccc-cluster
)guest-cluster-auth-service-data-values.yaml
シークレットを作成します。kubectl apply -f guest-cluster-auth-service-data-values.yaml -n custom-ns
- クラスタ ブートストラップを編集してシークレットを参照します。
kubectl edit clusterbootstrap ccc-cluster -n custom-ns
guest-cluster-auth-service.tanzu.vmware.com.version:
という行の下に次の行を追加します。valuesFrom: secretRef: ccc-cluster-guest-cluster-auth-service-data-values
例:spec: additionalPackages: - refName: guest-cluster-auth-service.tanzu.vmware.com.1.3.0+tkg.2-vmware valuesFrom: secretRef: ccc-cluster-guest-cluster-auth-service-data-values
- 保存して終了し、clusterbootstrap の変更を適用します。
パート 5:ポッド セキュリティの構成
TKR バージョン 1.25 以降を使用している場合は、custom-ns
という名前の vSphere 名前空間 のポッド セキュリティを構成します。TKR 1.25 以降の PSA の構成を参照してください。
- TKG クラスタ kubeconfig を収集します。
kubectl -n custom-ns get secret ccc-cluster-kubeconfig -o jsonpath="{.data.value}" | base64 -d > ccc-cluster-kubeconfig
-
psp.yaml
ファイルを作成します。apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: name: tanzu-system-kapp-ctrl-restricted spec: privileged: false allowPrivilegeEscalation: false requiredDropCapabilities: - ALL volumes: - configMap - emptyDir - projected - secret - downwardAPI - persistentVolumeClaim hostNetwork: false hostIPC: false hostPID: false runAsUser: rule: MustRunAsNonRoot seLinux: rule: RunAsAny supplementalGroups: rule: MustRunAs ranges: - min: 1 max: 65535 fsGroup: rule: MustRunAs ranges: - min: 1 max: 65535 readOnlyRootFilesystem: false
- ポッドのセキュリティ ポリシーを適用します。
KUBECONFIG=ccc-cluster-kubeconfig kubectl apply -f psp.yaml
- TKG クラスタにログインします。
kubectl vsphere login --server=10.197.154.66 --vsphere-username [email protected] --insecure-skip-tls-verify --tanzu-kubernetes-cluster-name ccc-cluster --tanzu-kubernetes-cluster-namespace custom-ns
- 名前空間を一覧表示します。
KUBECONFIG=ccc-cluster-kubeconfig kubectl get ns -A
NAME STATUS AGE default Active 13d kube-node-lease Active 13d kube-public Active 13d kube-system Active 13d secretgen-controller Active 13d tkg-system Active 13d vmware-system-antrea Active 13d vmware-system-cloud-provider Active 13d vmware-system-csi Active 13d vmware-system-tkg Active 13d
パート 6:vSphere SSO ロールとカスタム TKG クラスタの同期
開発者がクラスタ ワークロードを管理するには、vSphere 名前空間 に組み込まれた vCenter Single Sign-On ユーザーのロールバインドを スーパーバイザー から TKG クラスタに同期する必要があります。
sync-cluster-edit-rolebinding.yaml
ファイルを作成してから、KUBECONFIG を使用して TKG クラスタに適用する必要があります。
- スーパーバイザー から既存のロールバインドを収集します。
kubectl get rolebinding -n custom-ns -o yaml
- ロールバインド オブジェクトの返されたリストから、「編集」と等しい
roleRef.name
を持つオブジェクトを特定します。例:apiVersion: v1 items: - apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: creationTimestamp: "2023-08-25T18:44:45Z" name: ccc-cluster-8lr5x-ccm namespace: custom-ns ownerReferences: - apiVersion: vmware.infrastructure.cluster.x-k8s.io/v1beta1 blockOwnerDeletion: true controller: true kind: ProviderServiceAccount name: ccc-cluster-8lr5x-ccm uid: b5fb9f01-9a55-4f69-8673-fadc49012994 resourceVersion: "108766602" uid: eb93efd4-ae56-4d9f-a745-d2782885e7fb roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: ccc-cluster-8lr5x-ccm subjects: - kind: ServiceAccount name: ccc-cluster-8lr5x-ccm namespace: custom-ns - apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: creationTimestamp: "2023-08-25T18:44:45Z" name: ccc-cluster-8lr5x-pvcsi namespace: custom-ns ownerReferences: - apiVersion: vmware.infrastructure.cluster.x-k8s.io/v1beta1 blockOwnerDeletion: true controller: true kind: ProviderServiceAccount name: ccc-cluster-8lr5x-pvcsi uid: d9342f8f-13d2-496d-93cb-b24edfacb5c1 resourceVersion: "108766608" uid: fd1820c7-7993-4299-abb7-bb67fb17f1fd roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: ccc-cluster-8lr5x-pvcsi subjects: - kind: ServiceAccount name: ccc-cluster-8lr5x-pvcsi namespace: custom-ns - apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: creationTimestamp: "2023-08-25T16:58:06Z" labels: managedBy: vSphere name: wcp:custom-ns:group:vsphere.local:administrators namespace: custom-ns resourceVersion: "108714148" uid: d74a98c7-e7da-4d71-b1d5-deb60492d429 roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: edit subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: sso:[email protected] - apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: creationTimestamp: "2023-08-25T16:58:21Z" labels: managedBy: vSphere name: wcp:custom-ns:user:vsphere.local:administrator namespace: custom-ns resourceVersion: "108714283" uid: 07f7dbba-2670-4100-a59b-c09e4b2edd6b roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: edit subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: sso:[email protected] kind: List metadata: resourceVersion: ""
sync-cluster-edit-rolebinding.yaml
という名前のファイルを作成して、デフォルトの [email protected] 以外のロールバインドを追加します。例:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: labels: run.tanzu.vmware.com/vmware-system-synced-from-supervisor: "yes" name: vmware-system-auth-sync-wcp:custom-ns:group:vsphere.local:administrators roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: sso:[email protected] apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: labels: run.tanzu.vmware.com/vmware-system-synced-from-supervisor: "yes" name: vmware-system-auth-sync-wcp:custom-ns:group:SSODOMAIN.COM:testuser roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: sso:[email protected]
注:metadata.name
フィールドでは、すべてのユーザーのユーザー ロールの先頭にvmware-system-auth-sync-
が付加されます。metadata.name エントリと subjects.name エントリには、デフォルト以外のすべてのロールの変更が必要です。- sync-cluster-edit-rolebinding.yaml 構成を適用して、ロールバインドを同期します。
KUBECONFIG=ccc-cluster-kubeconfig kubectl apply -f sync-cluster-edit-rolebinding.yaml