Antes de comenzar

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 con gkeconnect.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 y storage.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:

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:

Próximos pasos

Sigue las instrucciones para registrar un clúster.