Lesen Sie diese Anweisungen, um einen TKG-Cluster basierend auf einer benutzerdefinierten ClusterClass bereitzustellen. Beachten Sie, dass diese Anweisungen spezifisch für vSphere 8 U1-Umgebungen gelten.
Voraussetzungen
Das Verfahren für die Bereitstellung eines TKG-Clusters basierend auf einer benutzerdefinierten ClusterClass ist ab Version vSphere 8 U1 verfügbar. Wenn Sie vSphere 8 U2 verwenden, finden Sie weitere Informationen unter v1beta1-Beispiel: Cluster basierend auf einer benutzerdefinierten ClusterClass (vSphere 8 U2- und höherer Workflow).
- vSphere 8 U1-Umgebung
- Arbeitslastverwaltung aktiviert
- Supervisor konfiguriert
- Ubuntu-Client mit installierten Kubernetes-CLI-Tools für vSphere
Teil 1: Erstellen der benutzerdefinierten ClusterClass
tanzukubernetescluster
klonen.
- Erstellen Sie einen vSphere-Namespace mit dem Namen custom-ns.
- Melden Sie sich bei Supervisor an.
- Führen Sie einen Kontextwechsel zum vSphere-Namespace mit dem Namen custom-ns durch.
- Rufen Sie die standardmäßige ClusterClass ab.
kubectl get clusterclass tanzukubernetescluster -o json
- Erstellen Sie eine benutzerdefinierte ClusterClass mit dem Namen custom-cc, indem Sie die standardmäßige ClusterClass klonen.
kubectl get clusterclass tanzukubernetescluster -o json | jq '.metadata.name="custom-cc"' | kubectl apply -f -
Erwartetes Ergebnis:clusterclass.cluster.x-k8s.io/custom-cc created
- Rufen Sie die benutzerdefinierte ClusterClass ab.
kubectl get clusterclass custom-cc -o json
Bei Bedarf können Sie „less“ verwenden, um die benutzerdefinierte ClusterClass anzuzeigen.
kubectl get clusterclass custom-cc -o json | less
Hinweis: Führen Sie den Befehl „q“ aus, um „less“ zu beenden.
Teil 2: Erstellen erforderlicher Supervisor-Objekte für die Bereitstellung des TKG-Clusters
- Erstellen Sie den Aussteller für das selbstsignierte Erweiterungszertifikat.
#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
Erwartetes Ergebnis:issuer.cert-manager.io/self-signed-extensions-issuer created
- Erstellen Sie den geheimen Schlüssel für das CA-Zertifikat für Erweiterungen.
#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
Erwartetes Ergebnis:certificate.cert-manager.io/ccc-cluster-extensions-ca created
- Erstellen Sie den Aussteller für das CA-Zertifikat für Erweiterungen.
#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
Erwartetes Ergebnis:issuer.cert-manager.io/ccc-cluster-extensions-ca-issuer created
- Erstellen Sie den Geheimschlüssel für das Zertifikat des Authentifizierungsdiensts.
#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
Erwartetes Ergebnis:certificate.cert-manager.io/ccc-cluster-auth-svc-cert created
- Überprüfen Sie die Erstellung der Aussteller und Zertifikate.
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
Teil 3: Erstellen eines TKG-Clusters basierend auf der benutzerdefinierten ClusterClass
Variable | Beschreibung |
---|---|
vmClass | Weitere Informationen hierzu finden Sie unter Verwenden von VM-Klassen mit TKG-Dienstclustern. |
storageClass | Weitere Informationen hierzu finden Sie unter Konfigurieren eines dauerhaften Speichers für den vSphere-Namespace. |
ntp | NTP-Server, der zum Aktivieren von Supervisor verwendet wird. |
extensionCert | Wird automatisch generiert, nachdem das „Erweiterungs-CA-Zertifikat“ im vorherigen Abschnitt erstellt wurde. |
clusterEncryptionConfigYaml | Im Abschnitt unten wird der Vorgang zum Abrufen dieser Datei Schritt für Schritt erläutert. |
- Erstellen Sie den geheimen Verschlüsselungsschlüssel.
#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
Erwartetes Ergebnis:secret/ccc-cluster-encryption created
- Erfassen Sie den NTP-Server aus Supervisor.
kubectl -n vmware-system-vmop get configmap vmoperator-network-config -o jsonpath={.data.ntpservers}
- Erstellen Sie das
cluster-with-ccc.yaml
-Manifest, um den Cluster bereitzustellen.#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==
Überprüfen oder aktualisieren Sie im Cluster-Manifest die folgenden Felder:Parameter Beschreibung metadata.name
Name des v1beta1-Clusters. spec.topology.class
Name der benutzerdefinierten ClusterClass. spec.topology.version
Tanzu Kubernetes-Version-Version spec.topology.variables.storageClass.value
Speicherrichtlinie, die an den vSphere-Namespace angehängt ist, in dem der Cluster bereitgestellt wird spec.topology.variables.ntp.value
NTP-Serveradresse spec.topology.variables.extensionCert.value.contentSecret.name
Überprüfen spec.topology.variables.clusterEncryptionConfigYaml.value
Füllen Sie dieses Feld mit dem data.key
-Wert aus dem geheimen ClusterEncryptionConfig-Schlüssel auf. - Erstellen Sie den Cluster basierend auf der benutzerdefinierten ClusterClass.
kubectl apply -f cluster-with-ccc.yaml -n custom-ns
Erwartetes Ergebnis:cluster.cluster.x-k8s.io/ccc-cluster created
Stellen Sie mithilfe des vSphere Clients sicher, dass der Cluster erstellt wurde.
- Melden Sie sich beim TKG-Cluster an.
kubectl vsphere login --server=xxx.xxx.xxx.xxx --vsphere-username [email protected] --tanzu-kubernetes-cluster-name ccc-cluster --tanzu-kubernetes-cluster-namespace custom-ns
Teil 4: Erstellen erforderlicher Supervisor-Objekte zum Verwalten des TKG-Clusters
Parameter | Wert |
---|---|
Authentifizierung | Authentifizierungswerte müssen erfasst und in einer Datei mit dem Namen „values.yaml“ aktualisiert werden |
Base64-verschlüsselt | Die values.yaml-Datei wird in eine base64-Zeichenfolge codiert. |
guest-cluster-auth-service-data-values.yaml | Diese Zeichenfolge wird der guest-cluster-auth-service-data-values.yaml-Datei hinzugefügt, die vor der Anwendung der Datei aus CCC_config_yamls.tar.gz heruntergeladen wurde. |
Geheimer GuestClusterAuthSvcDataValues-Schlüssel | Schließlich muss das Gastcluster-Bootstrap so geändert werden, dass es auf den neu erstellten geheimen GuestClusterAuthSvcDataValues-Schlüssel verweist. |
- Wechseln Sie den Kontext zum vSphere-Namespace, in dem der Cluster bereitgestellt wird.
kubectl config use-context custom-ns
- Rufen Sie den Wert von
authServicePublicKeys
ab.kubectl -n vmware-system-capw get configmap vc-public-keys -o jsonpath="{.data.vsphere\.local\.json}"
Kopieren Sie das Ergebnis in eine Textdatei mit dem Namenvalues.yaml
.authServicePublicKeys: '{"issuer_url":"https://...SShrDw=="]}]}}'
- Rufen Sie die Cluster-UID ab, um
authServicePublicKeys
zu aktualisieren.kubectl get cluster -n custom-ns ccc-cluster -o yaml | grep uid
- Hängen Sie im Abschnitt
authServicePublicKeys
dervalues.yaml
-Datei die Cluster-UID an den Wert „client_id
“ an.Syntax:
vmware-tes:vc:vns:k8s:clusterUID
Beispiel:vmware-tes:vc:vns:k8s:7d95b50b-4fd4-4642-82a3-5dbfe87f499c
- Rufen Sie den Zertifikatswert ab (ersetzen Sie ccc-cluster durch den ausgewählten Clusternamen).
kubectl -n custom-ns get secret ccc-cluster-auth-svc-cert -o jsonpath="{.data.tls\.crt}" | base64 -d
- Fügen Sie das Zertifikat in der Datei
values.yaml
hinzu.Fügen Sie den Zertifikatsinhalt unterhalb des Abschnitts
authServicePublicKeys
hinzu.Hinweis: Das Zertifikat muss zur Vermeidung von Fehlern um 4 Leerzeichen eingerückt werden.Beispiel:authServicePublicKeys: '{"issuer_url":"https://...SShrDw=="]}]}}' ceritificate: | -----BEGIN CERTIFICATE----- MIIDPTCCAiWgAwIBAgIQMibGSjeuJelQoPxCof/+xzANBgkqhkiG9w0BAQsFADAg ... sESk/RDTB1UAvi8PD3zcbEKZuRxuo4IAJqFFbAabwULhjUo0UwT+dIJo1gLf5/ep VoIRJS7j6VT98WbKyZp5B4I= -----END CERTIFICATE-----
- Rufen Sie den privateKey-Wert ab.
kubectl -n custom-ns get secret ccc-cluster-auth-svc-cert -o jsonpath="{.data.tls\.key}"
- Überprüfen Sie Ihre
values.yaml
-Datei.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=
- Hashen Sie die
values.yaml
-Datei mit Base64-Codierung, um die Ausgabe für dieguest-cluster-auth-service-data-values.yaml
-Datei zu erfassen.base64 -i values.yaml -w 0
- Erstellen Sie die
guest-cluster-auth-service-data-values.yaml
-Datei.Nachstehend finden Sie eine Vorlage für den geheimen Schlüssel.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
Informationen zum Auffüllen der erwarteten Werte des geheimen Schlüssels finden Sie in der folgenden Tabelle.Parameter Wert data.values.yaml
Base64-codierte Zeichenfolge von
values.yaml
metadata.labels.cluster-name
Name des Clusters, wie z. B.
ccc-cluster
metadata.labels.package-name
guest-cluster-auth-service.tanzu.vmware.com.version
Führen Sie zum Abrufen dieses Werts den folgenden Befehl aus:
kubectl get tkr v1.26.5---vmware.2-fips.1-tkg.1 -o yaml
Ändern Sie die TKR-Version je nach der von Ihnen verwendeten Version
metadata.name
Name des Clusters, wie z. B.
ccc-cluster
- Erstellen Sie den geheimen Schlüssel
guest-cluster-auth-service-data-values.yaml
.kubectl apply -f guest-cluster-auth-service-data-values.yaml -n custom-ns
- Bearbeiten Sie das Cluster-Bootstrap so, dass es auf den geheimen Schlüssel verweist.
kubectl edit clusterbootstrap ccc-cluster -n custom-ns
- Fügen Sie die folgenden Zeilen unterhalb der Zeile
guest-cluster-auth-service.tanzu.vmware.com.version:
hinzu.valuesFrom: secretRef: ccc-cluster-guest-cluster-auth-service-data-values
Beispiel: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
- Speichern und beenden Sie, um die clusterbootstrap-Änderungen anzuwenden.
Teil 5: Konfigurieren der Pod-Sicherheit
Wenn Sie die TKR-Version 1.25 oder höhere Versionen verwenden, konfigurieren Sie die Pod-Sicherheit für den vSphere-Namespace mit dem Namen custom-ns
. Weitere Informationen hierzu finden Sie unter Konfigurieren von PSA für TKR 1.25 und höher.
- Erfassen Sie die kubeconfig des TKG-Clusters.
kubectl -n custom-ns get secret ccc-cluster-kubeconfig -o jsonpath="{.data.value}" | base64 -d > ccc-cluster-kubeconfig
- Erstellen Sie die
psp.yaml
-Datei.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
- Wenden Sie die Pod-Sicherheitsrichtlinie an.
KUBECONFIG=ccc-cluster-kubeconfig kubectl apply -f psp.yaml
- Melden Sie sich beim TKG-Cluster an.
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
- Listen Sie die Namespaces auf.
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
Teil 6: Synchronisieren vSphere SSO-Rollen mit dem benutzerdefinierten TKG-Cluster
Das RoleBinding für vCenter Single Sign-On-Benutzer, das in die vSphere-Namespaces integriert ist, muss aus Supervisor in den TKG-Cluster synchronisiert werden, damit Entwickler die Cluster-Arbeitslasten verwalten können.
sync-cluster-edit-rolebinding.yaml
und das anschließende Anwenden auf den TKG-Cluster mithilfe seiner KUBECONFIG.
- Erfassen Sie vorhandene RoleBindings aus Supervisor.
kubectl get rolebinding -n custom-ns -o yaml
- Identifizieren Sie in der zurückgegebenen Liste der RoleBinding-Objekte diejenigen, deren
roleRef.name
„edit“ lautet.Beispiel: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: ""
- Erstellen Sie eine Datei mit dem Namen
sync-cluster-edit-rolebinding.yaml
, um gegebenenfalls zusätzlich zu [email protected] vorliegende RoleBindings hinzuzufügen. Beispiel: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]
Hinweis: Im Feldmetadata.name
wird für alle Benutzer der Benutzerrollevmware-system-auth-sync-
vorangestellt. Die metadata.name- und subjects.name-Einträge müssen für alle nicht standardmäßigen Rollen geändert werden. - Wenden Sie die sync-cluster-edit-rolebinding.yaml-Konfiguration an, um Rollenbindungen zu synchronisieren.
KUBECONFIG=ccc-cluster-kubeconfig kubectl apply -f sync-cluster-edit-rolebinding.yaml