Para registrar un clúster de Kubernetes fuera de Google Cloud, se requieren los siguientes pasos además de completar los requisitos generales.
Asegurar la conectividad de red
Para registrar correctamente tu clúster, debes asegurarte de que se pueda acceder a los siguientes dominios desde tu clúster de Kubernetes.
cloudresourcemanager.googleapis.com
resuelve los metadatos del proyecto de Google Cloud al que se conecta el clúster.oauth2.googleapis.com
a fin de obtener tokens OAuth de corta duración para operaciones de agentes en comparación congkeconnect.googleapis.com
.gkeconnect.googleapis.com
para establecer el canal que se usa para recibir solicitudes de Google Cloud y enviar respuestas.gkehub.googleapis.com
para crear recursos de membresía del centro de Google Cloud que corresponden al clúster que conectas con Google Cloud.www.googleapis.com
para autenticar los tokens de servicio de las solicitudes de servicio entrantes de Google Cloud.gcr.io
ystorage.googleapis.com
para extraer la imagen del agente de GKE Connect.
Si deseas registrar el clúster mediante Workload Identity, también se debe poder acceder a los siguientes dominios:
securetoken.googleapis.com
iamcredentials.googleapis.com
sts.googleapis.com
Si usas un proxy para Connect, también debes actualizar la lista de entidades permitidas del proxy con los dominios pertinentes.
Si usas gcloud para registrar tu clúster de Kubernetes, estos dominios también deben ser accesibles en el entorno en el que ejecutas los comandos de gcloud.
Usa los Controles del servicio de VPC
Si quieres usar Controles del servicio de VPC para mejorar la seguridad de los datos en tu aplicación, debes asegurarte de que los siguientes servicios se encuentren en el perímetro de servicio:
- API de Resource Manager (
cloudresourcemanager.googleapis.com
) - API de GKE Connect (
gkeconnect.googleapis.com
) - API de Fleet (
gkehub.googleapis.com
)
Si deseas registrar tu clúster con Workload Identity de la flota habilitado, también necesitas los siguientes servicios:
- API de credenciales de la cuenta de servicio de IAM (
iamcredentials.googleapis.com
) - API del servicio de token de seguridad (
sts.googleapis.com
)
También debes configurar la conectividad privada para acceder a las API correspondientes. Puedes obtener información para hacerlo en Configura una conectividad privada.
Configura la identidad
Todas las opciones manuales de registro de clústeres fuera de Google Cloud requieren que configures la autenticación en Google. Esto puede ser de las siguientes opciones:
- Workload Identity de la flota (recomendado cuando esté disponible). Puedes obtener más información sobre las ventajas de habilitar Workload Identity de la flota en Usa Workload Identity de la flota.
- Una cuenta de servicio de Google Cloud
Los clústeres conectados se pueden registrar con la flota Workload Identity habilitada si el clúster cumple con nuestros requisitos previos para los clústeres conectados, como se describe a continuación. De lo contrario, registra los clústeres conectados con una cuenta de servicio de Google Cloud para la autenticación. En la siguiente sección, se muestra cómo crear una cuenta de servicio.
Crea una cuenta de servicio de Google Cloud usando gcloud
.
Para registrar un clúster de forma manual con una cuenta de servicio de Google Cloud, necesitas un archivo JSON que contenga las credenciales de la cuenta de servicio. Para seguir el principio de privilegio mínimo, te recomendamos que crees una cuenta de servicio distinta para cada clúster de Kubernetes que registres y que solo le vincules las funciones 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 enumerar todas las cuentas de servicio de un proyecto, ejecuta el siguiente comando:
gcloud iam service-accounts list --project=FLEET_HOST_PROJECT_ID
Si creas una cuenta de servicio distinta para cada clúster de Kubernetes que registres, vincula la función de IAM gkehub.connect a la cuenta de servicio para su clúster correspondiente con una condición de IAM en el nombre de la membresía 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 la función a la cuenta de servicio para 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 claves privadas de la cuenta de servicio. Usa este archivo cuando registres 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 ID del proyecto de Google Cloud en el que deseas registrar los clústeres. Obtén más información para encontrar este valor.
- SERVICE_ACCOUNT_NAME es el nombre para mostrar que eliges para la [Cuenta de servicio].
- MEMBERSHIP_NAME es el nombre de la membresía que eliges para representar el clúster de forma única cuando lo registras.
- LOCAL_KEY_PATH es una ruta de archivo local en la que deseas guardar la clave privada de la cuenta de servicio, un archivo JSON. Te recomendamos nombrar el archivo con el nombre de la cuenta de servicio y el ID del proyecto, por ejemplo:
/tmp/creds/[SERVICE_ACCOUNT_NAME]-[FLEET_HOST_PROJECT_ID].json
Requisitos previos del clúster adjunto
Según el tipo de clúster de terceros de Kubernetes que quieras registrar como clúster adjunto, es posible que debas cumplir con algunos requisitos adicionales para instalar el agente de Connect o usar Workload Identity de la flota.
Configura restricciones del contexto de seguridad (SCC) (clústeres de OpenShift)
En los clústeres OpenShift OKE y OKD, los administradores pueden usar SCC para controlar los permisos de los Pods. Para permitir la instalación del agente del agente en tu clúster, debes crear un SCC personalizado.
La siguiente definición de SCC de muestra especifica el conjunto de condiciones con las que se debe ejecutar el agente de Connect para que ser aceptado 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 guardaste la definición de SCC como gke-connect-scc.yaml
, usa la herramienta de línea de comandos de OpenShift oc
a fin de crear el gke-connect-scc
de SCC para tu clúster de la siguiente manera:
$ oc create -f gke-connect-scc.yaml
Para verificar que se creó la SCC personalizada, ejecuta el siguiente comando de oc
:
$ oc get scc | grep gke-connect-scc
Requisitos Workload Identity de la Flota
Puedes registrar clústeres adjuntos con Workload Identity de flota habilitada si la plataforma crea un extremo OIDC público para el clúster (o te permite crear uno) o si tienes dedescubrimiento de las entidades emisoras de cuentas de servicio de Kubernetes habilitado para el clúster. Si no puedes cumplir con estos requisitos, debes registrar clústeres conectados con una cuenta de servicio de Google Cloud para la autenticación.
Para tipos de clústeres específicos, consulta lo siguiente:
- Clústeres de OpenShift: Se pueden registrar con Workload Identity de la flota habilitada después de configurar tu SCC personalizado, como se describió antes.
- Clústeres de categorías: Se requiere que la detección de entidades emisoras de cuentas de servicio esté habilitada para usar Workload Identity. Esto se habilita de forma predeterminada desde la versión 1.20 de Kubernetes. Si necesitas habilitar esta función, sigue las instrucciones en Proyección de volumen de tokens de cuentas de servicio. El descubrimiento de la entidad emisora de la cuenta de servicio se habilita de forma automática cuando el proyecto de volumen de token de la cuenta de servicio está habilitado.
Próximos pasos
Sigue las instrucciones para registrar un clúster.