Requisitos previos para registrar un clúster

En esta página, se describen los requisitos y requisitos previos para registrar un clúster de Kubernetes en Google Cloud, incluidos la red, la configuración de clústeres de Google Cloud y Kubernetes, y los requisitos de recurso para el agente de Connect.

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 para extraer la imagen del agente de GKE Connect.

Si deseas registrar el clúster con 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 GKE Hub (gkehub.googleapis.com)

Si usas Workload Identity para registrar tu clúster, 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.

Instalación y configuración de Google Cloud

Instala el SDK de Cloud

Instala el SDK de Cloud, que incluye gcloud, la interfaz de línea de comandos (CLI) en Google Cloud.

Autoriza a gcloud para que acceda a Google Cloud.

Después de instalar el SDK de Cloud, ejecuta el siguiente comando para acceder a Google Cloud:

gcloud auth login

Instala gcloud beta (opcional)

Instala el componente gcloud beta si planeas probar las funciones alfa o beta de Connect:

 gcloud components install beta 

Otorga las funciones de IAM necesarias al usuario que registra el clúster

Tener funciones y propietarios en tu proyecto te brinda control total y te permite completar las tareas de registro.

Si no tienes funciones y propietarios en tu proyecto, debes tener funciones de IAM específicas antes de poder conectar clústeres a Google. Consulta Conecta funciones de IAM.

Las siguientes funciones de IAM garantizan que puedas registrarte y conectarte a los clústeres con una cuenta de servicio:

  • roles/gkehub.admin
  • roles/iam.serviceAccountAdmin
  • roles/iam.serviceAccountKeyAdmin
  • roles/resourcemanager.projectIamAdmin

Si registras un clúster con Workload Identity, solo necesitas la siguiente función de IAM:

  • roles/gkehub.admin

gcloud

gcloud projects add-iam-policy-binding [HUB_PROJECT_ID] \
 --member user:[GCP_EMAIL_ADDRESS] \
 --role=roles/gkehub.admin \
 --role=roles/iam.serviceAccountAdmin \
 --role=roles/iam.serviceAccountKeyAdmin \
 --role=roles/resourcemanager.projectIamAdmin

Donde:

Para obtener más información sobre cómo otorgar funciones de IAM, consulta la sección sobre cómo otorgar, cambiar y revocar el acceso a los recursos en la documentación de IAM.

Habilita las API obligatorias en tu proyecto

Debes habilitar las siguientes API en el proyecto de Google Cloud:

  • container.googleapis.com
  • gkeconnect.googleapis.com
  • gkehub.googleapis.com
  • cloudresourcemanager.googleapis.com

Los Pods de tu clúster deben poder alcanzar las direcciones googleapis.com y gkeconnect.googleapis.com, ya sea directamente o mediante un servidor proxy configurado.

Se debe otorgar el permiso serviceusage.services.enable a los propietarios ajenos al proyecto antes de que puedan habilitar las API.

Para habilitar estas API, ejecuta el siguiente comando:

gcloud

gcloud services enable \
 --project=[HUB_PROJECT_ID] \
 container.googleapis.com \
 gkeconnect.googleapis.com \
 gkehub.googleapis.com \
 cloudresourcemanager.googleapis.com

Donde:

Otorgar funciones de solo lectura a otros usuarios

Los usuarios autenticados con las siguientes funciones pueden ver los clústeres de usuarios registrados desde Cloud Console. Estas funciones proporcionan acceso de solo lectura:

  • roles/gkehub.viewer
  • roles/container.viewer

Por ejemplo, para otorgar al usuario en el proyecto las funciones roles/gkehub.viewer y roles/container.viewer, debes ejecutar el siguiente comando:

gcloud

gcloud projects add-iam-policy-binding [HUB_PROJECT_ID] \
 --member user:[USER_EMAIL_ADDRESS] \
 --role roles/gkehub.viewer \
 --role=roles/container.viewer

Donde:

Crea una cuenta de servicio de Google Cloud usando gcloud.

Se requiere un archivo JSON que contenga las credenciales de la cuenta de servicio de Google Cloud para registrar un clúster de forma manual. 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=[HUB_PROJECT_ID]

Para enumerar todas las cuentas de servicio de un proyecto, ejecuta el siguiente comando:

gcloud iam service-accounts list --project=[HUB_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]
HUB_PROJECT_ID=[HUB_PROJECT_ID]
SERVICE_ACCOUNT_NAME=[SERVICE_ACCOUNT_NAME]
gcloud projects add-iam-policy-binding ${HUB_PROJECT_ID} \
 --member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${HUB_PROJECT_ID}.iam.gserviceaccount.com" \
 --role="roles/gkehub.connect" \
 --condition "expression=resource.name == \
'projects/${HUB_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.

HUB_PROJECT_ID=[HUB_PROJECT_ID]
gcloud projects add-iam-policy-binding ${HUB_PROJECT_ID} \
 --member="serviceAccount:[SERVICE_ACCOUNT_NAME]@${HUB_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:

HUB_PROJECT_ID=[HUB_PROJECT_ID]
gcloud iam service-accounts keys create [LOCAL_KEY_PATH] \
  --iam-account=[SERVICE_ACCOUNT_NAME]@${HUB_PROJECT_ID}.iam.gserviceaccount.com \
  --project=${HUB_PROJECT_ID}

Donde:

  • [HUB_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]-[HUB_PROJECT_ID].json

Registra un clúster de GKE en un proyecto diferente

La primera vez que registres un clúster de GKE de su proyecto (GKE_PROJECT) en un proyecto diferente (HUB_PROJECT), primero debes otorgar los permisos necesarios. La cuenta de servicio predeterminada HUB_PROJECT gcp-sa-gkehub requiere la función de agente de servicio de centro en el proyecto de GKE_PROJECT. El agente del servicio de Hub es una función de IAM que le otorga a la cuenta de servicio los permisos necesarios para administrar los recursos del clúster.

Puedes confirmar que gcp-sa-gkehub tiene la función necesaria con la herramienta de gcloud o Cloud Console. Si el comando o el panel no muestran gcp-sa-gkehub, significa que falta la función necesaria. Si ves gcp-sa-gkehub, debe tener el formato service-[HUB-PROJECT-NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com.

gcloud

Ejecuta el siguiente comando:

gcloud projects get-iam-policy [GKE_PROJECT_ID]

Para otorgar la función Agente de servicio de Hub gcp-sa-gkehub, primero, debes asegurarte de que exista la cuenta de servicio predeterminada de Hub. Si registraste clústeres en este proyecto anterior, esta cuenta de servicio ya debe existir.

Para crear la gcp-sa-gkehub, ejecuta el siguiente comando:

gcloud beta services identity create --service=gkehub.googleapis.com --project=[HUB_PROJECT_ID]

Este comando debería mostrar el resultado:

Service identity created: service-[HUB_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com

Una vez que exista la cuenta de servicio gcp-sa-gkehub, ejecuta el siguiente comando para otorgarle la función roles/gkehub.serviceAgent:

GKE_PROJECT_ID=[GKE_PROJECT_ID]
HUB_PROJECT_ID=[HUB_PROJECT_ID]
HUB_PROJECT_NUMBER=$(gcloud projects describe "${HUB_PROJECT_ID}" --format "value(projectNumber)")
gcloud projects add-iam-policy-binding "${HUB_PROJECT_ID}" \
--member "serviceAccount:service-${HUB_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \
--role roles/gkehub.serviceAgent
gcloud projects add-iam-policy-binding "${GKE_PROJECT_ID}" \
--member "serviceAccount:service-${HUB_PROJECT_NUMBER}@gcp-sa-gkehub.iam.gserviceaccount.com" \
--role roles/gkehub.serviceAgent

Donde:

Para confirmar que la vinculación de función se otorga, usa lo siguiente:

  gcloud projects get-iam-policy [GKE_PROJECT_ID]
  

Si ves el nombre de la cuenta de servicio junto con la función gkehub.serviceAgent, se otorgó la vinculación de función. Por ejemplo:

  - members:
    - serviceAccount:service-[HUB_PROJECT_NUMBER]@gcp-sa-gkehub.iam.gserviceaccount.com
    role: roles/gkehub.serviceAgent

Instalación y configuración de Kubernetes

Instala kubectl

Recomendamos instalar kubectl con el SDK de Cloud.

Para verificar la versión de kubectl, verifica lo siguiente:

kubectl version

La versión de cliente se indica mediante “gitVersion” del resultado.

Para instalar kubectl, ejecuta el siguiente comando:

gcloud components install kubectl

Otorga la función de RBAC de administrador del clúster al usuario que registra el clúster.

ClusterRole Control de acceso basado en funciones (RBAC) cluster-admin te otorga los permisos del clúster necesarios para conectar tus clústeres a Google.

Si creaste el clúster, es probable que tengas esta función. Para verificarlo, ejecuta el siguiente comando:

kubectl auth can-i '*' '*' --all-namespaces

Si tú u otro usuario necesitan la función, crea un recurso ClusterRoleBinding en el clúster:

kubectl create clusterrolebinding [BINDING_NAME] --clusterrole cluster-admin --user [USER] 

Donde:

  • [BINDING_NAME] es un nombre que eliges para el recurso ClusterRoleBinding.
  • [USER] es la identidad que se usa para autenticarse en el clúster.

A fin de obtener más información sobre la función de administrador de clúster, consulta la documentación de Kubernetes.

Usa controles de admisión

Como parte del registro de tu clúster en Google Cloud, se instala el agente de Connect en tu clúster. Según la plataforma de contenedor y el controlador de admisión, es posible que debas crear políticas de admisión que permitan la instalación del agente.

Políticas de seguridad de los Pods (PSP)

PodSecurityPolicy es un recurso opcional del controlador de admisión que valida las solicitudes para crear y actualizar los Pods de tu clúster. Las políticas de seguridad de Pods se aplican solo cuando el complemento del controlador de admisión PSP está habilitado.

Si tu clúster usa el complemento de controlador de admisión PSP, no es necesario que crees políticas adicionales para usar el agente de Connect, ya que las funciones de RBAC y de políticas específicas del agente de Connect se instalan automáticamente como parte del registro del clúster.

Puedes usar los siguientes comandos para confirmar la política de PSP y los RBAC instalados:

$ kubectl get psp | grep connect
$ kubectl get role,rolebindings -n gke-connect | grep psp

Restricciones de contexto de seguridad (SCC)

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: 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
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

Uso y requisitos de recursos

Por lo general, el agente Connect conectado en el registro utiliza 500 m de CPU y 200 Mi de memoria. Sin embargo, este uso puede variar según la cantidad de solicitudes que se realicen al agente por segundo y el tamaño de esas solicitudes. Pueden verse afectados por varios factores, como el tamaño del clúster, la cantidad de usuarios que acceden al clúster a través de Cloud Console (más usuarios o cargas de trabajo, más solicitudes) y la cantidad de funciones habilitadas en el entorno en el clúster.

Próximos pasos