Tiempo estimado para completarlo: 3 horas
Propietario del componente operable: MZPerfil de habilidades: ingeniero de implementaciones
26.1. Información general
Para iniciar un clúster multizona, debes configurar el plano de control global raíz. La primera zona de un universo establece el plano de control global. Se añaden zonas al plano de control global. Unirse a un plano de control global es un proceso más complejo que establecer el plano de control, ya que se debe establecer una relación de confianza entre el plano de control global del universo y la nueva zona. Cuando se une a un plano de control global, se implican dos zonas:
- Zona de anclaje: una zona que ya forma parte del plano de control global. Esta debe ser la zona cuya instancia de GitLab se utilice para aplicar cambios de infraestructura como código (IaC) a la API global del universo.
- Zona de unión: la zona que se une al plano de control global.
Has inicializado la primera zona del universo en Inicializar multizona. Esa zona sirve como zona de anclaje cuando otras zonas se unen al universo.
Si ya hay una API global en el universo y estás inicializando una zona que se va a unir al universo, sigue estos pasos.
26.2. Bootstrap multizona en zonas que se unen a un universo
Confirma que has inicializado la multizona en la zona de anclaje antes de continuar.
26.2.1. Iniciar contenedor de herramientas de E/S
Por motivos de seguridad y auditabilidad, el proceso de arranque multizona debe realizarse con credenciales personales para acceder a Kubernetes (no con una configuración de Kubernetes de administrador) y con IaC para la aprobación multiparte de las solicitudes de autorización para realizar acciones sensibles. Todas las herramientas necesarias para realizar las acciones de arranque se incluyen en el contenedor de herramientas de E/S. Consulta el proceso de configuración del contenedor de herramientas de E/S OOPS-P0065 para saber cómo iniciar el contenedor en el entorno de OIC. Para que una zona se una al plano de control global, debe interactuar con dos zonas. Una de ellas (la zona de anclaje) no funciona en condiciones del día 0, por lo que se deben emplear medidas de autenticación y autorización de nivel de producción para asegurarse de que no se vea comprometida la seguridad de la zona de anclaje.
26.2.2. Inicializar el repositorio de GitLab
Usa las credenciales del proveedor de identidades configurado en Configuración de la infraestructura como código y sigue el proceso OOPS-P0066 para gestionar el acceso de los usuarios de GitLab.
Clona el repositorio de IaC de la zona de anclaje:
git clone https://iac.GLOBAL_DNS_DOMAIN/gdch/iac.git /tmp/iac
Sustituye GLOBAL_DNS_DOMAIN por el dominio DNS del universo.
Proporciona el nombre de usuario y la contraseña cuando se te pida.
26.2.3. Añadir los roles necesarios
Sigue las instrucciones del runbook IAM-R0005 del proceso de acceso y elevación de privilegios para crear los enlaces de rol y de rol de clúster necesarios:
- Añade una vinculación de rol de clúster con el rol de clúster
mz-bootstrap-joining-editoren el clústerroot-adminde la zona de unión. - Añade una vinculación de rol de clúster con el rol de clúster
mz-bootstrap-anchor-readeren el clústerroot-adminde la zona de anclaje. - Añade una vinculación de roles con el rol
mz-bootstrap-vieweren el espacio de nombresmz-systemde la API global de la zona de anclaje.
26.2.4. Crear solicitud de token
Al unirse a un plano de control global, se establece contacto entre la zona que se une y la zona de anclaje mediante un token de arranque de API global. Una solicitud de token se usa para solicitar un token de la API global en la zona de anclaje.
Crea una rama para una solicitud de combinación:
cd /tmp/iac git checkout -b JOINING_ZONE_NAME-mz-token-requestSustituye
JOINING_ZONE_NAMEpor el nombre de la zona, tal como se indica en el cuestionario de incorporación de clientes, como se describe en la nota al final de la sección.Inicia sesión en la zona de unión. Consulta Interfaz de línea de comandos de gcloud para obtener más información. Esto es necesario porque el comando
gdclouddel siguiente paso interactúa con el clúster de administrador raíz de la zona de unión para obtener un par de claves de cifrado de clave pública para transferir de forma segura el token de arranque de la zona de anclaje a la zona de unión.Genera el archivo YAML de solicitud de token:
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.yamlCrea o actualiza el archivo
kustomization.yaml.Abre el archivo:
vim infrastructure/global/orgs/root/kustomization.yamlSi el archivo ya existía, añade un elemento
mz-token-request.yamla la listaresources. De lo contrario, añade el archivo YAML del recurso completo:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: global-root-kustomization resources: - mz-token-request.yamlGuarda el archivo y sal de vim.
Confirma los cambios en la rama:
git add infrastructure git commitEnvía la rama a GitLab:
git pushConsigue que los cambios se combinen en la rama
main. Consulta el runbook IAC-R0004 para obtener más información.
26.2.5. Crear token
Sigue estos pasos para crear el token de arranque en la zona de unión:
Crea una rama para una solicitud de combinación:
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-tokenInicia sesión en la zona de anclaje. Consulta Interfaz de línea de comandos de gcloud para obtener más información. Esto es necesario porque el comando
gdclouddel paso siguiente interactúa con la API global de la zona de anclaje para crear y cifrar un token de arranque.Genera el archivo YAML del 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.yamlCrea o actualiza el archivo
kustomization.yaml.Abre el archivo:
vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yamlSi el archivo ya existía, añade un elemento
mz-token.yamla la listaresources. De lo contrario, añade el archivo YAML del recurso completo:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: root-admin-kustomization resources: - mz-token.yamlGuarda el archivo y sal de vim.
Confirma los cambios en la rama:
git add infrastructure git commitEnvía la rama a GitLab:
git pushConsigue que los cambios se combinen en la rama
main. Consulta el runbook IAC-R0004 para obtener más información.
26.2.6. Crear el recurso de arranque
Sigue estos pasos para crear el recurso de arranque en el clúster de administrador raíz de la zona de unión:
Crea una rama para una solicitud de combinación:
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-bootstrapInicia sesión en la zona de anclaje. Consulta Interfaz de línea de comandos de gcloud para obtener más información. Esto es necesario porque, durante una operación de unión, el comando
gdclouddel paso siguiente interactúa con el clúster de administrador raíz de la zona de anclaje para obtener información de conectividad que permita interactuar con la API global de la zona de anclaje.Genera el archivo YAML de arranque:
gdcloud system multi-zone create-bootstrap --type join --output-file /tmp/iac/infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/mz-bootstrap.yamlCrea o actualiza el archivo
kustomization.yaml:Abre el archivo:
vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yamlSi el archivo ya existía, añade un elemento
mz-token.yamla la listaresources. De lo contrario, añade el archivo YAML del recurso completo:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: root-admin-kustomization resources: - mz-bootstrap.yamlGuarda el archivo y sal de vim.
Confirma los cambios en la rama:
git add infrastructure git commitEnvía la rama a GitLab:
git pushConsigue que los cambios se combinen en la rama
main. Consulta el runbook IAC-R0004 para obtener más información.
Una vez que se hayan combinado los cambios, IaC propagará el recurso Bootstrap al clúster de administrador raíz de la nueva zona, donde se reconciliará. Se trata de una operación asíncrona, por lo que la API global no estará disponible inmediatamente después de la combinación.
26.2.7. Validar que la API global se ha implementado correctamente
Para validar la implementación de la API global, sigue estos pasos:
Inicia sesión en la zona de unión. Consulta Interfaz de línea de comandos de gcloud para obtener más información.
Obtén una configuración de Kubernetes para la API global raíz (
global-api). Consulta el runbook IAM-R0004 para obtener más información.Verifica la conectividad con la API global en la zona de unión:
kubectl version
26.2.8. Limpiar par de claves
Para eliminar el par de claves que se usa para transferir el token de arranque de la zona de anclaje a la zona de unión, sigue estos pasos:
Inicia sesión en la zona de unión. Consulta Interfaz de línea de comandos de gcloud para obtener más información.
Obtén una configuración de Kubernetes para el clúster de administrador raíz (
root-admin). Consulta el runbook IAM-R0004 para obtener más información.Ejecuta el siguiente comando para eliminar el par de claves:
kubectl delete keypair -n global-kube-system kp
26.2.9. Limpiar la solicitud de token
Para eliminar el archivo YAML de solicitud de token, sigue estos pasos:
Crea una rama para una solicitud de combinación:
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-token-request-deleteElimina el archivo YAML de la solicitud de token:
rm /tmp/iac/infrastructure/global/orgs/root/mz-token-request.yamlActualiza el archivo
kustomization.yaml.Abre el archivo:
vim infrastructure/global/orgs/root/kustomization.yamlElimina el elemento
mz-token-request.yamlde la listaresources, guarda el archivo y cierra vim.
Confirma los cambios en la rama:
git add infrastructure git commitEnvía la rama a GitLab:
git pushConsigue que los cambios se combinen en la rama
main. Consulta el runbook IAC-R0004 para obtener más información.
26.2.10. Limpiar token
Cuando la API global esté disponible en la zona de unión, elimina el token, ya que no es necesario:
Crea una rama para una solicitud de combinación:
cd /tmp/iac git checkout main git pull --ff-only git checkout -b JOINING_ZONE_NAME-mz-token-deleteElimina el archivo YAML del token:
rm /tmp/iac/infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/mz-token.yamlActualiza el archivo
kustomization.yamlsi ya existe.Abre el archivo:
vim infrastructure/zonal/zones/JOINING_ZONE_NAME/root-admin/kustomization.yamlElimina el elemento
mz-token.yamlde la listaresources, guarda el archivo y cierra vim.
Confirma los cambios en la rama:
git add infrastructure git commitEnvía la rama a GitLab:
git pushConsigue que los cambios se combinen en la rama
main. Consulta el runbook IAC-R0004 para obtener más información.
26.2.11. Sincronizar la hora con otras zonas
- Sigue las instrucciones del artículo NTP P0007 - Configure Multizone SyncServers (NTP P0007: Configurar SyncServers multizona) para sincronizar la hora de esta zona con la de las demás.
26.2.12. Verificar que la API global está en buen estado
Una vez completado el proceso de arranque de la API global, realiza comprobaciones de estado para confirmar que la API funciona correctamente:
Obtén el nombre de la zona del servidor de la API del clúster de administrador raíz:
export ZONE_NAME=$(kubectl get controlplane -n mz-system cp -o jsonpath='{.spec.zone}')Comprueba la marca de tiempo de la última señal de latido de la API global:
kubectl get globalapizone -n mz-system ${ZONE_NAME} -o yamlLa marca de tiempo del latido se rellena en
status.lastHeartbeat. La marca de tiempo se actualiza cada 30 segundos. Una API global en buen estado tiene la marca de tiempo de la última señal de actividad con una antigüedad máxima de 30 segundos.
26.2.13. Ampliar la fecha de vencimiento de la AC etcd global
La autoridad de certificación (CA) del etcd global tiene una fecha de vencimiento de 90 días. El etcd global es un clúster de etcd que tiene instancias desplegadas en varias zonas de GDC. No hay ninguna automatización para rotar la AC.
Estas instrucciones deben aplicarse a las zonas que ya se hayan unido al universo multizona. Una vez que se hayan actualizado las zonas, la siguiente zona que vaya a unirse a este universo podrá saltarse esta sección.
26.2.13.1. Comprobar la fecha de vencimiento
Usa la configuración de Kubernetes del administrador para el clúster de administrador raíz en cualquier zona. Comprueba la fecha de vencimiento de la autoridad de certificación:
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 fecha de vencimiento ya es de aproximadamente un año, no es necesario que hagas nada más. Si es inferior a un año, consulta Rotar la CA con una duración mayor.
26.2.13.2. Rotar la AC con una duración más larga
Sigue MZ-T0001 para rotar la CA. Asegúrate de que la especificación del certificado de la nueva AC contenga el valor duration: 8760h.