Durée estimée : 3 heures
Propriétaire du composant exploitable : MZProfil de compétences : ingénieur de déploiement
26.1. Présentation
L'amorçage multizone implique la configuration du plan de contrôle global racine. La première zone d'un univers établit le plan de contrôle global. D'autres zones rejoignent le plan de contrôle mondial. Rejoindre un plan de contrôle mondial est plus complexe que d'établir le plan de contrôle, car une relation de confiance doit être établie entre le plan de contrôle mondial de l'univers et la nouvelle zone. Lorsque vous rejoignez un plan de contrôle mondial, deux zones sont impliquées :
- Zone d'ancrage : zone qui fait déjà partie du plan de contrôle mondial. Il doit s'agir de la zone dont l'instance GitLab est utilisée pour appliquer les modifications d'infrastructure en tant que code (IaC) à l'API globale de l'univers.
- Zone de connexion : zone qui se connecte au plan de contrôle mondial.
Vous avez amorcé la première zone de l'univers dans Initialize multi-zone. Cette zone sert de zone d'ancrage lorsque d'autres zones rejoignent l'univers.
Si une API globale existe déjà dans l'univers et que vous amorcez une zone qui rejoint l'univers, procédez comme suit.
26.2. Amorcer plusieurs zones dans des zones rejoignant un univers
Avant de continuer, vérifiez que vous avez amorcé le multizone dans la zone d'ancrage.
26.2.1. Démarrer le conteneur d'outil d'E/S
Pour des raisons de sécurité et d'auditabilité, le processus d'amorçage multizone doit être effectué à l'aide d'identifiants personnels pour accéder à Kubernetes (et non à une configuration Kubernetes d'administrateur) et à l'IaC pour l'approbation multipartite des demandes d'autorisation d'effectuer des actions sensibles. Tous les outils nécessaires pour effectuer les actions d'amorçage sont inclus dans le conteneur d'outils d'E/S. Consultez la procédure de configuration du conteneur d'outil d'E/S OOPS-P0065 pour savoir comment démarrer le conteneur dans l'environnement OIC. Lorsqu'une zone rejoint le plan de contrôle mondial, elle interagit avec deux zones. L'une d'elles (la zone d'ancrage) ne fonctionne pas dans des conditions de jour 0. Des mesures d'authentification et d'autorisation de niveau production doivent donc être utilisées pour s'assurer que la sécurité de la zone d'ancrage n'est pas compromise.
26.2.2. Initialiser le dépôt GitLab
Utilisez les identifiants du fournisseur d'identité (IdP) configuré dans la configuration de l'infrastructure en tant que code et suivez la procédure OOPS-P0066 pour gérer l'accès des utilisateurs GitLab.
Clonez le dépôt IaC de la zone d'ancrage :
git clone https://iac.GLOBAL_DNS_DOMAIN/gdch/iac.git /tmp/iac
Remplacez GLOBAL_DNS_DOMAIN par le domaine DNS de l'univers.
Indiquez le nom d'utilisateur et le mot de passe lorsque vous y êtes invité.
26.2.3. Ajouter les rôles requis
Suivez les instructions du runbook Processus d'accès et d'élévation des privilèges IAM-R0005 pour créer les liaisons de rôle et de cluster-rôle nécessaires :
- Ajoutez une liaison de rôle de cluster avec le rôle de cluster
mz-bootstrap-joining-editordans le clusterroot-adminde la zone de jonction. - Ajoutez une liaison de rôle de cluster avec le rôle de cluster
mz-bootstrap-anchor-readerdans le clusterroot-adminde la zone d'ancrage. - Ajoutez une liaison de rôle avec le rôle
mz-bootstrap-viewerdans l'espace de nomsmz-systemde l'API globale de la zone d'ancrage.
26.2.4. Créer une demande de jeton
Lorsqu'une zone rejoint un plan de contrôle mondial, une communication est établie entre la zone qui rejoint le plan et la zone d'ancrage à l'aide d'un jeton d'amorçage de l'API globale. Une demande de jeton est utilisée pour demander un jeton à l'API mondiale dans la zone d'ancrage.
Créez une branche pour une demande de fusion :
cd /tmp/iac git checkout -b JOINING_ZONE_NAME-mz-token-requestRemplacez
JOINING_ZONE_NAMEpar le nom de la zone tel qu'il est indiqué dans le questionnaire d'accueil des clients, comme décrit dans la note à la fin de la section.Connectez-vous à la zone de ralliement. Pour en savoir plus, consultez Interface de ligne de commande gdcloud. Cela est nécessaire, car la commande
gdcloudde l'étape suivante interagit avec le cluster d'administrateur racine dans la zone de rattachement pour obtenir une paire de clé de chiffrement de clé publique permettant de transférer de manière sécurisée le jeton d'amorçage de la zone d'ancrage vers la zone de rattachement.Générez le fichier YAML de demande de jeton :
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.yamlCréez ou mettez à jour le fichier
kustomization.yaml.Ouvrez le fichier :
vim infrastructure/global/orgs/root/kustomization.yamlSi le fichier existait déjà, ajoutez un élément
mz-token-request.yamlà la listeresources. Sinon, ajoutez le fichier YAML complet de la ressource :apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: global-root-kustomization resources: - mz-token-request.yamlEnregistrez le fichier et quittez vim.
Validez les modifications dans la branche :
git add infrastructure git commitTransférez la branche vers GitLab :
git pushFaites fusionner les modifications dans la branche
main. Pour en savoir plus, consultez le runbook IAC-R0004.
26.2.5. Créer un jeton
Pour créer le jeton d'amorçage dans la zone de connexion, procédez comme suit :
Créez une branche pour une demande de fusion :
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-tokenConnectez-vous à la zone d'ancrage. Pour en savoir plus, consultez Interface de ligne de commande gdcloud. Cela est nécessaire, car la commande
gdcloudde l'étape suivante interagit avec l'API globale dans la zone d'ancrage pour créer et chiffrer un jeton d'amorçage.Générez le fichier YAML du jeton :
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.yamlCréez ou mettez à jour le fichier
kustomization.yaml.Ouvrez le fichier :
vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yamlSi le fichier existait déjà, ajoutez un élément
mz-token.yamlà la listeresources. Sinon, ajoutez le fichier YAML complet de la ressource :apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: root-admin-kustomization resources: - mz-token.yamlEnregistrez le fichier et quittez vim.
Validez les modifications dans la branche :
git add infrastructure git commitTransférez la branche vers GitLab :
git pushFaites fusionner les modifications dans la branche
main. Pour en savoir plus, consultez le runbook IAC-R0004.
26.2.6. Créer la ressource d'amorçage
Pour créer la ressource d'amorçage dans le cluster d'administrateur racine de la zone à joindre, procédez comme suit :
Créez une branche pour une demande de fusion :
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-bootstrapConnectez-vous à la zone d'ancrage. Pour en savoir plus, consultez Interface de ligne de commande gdcloud. Cette étape est nécessaire, car lors d'une opération d'association, la commande
gdcloudde l'étape suivante interagit avec le cluster d'administrateur racine dans la zone d'ancrage pour récupérer les informations de connectivité permettant d'interagir avec l'API globale dans la zone d'ancrage.Générez le fichier YAML d'amorçage :
gdcloud system multi-zone create-bootstrap --type join --output-file /tmp/iac/infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/mz-bootstrap.yamlCréez ou mettez à jour le fichier
kustomization.yaml:Ouvrez le fichier :
vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yamlSi le fichier existait déjà, ajoutez un élément
mz-token.yamlà la listeresources. Sinon, ajoutez le fichier YAML complet de la ressource :apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: root-admin-kustomization resources: - mz-bootstrap.yamlEnregistrez le fichier et quittez vim.
Validez les modifications dans la branche :
git add infrastructure git commitTransférez la branche vers GitLab :
git pushFaites fusionner les modifications dans la branche
main. Pour en savoir plus, consultez le runbook IAC-R0004.
Une fois les modifications fusionnées, l'IaC propage la ressource Bootstrap au cluster d'administrateur racine de la nouvelle zone, où elle est réconciliée. Il s'agit d'une opération asynchrone. L'API globale ne sera donc pas disponible immédiatement après la fusion.
26.2.7. Valider le déploiement réussi de l'API globale
Pour valider le déploiement de l'API globale, procédez comme suit :
Connectez-vous à la zone de ralliement. Pour en savoir plus, consultez Interface de ligne de commande gdcloud.
Obtenez une configuration Kubernetes pour l'API globale racine (
global-api). Pour en savoir plus, consultez le runbook IAM-R0004.Vérifiez la connectivité avec l'API globale dans la zone de connexion :
kubectl version
26.2.8. Supprimer la paire de clés
Pour supprimer la paire de clés utilisée pour transférer le jeton d'amorçage de la zone d'ancrage vers la zone de jonction, procédez comme suit :
Connectez-vous à la zone de ralliement. Pour en savoir plus, consultez Interface de ligne de commande gdcloud.
Obtenez une configuration Kubernetes pour le cluster d'administrateur racine (
root-admin). Pour en savoir plus, consultez le runbook IAM-R0004.Exécutez la commande suivante pour supprimer la paire de clés :
kubectl delete keypair -n global-kube-system kp
26.2.9. Nettoyer la demande de jeton
Pour supprimer le fichier YAML de demande de jeton, procédez comme suit :
Créez une branche pour une demande de fusion :
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-token-request-deleteSupprimez le fichier YAML de demande de jeton :
rm /tmp/iac/infrastructure/global/orgs/root/mz-token-request.yamlMettez à jour le fichier
kustomization.yaml.Ouvrez le fichier :
vim infrastructure/global/orgs/root/kustomization.yamlSupprimez l'élément
mz-token-request.yamlde la listeresources, enregistrez le fichier et quittez vim.
Validez les modifications dans la branche :
git add infrastructure git commitTransférez la branche vers GitLab :
git pushFaites fusionner les modifications dans la branche
main. Pour en savoir plus, consultez le runbook IAC-R0004.
26.2.10. Nettoyer le jeton
Une fois l'API globale disponible dans la zone de connexion, supprimez le jeton, car il n'est plus nécessaire :
Créez une branche pour une demande de fusion :
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-token-deleteSupprimez le fichier YAML du jeton :
rm /tmp/iac/infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/mz-token.yamlMettez à jour le fichier
kustomization.yamls'il existe déjà.Ouvrez le fichier :
vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yamlSupprimez l'élément
mz-token.yamlde la listeresources, enregistrez le fichier et quittez vim.
Validez les modifications dans la branche :
git add infrastructure git commitTransférez la branche vers GitLab :
git pushFaites fusionner les modifications dans la branche
main. Pour en savoir plus, consultez le runbook IAC-R0004.
26.2.11. Synchroniser l'heure avec d'autres zones
- Suivez NTP P0007 – Configurer des SyncServers multizones pour synchroniser l'heure de cette zone avec celle des autres zones.
26.2.12. Vérifier que l'API globale est en bon état
Une fois le processus d'amorçage de l'API globale terminé, effectuez des vérifications de l'état pour confirmer que l'API est en bon état :
Obtenez le nom de la zone à partir du serveur d'API du cluster d'administrateur racine :
export ZONE_NAME=$(kubectl get controlplane -n mz-system cp -o jsonpath='{.spec.zone}')Vérifiez le code temporel de la dernière pulsation de l'API globale :
kubectl get globalapizone -n mz-system ${ZONE_NAME} -o yamlLe code temporel du battement cardiaque est renseigné dans
status.lastHeartbeat. L'horodatage est mis à jour toutes les 30 secondes. Une API globale saine présente un code temporel de dernier signal de présence qui ne date pas de plus de 30 secondes.
26.2.13. Prolonger la date d'expiration de l'autorité de certification etcd globale
L'autorité de certification (CA) de l'etcd mondial a une date d'expiration de 90 jours. L'etcd global est un cluster etcd dont les instances sont déployées dans plusieurs zones GDC. Il n'existe aucune automatisation pour faire tourner l'AC.
Ces instructions doivent être appliquées aux zones existantes qui ont déjà rejoint l'univers multizone. Une fois les zones existantes mises à jour, la zone suivante qui rejoindra cet univers peut ignorer cette section.
26.2.13.1. Vérifier la date d'expiration
Utilisez la configuration Kubernetes de l'administrateur pour le cluster d'administrateur racine dans n'importe quelle zone existante. Vérifiez la date d'expiration de l'autorité de certification :
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 -
Si la date d'expiration est déjà définie sur environ un an, aucune autre action n'est requise. Si elle est inférieure à un an, consultez Faire pivoter l'autorité de certification avec une durée plus longue.
26.2.13.2. Faire tourner l'AC avec une durée plus longue
Suivez MZ-T0001 pour effectuer la rotation de l'autorité de certification. Assurez-vous que la spécification du certificat de la nouvelle CA contient une valeur duration: 8760h.