Para registrar un clúster de Kubernetes fuera de Google Cloud , debes seguir estos pasos además de cumplir los requisitos generales.
Comprobar conexión de red
Para registrar correctamente tu clúster, debes asegurarte de que se pueda acceder a los dominios que se indican a continuación desde tu clúster de Kubernetes.
cloudresourcemanager.googleapis.com
resuelve los metadatos relativos al Google Cloud proyecto al que se está conectando el clúster.oauth2.googleapis.com
para obtener tokens de OAuth de corta duración para las operaciones del agente engkeconnect.googleapis.com
.gkeconnect.googleapis.com
para establecer el canal que se usa para recibir solicitudes de Google Cloud y emitir respuestas.gkehub.googleapis.com
para crear recursos de pertenencia a la flota del lado de Google Cloudque correspondan al clúster al que te estás conectando Google Cloud.www.googleapis.com
para autenticar tokens de servicio de solicitudes de servicio Google Cloud entrantes.gcr.io
ystorage.googleapis.com
para extraer la imagen del agente de GKE Connect.
Si quieres registrar el clúster con la identidad de cargas de trabajo de la flota, también se debe poder acceder a los siguientes dominios:
securetoken.googleapis.com
iamcredentials.googleapis.com
sts.googleapis.com
Si utilizas un proxy para Connect, también debes actualizar la lista de permitidos del proxy con los dominios pertinentes.
Si usas gcloud para registrar tu clúster de Kubernetes, también se debe poder acceder a estos dominios en el entorno en el que ejecutes los comandos de gcloud.
Usar Controles de Servicio de VPC
Si quieres usar Controles de Servicio de VPC para aumentar la seguridad de los datos de tu aplicación, debes asegurarte de que los siguientes servicios estén en tu perímetro de servicio:
- API Resource Manager (
cloudresourcemanager.googleapis.com
) - API GKE Connect (
gkeconnect.googleapis.com
) - API Fleet (
gkehub.googleapis.com
)
Si quieres registrar tu clúster con la identidad de carga de trabajo de la flota habilitada, también necesitas los siguientes servicios:
- API Service Account Credentials de Gestión de Identidades y Accesos (
iamcredentials.googleapis.com
) - API Security Token Service (
sts.googleapis.com
)
También debes configurar la conectividad privada para acceder a las APIs correspondientes. Para saber cómo hacerlo, consulta el artículo Configurar la conectividad privada.
Configurar la identidad
Todas las opciones de registro manual de clústeres, excepto Google Cloud , requieren que configures la autenticación en Google. Puede ser:
- Identidad de cargas de trabajo de flotas (recomendado cuando esté disponible). Puedes consultar más información sobre las ventajas de habilitar Workload Identity de flota en Usar Workload Identity de flota.
- Una Google Cloud cuenta de servicio
Los clústeres vinculados se pueden registrar con Workload Identity de la flota habilitado si cumplen los requisitos previos de los clústeres vinculados, tal como se describe más abajo. De lo contrario, registra los clústeres adjuntos con una Google Cloud cuenta de servicio para la autenticación. En la siguiente sección se explica cómo crear una cuenta de servicio.
Crea una Google Cloud cuenta de servicio con gcloud
Para registrar manualmente un clúster mediante una Google Cloud cuenta de servicio, necesitas un archivo JSON que contenga las credenciales de la cuenta de servicio. Para seguir el principio de mínimos privilegios, te recomendamos que crees una cuenta de servicio distinta para cada clúster de Kubernetes que registres y que solo le asignes roles de IAM para el clúster correspondiente.
Para crear este archivo, sigue estos pasos:
gcloud
Crea una cuenta de servicio ejecutando el siguiente comando:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID
Para obtener una lista con todas las cuentas de servicio de un proyecto, ejecuta el siguiente comando:
gcloud iam service-accounts list --project=FLEET_HOST_PROJECT_ID
Si vas a crear una cuenta de servicio distinta para cada clúster de Kubernetes que registres, vincula el rol de gestión de identidades y accesos gkehub.connect a la cuenta de servicio de su clúster correspondiente con una condición de gestión de identidades y accesos en el nombre de miembro del clúster:
MEMBERSHIP_NAME=MEMBERSHIP_NAME
FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
SERVICE_ACCOUNT_NAME=SERVICE_ACCOUNT_NAME
gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
--member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/gkehub.connect" \
--condition "expression=resource.name == \
'projects/${FLEET_HOST_PROJECT_ID}/locations/global/memberships/${MEMBERSHIP_NAME}',\
title=bind-${SERVICE_ACCOUNT_NAME}-to-${MEMBERSHIP_NAME}"
De lo contrario, vincula el rol a la cuenta de servicio de todos los clústeres del proyecto sin la condición.
FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
--member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/gkehub.connect"
Descarga el archivo JSON de la clave privada de la cuenta de servicio. Este archivo se usa cuando registras un clúster:
FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
gcloud iam service-accounts keys create LOCAL_KEY_PATH \
--iam-account=SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com \
--project=${FLEET_HOST_PROJECT_ID}
donde:
- FLEET_HOST_PROJECT_ID es el Google Cloud ID del proyecto en el que quieres registrar los clústeres. Consulta cómo encontrar este valor.
- SERVICE_ACCOUNT_NAME es el nombre visible que elijas para la [Service Account].
- MEMBERSHIP_NAME es el nombre de la pertenencia que elijas para representar de forma única el clúster al registrarlo.
- LOCAL_KEY_PATH es una ruta de archivo local en la que quieres guardar la clave privada de la cuenta de servicio, que es un archivo JSON. Te recomendamos que le pongas al archivo el nombre de la cuenta de servicio y el ID de tu proyecto, como
/tmp/creds/[SERVICE_ACCOUNT_NAME]-[FLEET_HOST_PROJECT_ID].json
.
Requisitos previos de los clústeres vinculados
En función del tipo de clúster de Kubernetes de terceros que quieras registrar como clúster adjunto, es posible que tengas que cumplir algunos requisitos adicionales para instalar el agente de Connect o usar la identidad de carga de trabajo de la flota.
Configurar restricciones de contexto de seguridad (SCC) (clústeres de OpenShift)
En los clústeres OpenShift OKE y OKD, los administradores pueden usar SCCs para controlar los permisos de los pods. Para permitir la instalación de Connect Agent en tu clúster, debes crear un SCC personalizado.
La siguiente definición de SCC de ejemplo especifica el conjunto de condiciones con las que debe ejecutarse el agente de Connect para que se le acepte en el clúster:
# Connect Agent SCC apiVersion: security.openshift.io/v1 kind: SecurityContextConstraints metadata: name: gke-connect-scc allowPrivilegeEscalation: false # This is redundant with non-root + disallow privilege escalation, # but we provide it for defense in depth. requiredDropCapabilities: - ALL runAsUser: type: MustRunAsNonRoot seLinuxContext: type: RunAsAny supplementalGroups: type: MustRunAs ranges: - min: 1 max: 65535 fsGroup: type: MustRunAs ranges: - min: 1 max: 65535 volumes: - secret - projected readOnlyRootFilesystem: true seccompProfiles: - docker/default users: groups: # Grants all service accounts in the gke-connect namespace access to this SCC - system:serviceaccounts:gke-connect
Si has guardado tu definición de SCC como gke-connect-scc.yaml
, usa la herramienta de línea de comandos oc
de OpenShift para crear el SCC gke-connect-scc
de tu clúster de la siguiente manera:
$ oc create -f gke-connect-scc.yaml
Para verificar que se ha creado el SCC personalizado, ejecuta el siguiente comando oc
:
$ oc get scc | grep gke-connect-scc
Requisitos de la identidad de cargas de trabajo de flotas
Puedes registrar clústeres adjuntos con Workload Identity de la flota habilitado si tu plataforma crea un endpoint OIDC público para tu clúster (o te permite crear uno) o si tienes habilitada la detección del emisor de la cuenta de servicio de Kubernetes en el clúster. Si no puedes cumplir estos requisitos, debes registrar los clústeres adjuntos con una Google Cloud cuenta de servicio para la autenticación.
Para obtener información sobre tipos de clústeres específicos, consulta lo siguiente:
- Clústeres de OpenShift: se pueden registrar con la identidad de carga de trabajo de la flota habilitada después de configurar tu SCC personalizado, como se ha descrito anteriormente.
- Clústeres de kind: requieren que se habilite la detección del emisor de la cuenta de servicio para usar Workload Identity de la flota. Esta opción está habilitada de forma predeterminada a partir de la versión 1.20 de Kubernetes. Si necesitas habilitar esta función, sigue las instrucciones que se indican en Proyección del volumen de tokens de cuentas de servicio. La detección de emisores de cuentas de servicio se habilita automáticamente cuando se habilita el proyecto de volumen de tokens de cuenta de servicio.
Siguientes pasos
Sigue las instrucciones para registrar un clúster.