En esta página se explica cómo usar la pasarela de conexión para conectarse a un clúster registrado. Antes de leer esta página, asegúrese de que conoce los conceptos que se explican en nuestra página de introducción. En esta guía se da por hecho que el administrador de tu proyecto ya ha configurado la pasarela y te ha asignado los roles y permisos necesarios.
Antes de empezar
Asegúrate de que tienes instaladas las siguientes herramientas de línea de comandos:
- La versión más reciente de Google Cloud CLI, la herramienta de línea de comandos para interactuar con Google Cloud.
kubectl
Si usas Cloud Shell como entorno de shell para interactuar con Google Cloud, estas herramientas ya están instaladas.
Asegúrate de haber inicializado gcloud CLI para usarlo con tu proyecto.
Inicia sesión en tu cuenta de Google Cloud
Puedes usar tu propia Google Cloud cuenta o una Google Cloud cuenta de servicio para interactuar con los clústeres conectados a través de la API Gateway.
Sigue las instrucciones de Autorizar las herramientas de la CLI de Google Cloud para iniciar sesión en tu cuenta de usuario. La pasarela Connect admite la suplantación de identidad de cuentas de servicio, por lo que, aunque hayas iniciado sesión en tu propia cuenta de usuario, puedes usar una cuenta de servicio para interactuar con los clústeres, como verás en las siguientes secciones.
Selecciona un clúster registrado
Si no sabes el nombre del clúster al que quieres acceder, puedes ver todos los clústeres registrados de tu flota actual ejecutando el siguiente comando:
gcloud container fleet memberships list
En esta lista se muestran todos los clústeres de tu flota, incluidos sus nombres de pertenencia e IDs externos. Cada clúster de una flota tiene un nombre de miembro único. En el caso de los clústeres de GKE, el nombre del grupo de miembros suele coincidir con el nombre que le asignaste al crear el clúster, a menos que el nombre del clúster no fuera único en su proyecto en el momento del registro.
Obtener la pasarela del clúster kubeconfig
Usa el siguiente comando para obtener el kubeconfig
que necesitas para interactuar con el clúster especificado:
gcloud container fleet memberships get-credentials MEMBERSHIP_NAME
Sustituye MEMBERSHIP_NAME
por el nombre de la pertenencia a la flota de tu clúster.
Este comando devuelve un kubeconfig
específico de la pasarela de conexión que te permite conectarte al clúster a través de la pasarela de conexión.
Si quieres usar una cuenta de servicio en lugar de tu propia cuenta, usa gcloud config
para asignar a auth/impersonate_service_account
la dirección de correo de la cuenta de servicio. Google Cloud
Para obtener la credencial del clúster que se usa para interactuar con la pasarela Connect mediante una cuenta de servicio, ejecuta los siguientes comandos: Ten en cuenta lo siguiente:
- Clústeres de Google Distributed Cloud (solo software) en hardware desnudo y VMware: el nombre del miembro es el mismo que el del clúster.
GKE en AWS: usa
gcloud container aws clusters get-credentials
.GKE en Azure: uso
gcloud container azure clusters get-credentials
.
Para obtener más información sobre cómo permitir que los usuarios suplanten la identidad de una cuenta de servicio, consulta el artículo Gestionar el acceso a cuentas de servicio.
gcloud config set auth/impersonate_service_account SA_EMAIL_ADDRESS
gcloud container fleet memberships get-credentials MEMBERSHIP_NAME
Sustituye SA_EMAIL_ADDRESS
por la dirección de correo de la cuenta de servicio. Puedes consultar más información sobre cómo permitir que los usuarios suplanten la identidad de una cuenta de servicio en el artículo Gestionar el acceso a cuentas de servicio.
Ejecutar comandos en el clúster
Una vez que tengas las credenciales necesarias, podrás ejecutar comandos con kubectl
o un go-client
como lo harías normalmente en cualquier clúster de Kubernetes. La salida debería tener un aspecto similar al siguiente:
# Get namespaces in the Cluster.
kubectl get namespaces
NAME STATUS AGE
default Active 59d
gke-connect Active 4d
Comandos kubectl exec/cp/attach/port-forward
Los siguientes comandos de kubectl
son comandos de streaming y tienen requisitos adicionales:
attach
cp
exec
port-forward
Ten en cuenta los siguientes requisitos:
Los clústeres deben tener la versión 1.30 o posterior para los comandos
attach
,cp
yexec
, y la versión 1.31 o posterior para el comandoport-forward
.El cliente
kubectl
debe tener la versión 1.31 o una posterior.Para comprobar la versión de tu cliente, consulta el resultado del comando
kubectl version
. Para instalar una versión más reciente dekubectl
, consulta Instalar herramientas.
Los usuarios y las cuentas de servicio con el rol de gestión de identidades y accesos roles/gkehub.gatewayAdmin
y el permiso cluster-admin
ClusterRole
tienen los permisos necesarios para ejecutar los comandos attach
, cp
, exec
y port-forward
. Si se ha concedido a los usuarios y a las cuentas de servicio un rol de IAM personalizado o un rol de control de acceso basado en roles (RBAC) personalizado, es posible que tengas que conceder permisos adicionales. Consulta las siguientes secciones para obtener más información.
Concede un permiso adicional si es necesario
Se necesita el permiso de gestión de identidades y accesos gkehub.gateway.stream
para ejecutar los comandos attach
, cp
, exec
y port-forward
a través de la pasarela Connect. Este permiso se incluye en roles/gkehub.gatewayAdmin
.
En el caso de los usuarios que no sean propietarios del proyecto o de los usuarios o cuentas de servicio a los que no se les haya concedido roles/gkehub.gatewayAdmin
en el proyecto, debe concederles roles/gkehub.gatewayAdmin
o crear un rol personalizado que incluya los otros roles necesarios y el permiso gkehub.gateway.stream
. Para obtener información sobre cómo crear un rol personalizado, consulta el artículo Crear y gestionar roles personalizados de la documentación de IAM.
Crear y aplicar políticas de RBAC adicionales si es necesario
Los usuarios y las cuentas de servicio con el rol cluster-admin
ClusterRole
tienen los permisos necesarios para ejecutar los comandos attach
, cp
, exec
y port-forward
.
Como mínimo, se necesitan las siguientes reglas para ejecutar los comandos:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: stream-role
namespace: NAMESPACE # Specify the namespace
rules:
- apiGroups: ["*"]
resources: ["pods/exec", "pods/attach", "pods/portforward"]
verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: stream-rolebinding
namespace: NAMESPACE # Specify the namespace
roleRef:
apiGroup: "rbac.authorization.k8s.io"
kind: Role
name: stream-role
subjects:
- kind: User
name: EMAIL # Specify the user that should have stream access
namespace: NAMESPACE # Specify the namespace
Solución de problemas
Si tienes problemas para conectarte a un clúster a través de la pasarela, tú o tu administrador podéis comprobar si se da alguno de los siguientes problemas habituales.
- El servidor no tiene un tipo de recurso: puede que veas este mensaje de error cuando falle el comando
kubectl get ns
. Este error puede deberse a varios motivos. Ejecuta tus comandos dekubectl
en modo detallado para ver más información. Por ejemplo,kubectl get ns -v 10
. - No se encuentran conexiones activas para el clúster(proyecto: 12345, pertenencia: my-cluster): puede ver este error cuando Connect Agent pierde la conectividad o no se ha instalado correctamente (solo en clústeres externos a Google Cloud ). Para solucionar este problema, debe verificar si el espacio de nombres
gke-connect
existe en el clúster. Si el espacio de nombresgke-connect
existe en el clúster, consulta la página de solución de problemas de conexión para solucionar los problemas de conectividad. - No se ha encontrado la URL solicitada en este servidor: puede ver este error cuando el
kubeconfig
contiene una dirección de servidor incorrecta. Asegúrate de que la versión de la CLI de Google Cloud que estás usando sea la más reciente y vuelve a intentar generar lakubeconfig
de la pasarela. No edites manualmente el archivokubeconfig
, ya que esto provocará errores inesperados. - La identidad del usuario no tiene permisos suficientes para usar la API de la pasarela: necesitas el rol
roles/gkehub.gatewayAdmin
roles/gkehub.gatewayReader
oroles/gkehub.gatewayEditor
para usar la API. Para obtener más información, consulta la sección Conceder roles de gestión de identidades y accesos a usuarios de la guía de configuración de la pasarela. - El agente de Connect no tiene autorización para enviar las solicitudes del usuario: el agente de Connect debe tener permiso para reenviar solicitudes en tu nombre, lo que se especifica mediante una política de suplantación de identidad en el clúster. Consulta un ejemplo de cómo añadir un usuario al rol
gateway-impersonate
en la guía de configuración de la pasarela. - La identidad del usuario no tiene permisos de control de acceso basado en roles suficientes para realizar la operación: debes tener los permisos adecuados en el clúster para ejecutar las operaciones que elijas. Consulta un ejemplo de cómo añadir un usuario al
ClusterRole
adecuado en la sección Configurar la autorización RBAC de la guía de configuración de la pasarela. - La identidad del usuario no tiene permisos suficientes para realizar la operación al usar Grupos de Google o asistencia de terceros: consulta Recoger registros del servicio de identidad de GKE para obtener instrucciones sobre cómo inspeccionar los registros relacionados con la información de identidad.
- El agente de Connect no está en buen estado: consulta la página de solución de problemas de Connect para asegurarte de que tu clúster esté conectado.
- No se ha encontrado el ejecutable gke-gcloud-auth-plugin o No se ha encontrado ningún proveedor de autenticación con el nombre gcp: las versiones 1.26 y posteriores de kubectl pueden mostrar este error debido a los cambios en la autenticación de kubectl a partir de la versión 1.26 de GKE. Instala
gke-gcloud-auth-plugin
y vuelve a ejecutargcloud container fleet memberships get-credentials MEMBERSHIP_NAME
con la última versión de la CLI de Google Cloud. Las conexiones a la pasarela fallan con versiones anteriores de la CLI de Google Cloud: en los clústeres de GKE, el agente de Connect ya no es necesario para que la pasarela funcione, por lo que no se instala de forma predeterminada durante el registro de la pertenencia. Las versiones anteriores de la CLI de Google Cloud (399.0.0 y anteriores) dan por hecho que el agente de Connect está en el clúster. Si intentas usar la pasarela con estas versiones anteriores, puede que no funcione en los clústeres registrados con una versión más reciente de la CLI de Google Cloud. Para solucionar este problema, actualice su cliente de CLI de Google Cloud a una versión más reciente o vuelva a ejecutar el comando de registro de la suscripción con la marca
--install-connect-agent
.El tamaño de los grupos devueltos en el grupo
gke-security-groups
supera el límite de tamaño de encabezado HTTP de 8 KB. Reorganiza la jerarquía de grupos y vuelve a intentarlo: aunque no hay un límite estricto en el número de grupos, los nombres de grupo largos pueden provocar que la solicitud supere el límite de tamaño del encabezado HTTP de 8 KB y generar errores que pueden requerir que reestructures la jerarquía de grupos.
Solución de problemas de kubectl exec/cp/attach/port-forward
El error devuelto al ejecutar el comando suele ser un error genérico 400 Bad Request
que no es lo suficientemente claro como para depurar el problema. Para obtener mensajes de error más detallados, usa la versión 1.32 o posterior del cliente kubectl
para ejecutar el comando con un nivel de detalle 4 o superior. Por ejemplo:
kubectl exec -v 4 ...
.
En los registros devueltos, busca el registro que contenga las siguientes respuestas:
- Para el comando
kubectl exec/cp/attach
:RemoteCommand fallback:
- Para el comando
kubectl port-forward
:fallback to secondary dialer from primary dialer err:
Para solucionar algunos de los mensajes de error habituales que puedes recibir del comando kubectl exec -v 4 ...
, consulta la siguiente sección.
Faltan permisos de gestión de identidades y accesos
Si el mensaje de error contiene generic::permission_denied: Permission'gkehub.gateway.stream' denied on resource
,
puede que no se te hayan concedido los permisos de IAM necesarios para ejecutar el comando. Para usar esta función, los usuarios deben tener el permiso de gestión de identidades y accesos gkehub.gateway.stream
, que se incluye de forma predeterminada en el rol roles/gkehub.gatewayAdmin
. Consulta las instrucciones en la sección de permisos de gestión de identidades y accesos.
Faltan permisos de RBAC obligatorios
Si el mensaje de error contiene ...generic::failed_precondition: failed to connect to the cluster's API Server with response (status=403 Forbidden...
, significa que te faltan permisos de control de acceso basado en roles. Necesitas un conjunto de permisos de control de acceso basado en roles (RBAC) en el clúster para ejecutar estos comandos kubectl
.
Para obtener más información sobre cómo configurar los permisos de control de acceso basado en roles necesarios, consulta Crear y aplicar políticas de control de acceso basado en roles adicionales si es necesario.
Mensaje de error generic::resource_exhausted: se ha agotado la cuota de active_streams de la pasarela
Hay un límite de cuota de 10 emisiones activas por proyecto de host de flota. Se define en la cuota de connectgateway.googleapis.com/active_streams
. Consulta el artículo Ver y gestionar cuotas para obtener instrucciones sobre cómo gestionar tus cuotas.
Mensaje de error generic::failed_precondition: error encountered within the cluster (error encontrado en el clúster)
Si aparece el error generic::failed_precondition: error encountered within
the cluster
, consulta los registros de Connect Agent en el clúster para identificar la causa subyacente:
kubectl logs -n gke-connect -l app=gke-connect-agent --tail -1
El registro que debes buscar en el agente de Connect es failed to create the websocket connection...
.
Mensaje de error generic::failed_precondition: connection to Agent failed/terminated (Se ha producido un error o se ha terminado la conexión con el agente)
Si aparece este error inmediatamente al ejecutar el comando, significa que hay un problema con la conexión del clúster a Google. Consulta la guía general para solucionar problemas para obtener más información.
Si se produce este error después de que la sesión esté activa durante unos 20 o 30 minutos, se trata de una limitación prevista por motivos de seguridad. La conexión debe restablecerse.
Siguientes pasos
- Consulta un ejemplo de cómo usar la pasarela Connect como parte de tu automatización de DevOps en nuestro tutorial Integración con Cloud Build.