26. Multiroom-System einrichten

Geschätzte Dauer: 3 Stunden

Eigentümer der betriebsbereiten Komponente: MZ

Kompetenzprofil: 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-editor im Cluster root-admin der Beitrittszone hinzu.
  • Fügen Sie eine Clusterrollenbindung mit der Clusterrolle mz-bootstrap-anchor-reader im Cluster root-admin der Ankerzone hinzu.
  • Fügen Sie in der globalen API der Ankerzone eine Rollenbindung mit der Rolle mz-bootstrap-viewer im Namespace mz-system hinzu.

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.

  1. So erstellen Sie einen neuen Branch für eine Merge-Anfrage:

    cd /tmp/iac
    git checkout -b JOINING_ZONE_NAME-mz-token-request
    

    Ersetzen Sie JOINING_ZONE_NAME durch den Zonennamen, der aus dem Customer Intake Questionnaire abgeleitet wurde, wie in der Anmerkung am Ende des Abschnitts beschrieben.

  2. 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 gdcloud im 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.

  3. 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.yaml
    
  4. Erstellen oder aktualisieren Sie die Datei kustomization.yaml.

    1. Öffnen Sie die Datei:

      vim infrastructure/global/orgs/root/kustomization.yaml
      
    2. Wenn die Datei bereits vorhanden war, fügen Sie der Liste resources ein mz-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.yaml
      
    3. Speichern Sie die Datei und beenden Sie vim.

  5. Übernehmen Sie die Änderungen für den Zweig:

    git add infrastructure
    git commit
    
  6. Übertragen Sie den Zweig an GitLab:

    git push
    
  7. Lassen 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:

  1. 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
    
  2. Melden Sie sich in der Ankerzone an. Weitere Informationen finden Sie unter gcloud-Befehlszeile. Dies ist erforderlich, da der Befehl gdcloud im nächsten Schritt mit der globalen API in der Ankerzone interagiert, um ein Bootstrap-Token zu erstellen und zu verschlüsseln.

  3. 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.yaml
    
  4. Erstellen oder aktualisieren Sie die Datei kustomization.yaml.

    1. Öffnen Sie die Datei:

      vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yaml
      
    2. Wenn die Datei bereits vorhanden war, fügen Sie der Liste resources ein mz-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.yaml
      
    3. Speichern Sie die Datei und beenden Sie vim.

  5. Übernehmen Sie die Änderungen für den Zweig:

    git add infrastructure
    git commit
    
  6. Übertragen Sie den Zweig an GitLab:

    git push
    
  7. Lassen 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:

  1. 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-bootstrap
    
  2. Melden 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.

  3. 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.yaml
    
  4. Erstellen oder aktualisieren Sie die Datei kustomization.yaml:

    1. Öffnen Sie die Datei:

      vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yaml
      
    2. Wenn die Datei bereits vorhanden war, fügen Sie der Liste resources ein mz-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.yaml
      
    3. Speichern Sie die Datei und beenden Sie vim.

  5. Übernehmen Sie die Änderungen für den Zweig:

    git add infrastructure
    git commit
    
  6. Übertragen Sie den Zweig an GitLab:

    git push
    
  7. Lassen 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:

  1. Melden Sie sich in der Zone an, in der Sie teilnehmen möchten. Weitere Informationen finden Sie unter gcloud-Befehlszeile.

  2. Rufen Sie eine Kubernetes-Konfiguration für die globale Root-API (global-api) ab. Weitere Informationen finden Sie im IAM-R0004-Runbook.

  3. 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:

  1. Melden Sie sich in der Zone an, in der Sie teilnehmen möchten. Weitere Informationen finden Sie unter gcloud-Befehlszeile.

  2. Rufen Sie eine Kubernetes-Konfiguration für den Stamm-Administratorcluster (root-admin) ab. Weitere Informationen finden Sie im IAM-R0004-Runbook.

  3. 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:

  1. 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-delete
    
  2. Löschen Sie die YAML-Datei für die Tokenanfrage:

    rm /tmp/iac/infrastructure/global/orgs/root/mz-token-request.yaml
    
  3. Aktualisieren Sie die Datei kustomization.yaml.

    1. Öffnen Sie die Datei:

      vim infrastructure/global/orgs/root/kustomization.yaml
      
    2. Entfernen Sie das Element mz-token-request.yaml aus der Liste resources, speichern Sie die Datei und beenden Sie vim.

  4. Übernehmen Sie die Änderungen für den Zweig:

    git add infrastructure
    git commit
    
  5. Übertragen Sie den Zweig an GitLab:

    git push
    
  6. Lassen 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:

  1. 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-delete
    
  2. Löschen Sie die YAML-Datei für das Token:

    rm /tmp/iac/infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/mz-token.yaml
    
  3. Aktualisieren Sie die Datei kustomization.yaml, falls sie bereits vorhanden ist.

    1. Öffnen Sie die Datei:

      vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yaml
      
    2. Entfernen Sie das Element mz-token.yaml aus der Liste resources, speichern Sie die Datei und beenden Sie vim.

  4. Übernehmen Sie die Änderungen für den Zweig:

    git add infrastructure
    git commit
    
  5. Übertragen Sie den Zweig an GitLab:

    git push
    
  6. Lassen 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

  1. 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:

  1. Rufen Sie den Zonennamen vom API-Server des Stammadministratorclusters ab:

    export ZONE_NAME=$(kubectl get controlplane -n mz-system cp -o jsonpath='{.spec.zone}')
    
  2. Prüfen Sie den Zeitstempel des letzten Heartbeats der globalen API:

    kubectl get globalapizone -n mz-system ${ZONE_NAME} -o yaml
    

    Der Zeitstempel für den Herzschlag wird in status.lastHeartbeat angegeben. 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.