Geschätzte Dauer: 3 Stunden
Eigentümer der betriebsbereiten Komponente: MZKompetenzprofil: Bereitstellungsingenieur
26.1. Übersicht
Beim Bootstrapping von mehreren Zonen wird die globale Root-Steuerungsebene eingerichtet. Mit der ersten Zone in einem Universum wird die globale Steuerungsebene eingerichtet. Zusätzliche Zonen werden der globalen Steuerungsebene hinzugefügt. Das Einbinden einer globalen Steuerungsebene ist komplexer als das Einrichten der Steuerungsebene, da Vertrauen zwischen der globalen Steuerungsebene des Universums und der neuen Zone aufgebaut werden muss. Wenn Sie einer globalen Steuerungsebene beitreten, sind zwei Zonen beteiligt:
- Ankerzone: Eine Zone, die bereits Teil der globalen Steuerungsebene ist. Dies muss die Zone sein, deren GitLab-Instanz verwendet wird, um IaC-Änderungen (Infrastructure as Code) auf die globale API des Universums anzuwenden.
- Beitrittszone: Die Zone, die der globalen Steuerungsebene beitritt.
Sie haben die erste Zone des Universums in Initialize multi-zone (Multizone initialisieren) gebootstrapped. Diese Zone dient als Ankerzone, wenn andere Zonen dem Universum beitreten.
Wenn es bereits eine globale API im Universum gibt und Sie eine Zone booten, die dem Universum beitritt, führen Sie die folgenden Schritte aus.
26.2. Mehrere Zonen in Zonen, die einem Universum beitreten, bootstrappen
Prüfen Sie, ob Sie Bootstrapping für mehrere Zonen in der Ankerzone durchgeführt haben, bevor Sie fortfahren.
26.2.1. IO-Tool-Container starten
Aus Sicherheits- und Prüfbarkeitsgründen muss der Bootstrapping-Prozess für mehrere Zonen mit persönlichen Anmeldedaten für den Zugriff auf Kubernetes (nicht mit einer Administrator-Kubernetes-Konfiguration) und IaC für die Genehmigung durch mehrere Parteien von Autorisierungsanfragen für sensible Aktionen durchgeführt werden. Alle erforderlichen Tools zum Ausführen der Bootstrapping-Aktionen sind im IO-Tool-Container enthalten. Informationen zum Starten des Containers in der OIC-Umgebung finden Sie im Prozess „IO Tool Container Setup“ OOPS-P0065. Wenn eine Zone der globalen Steuerungsebene beitritt, sind Interaktionen mit zwei Zonen erforderlich. Eine davon (die Ankerzone) wird nicht unter Day-0-Bedingungen betrieben. Daher müssen Authentifizierungs- und Autorisierungsmaßnahmen auf Produktionsebene eingesetzt werden, um sicherzustellen, dass die Sicherheit der Ankerzone nicht beeinträchtigt wird.
26.2.2. GitLab-Repository initialisieren
Verwenden Sie Anmeldedaten des Identitätsanbieters (IdP), der in Infrastructure as Code einrichten konfiguriert ist, und folgen Sie dem OOPS-P0066-Prozess, um den GitLab-Nutzerzugriff zu verwalten.
Klonen Sie das IaC-Repository der Ankerzone:
git clone https://iac.GLOBAL_DNS_DOMAIN/gdch/iac.git /tmp/iac
Ersetzen Sie GLOBAL_DNS_DOMAIN durch die DNS-Domain für das Universum.
Geben Sie den Nutzernamen und das Passwort ein, wenn Sie dazu aufgefordert werden.
26.2.3. Erforderliche Rollen hinzufügen
Folgen Sie der Anleitung im Runbook IAM-R0005 zum Prozess für Zugriff und Berechtigungseskalierung, um die erforderlichen Clusterrollen und Rollenbindungen zu erstellen:
- Fügen Sie eine Clusterrollenbindung mit der Clusterrolle
mz-bootstrap-joining-editorim Clusterroot-adminder Beitrittszone hinzu. - Fügen Sie eine Clusterrollenbindung mit der Clusterrolle
mz-bootstrap-anchor-readerim Clusterroot-adminder Ankerzone hinzu. - Fügen Sie in der globalen API der Ankerzone eine Rollenbindung mit der Rolle
mz-bootstrap-viewerim Namespacemz-systemhinzu.
26.2.4. Tokenanfrage erstellen
Beim Beitritt zu einer globalen Steuerungsebene wird mithilfe eines globalen API-Bootstrap-Tokens eine Verbindung zwischen der beitretenden Zone und der Ankerzone hergestellt. Mit einer Tokenanfrage wird ein Token von der globalen API in der Ankerzone angefordert.
So erstellen Sie einen neuen Branch für eine Merge-Anfrage:
cd /tmp/iac git checkout -b JOINING_ZONE_NAME-mz-token-requestErsetzen Sie
JOINING_ZONE_NAMEdurch den Zonennamen, der aus dem Customer Intake Questionnaire abgeleitet wurde, wie in der Anmerkung am Ende des Abschnitts beschrieben.Melden Sie sich in der Zone an, in der Sie teilnehmen möchten. Weitere Informationen finden Sie unter gcloud-Befehlszeile. Dies ist erforderlich, da der Befehl
gdcloudim nächsten Schritt mit dem Root-Administratorcluster in der Beitrittszone interagiert, um ein Schlüsselpaar für die Public-Key-Verschlüsselung abzurufen, mit dem das Bootstrap-Token sicher von der Ankerzone in die Beitrittszone übertragen werden kann.Generieren Sie die YAML-Datei für die Tokenanfrage:
gdcloud system multi-zone create-token-request --cluster root --zone JOINING_ZONE_NAME --client-type api-join --namespace global-kube-system --output-file /tmp/iac/infrastructure/global/orgs/root/mz-token-request.yamlErstellen oder aktualisieren Sie die Datei
kustomization.yaml.Öffnen Sie die Datei:
vim infrastructure/global/orgs/root/kustomization.yamlWenn die Datei bereits vorhanden war, fügen Sie der Liste
resourceseinmz-token-request.yaml-Element hinzu. Fügen Sie andernfalls das vollständige YAML für die Ressource hinzu:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: global-root-kustomization resources: - mz-token-request.yamlSpeichern Sie die Datei und beenden Sie vim.
Übernehmen Sie die Änderungen für den Zweig:
git add infrastructure git commitÜbertragen Sie den Zweig an GitLab:
git pushLassen Sie die Änderungen in den
main-Branch zusammenführen. Weitere Informationen finden Sie im IAC-R0004-Runbook.
26.2.5. Token erstellen
So erstellen Sie das Bootstrap-Token in der Zone, die dem Cluster beitreten soll:
So erstellen Sie einen neuen Branch für eine Merge-Anfrage:
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-tokenMelden Sie sich in der Ankerzone an. Weitere Informationen finden Sie unter gcloud-Befehlszeile. Dies ist erforderlich, da der Befehl
gdcloudim nächsten Schritt mit der globalen API in der Ankerzone interagiert, um ein Bootstrap-Token zu erstellen und zu verschlüsseln.Generieren Sie die YAML-Datei für das Token:
gdcloud system multi-zone create-token --zone JOINING_ZONE_NAME --namespace global-kube-system --output-file /tmp/iac/infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/mz-token.yamlErstellen oder aktualisieren Sie die Datei
kustomization.yaml.Öffnen Sie die Datei:
vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yamlWenn die Datei bereits vorhanden war, fügen Sie der Liste
resourceseinmz-token.yaml-Element hinzu. Fügen Sie andernfalls die vollständige YAML-Datei für die Ressource hinzu:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: root-admin-kustomization resources: - mz-token.yamlSpeichern Sie die Datei und beenden Sie vim.
Übernehmen Sie die Änderungen für den Zweig:
git add infrastructure git commitÜbertragen Sie den Zweig an GitLab:
git pushLassen Sie die Änderungen in den
main-Branch zusammenführen. Weitere Informationen finden Sie im IAC-R0004-Runbook.
26.2.6. Bootstrap-Ressource erstellen
So erstellen Sie die Bootstrap-Ressource im Stamm-Administratorcluster der Zone, die hinzugefügt wird:
So erstellen Sie einen neuen Branch für eine Merge-Anfrage:
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-bootstrapMelden Sie sich in der Ankerzone an. Weitere Informationen finden Sie unter gcloud-Befehlszeile. Dies ist erforderlich, da der
gdcloud-Befehl im nächsten Schritt während eines Join-Vorgangs mit dem Root-Administratorcluster in der Ankerzone interagiert, um Verbindungsinformationen für die Interaktion mit der globalen API in der Ankerzone abzurufen.Generieren Sie die Bootstrap-YAML-Datei:
gdcloud system multi-zone create-bootstrap --type join --output-file /tmp/iac/infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/mz-bootstrap.yamlErstellen oder aktualisieren Sie die Datei
kustomization.yaml:Öffnen Sie die Datei:
vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yamlWenn die Datei bereits vorhanden war, fügen Sie der Liste
resourceseinmz-token.yaml-Element hinzu. Fügen Sie andernfalls die vollständige YAML-Datei für die Ressource hinzu:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: root-admin-kustomization resources: - mz-bootstrap.yamlSpeichern Sie die Datei und beenden Sie vim.
Übernehmen Sie die Änderungen für den Zweig:
git add infrastructure git commitÜbertragen Sie den Zweig an GitLab:
git pushLassen Sie die Änderungen in den
main-Branch zusammenführen. Weitere Informationen finden Sie im IAC-R0004-Runbook.
Nachdem die Änderungen zusammengeführt wurden, wird die Bootstrap-Ressource von IaC an den Administrator-Root-Cluster der neuen Zone übertragen, wo sie abgeglichen wird. Dies ist ein asynchroner Vorgang. Die globale API ist also nicht sofort nach dem Zusammenführen verfügbar.
26.2.7. Bereitstellung der globalen API prüfen
So prüfen Sie die Bereitstellung der globalen API:
Melden Sie sich in der Zone an, in der Sie teilnehmen möchten. Weitere Informationen finden Sie unter gcloud-Befehlszeile.
Rufen Sie eine Kubernetes-Konfiguration für die globale Root-API (
global-api) ab. Weitere Informationen finden Sie im IAM-R0004-Runbook.Verbindung mit der globalen API in der Beitrittszone prüfen:
kubectl version
26.2.8. Schlüsselpaar bereinigen
So löschen Sie das Schlüsselpaar, das zum Übertragen des Bootstrap-Tokens von der Ankerzone in die Beitrittszone verwendet wird:
Melden Sie sich in der Zone an, in der Sie teilnehmen möchten. Weitere Informationen finden Sie unter gcloud-Befehlszeile.
Rufen Sie eine Kubernetes-Konfiguration für den Stamm-Administratorcluster (
root-admin) ab. Weitere Informationen finden Sie im IAM-R0004-Runbook.Führen Sie den folgenden Befehl aus, um das Schlüsselpaar zu löschen:
kubectl delete keypair -n global-kube-system kp
26.2.9. Tokenanfrage bereinigen
So löschen Sie die YAML-Datei für die Tokenanfrage:
So erstellen Sie einen neuen Branch für eine Merge-Anfrage:
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-token-request-deleteLöschen Sie die YAML-Datei für die Tokenanfrage:
rm /tmp/iac/infrastructure/global/orgs/root/mz-token-request.yamlAktualisieren Sie die Datei
kustomization.yaml.Öffnen Sie die Datei:
vim infrastructure/global/orgs/root/kustomization.yamlEntfernen Sie das Element
mz-token-request.yamlaus der Listeresources, speichern Sie die Datei und beenden Sie vim.
Übernehmen Sie die Änderungen für den Zweig:
git add infrastructure git commitÜbertragen Sie den Zweig an GitLab:
git pushLassen Sie die Änderungen in den
main-Branch zusammenführen. Weitere Informationen finden Sie im IAC-R0004-Runbook.
26.2.10. Token bereinigen
Nachdem die globale API in der Zone verfügbar ist, in der Sie sie verwenden möchten, löschen Sie das Token, da es nicht mehr benötigt wird:
So erstellen Sie einen neuen Branch für eine Merge-Anfrage:
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-token-deleteLöschen Sie die YAML-Datei für das Token:
rm /tmp/iac/infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/mz-token.yamlAktualisieren Sie die Datei
kustomization.yaml, falls sie bereits vorhanden ist.Öffnen Sie die Datei:
vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yamlEntfernen Sie das Element
mz-token.yamlaus der Listeresources, speichern Sie die Datei und beenden Sie vim.
Übernehmen Sie die Änderungen für den Zweig:
git add infrastructure git commitÜbertragen Sie den Zweig an GitLab:
git pushLassen Sie die Änderungen in den
main-Branch zusammenführen. Weitere Informationen finden Sie im IAC-R0004-Runbook.
26.2.11. Uhrzeit mit anderen Zonen synchronisieren
- Folgen Sie der Anleitung unter NTP P0007 – Configure Multizone SyncServers, um die Zeit in dieser Zone mit den anderen Zonen zu synchronisieren.
26.2.12. Prüfen, ob die globale API fehlerfrei funktioniert
Führen Sie nach Abschluss des globalen API-Bootstrapping-Prozesses Systemdiagnosen durch, um zu bestätigen, dass die API fehlerfrei funktioniert:
Rufen Sie den Zonennamen vom API-Server des Stammadministratorclusters ab:
export ZONE_NAME=$(kubectl get controlplane -n mz-system cp -o jsonpath='{.spec.zone}')Prüfen Sie den Zeitstempel des letzten Heartbeats der globalen API:
kubectl get globalapizone -n mz-system ${ZONE_NAME} -o yamlDer Zeitstempel für den Herzschlag wird in
status.lastHeartbeatangegeben. Der Zeitstempel wird alle 30 Sekunden aktualisiert. Bei einer fehlerfreien globalen API darf der letzte Heartbeat-Zeitstempel nicht älter als 30 Sekunden sein.
26.2.13. Ablaufdatum der globalen etcd-CA verlängern
Die Zertifizierungsstelle (Certificate Authority, CA) des globalen etcd hat ein Ablaufdatum von 90 Tagen. Das globale etcd ist ein etcd-Cluster, in dem Instanzen in mehreren GDC-Zonen bereitgestellt werden. Es gibt keine Automatisierung für die Rotation der Zertifizierungsstelle.
Diese Anleitung sollte auf die vorhandenen Zonen angewendet werden, die bereits dem Mehrzonenuniversum beigetreten sind. Nachdem die vorhandenen Zonen aktualisiert wurden, kann die nächste Zone, die diesem Universum beitreten soll, diesen Abschnitt überspringen.
26.2.13.1. Ablaufdatum prüfen
Verwenden Sie die Kubernetes-Konfiguration des Administrators für den Root-Administratorcluster in einer beliebigen vorhandenen Zone. Prüfen Sie das Ablaufdatum der Zertifizierungsstelle:
export CA_NAME=$(kubectl get etcdca etcd -n global-kube-system -o jsonpath="{.spec.rootCA.name}")
kubectl get secret $CA_NAME -n global-kube-system -o jsonpath="{.data.tls\.crt}" | base64 -d | openssl x509 -enddate -noout -in -
Wenn das Ablaufdatum bereits auf etwa ein Jahr festgelegt ist, sind keine weiteren Maßnahmen erforderlich. Wenn die Gültigkeitsdauer weniger als ein Jahr beträgt, lesen Sie den Abschnitt CA mit längerer Gültigkeitsdauer rotieren.
26.2.13.2. CA mit längerer Dauer rotieren
Folgen Sie MZ-T0001, um die CA zu rotieren. Achten Sie darauf, dass die Zertifikatspezifikation der neuen CA den Wert duration: 8760h enthält.