Establece el acceso del clúster para kubectl

En esta página, se explica cómo configurar el acceso al clúster para la herramienta de línea de comandos de kubectl en Google Kubernetes Engine.

Descripción general

Si ejecutas varios clústeres dentro de tu proyecto de Google Cloud Platform, debes elegir con qué clúster se comunicará kubectl. Puedes configurar un clúster predeterminado para kubectl si configuras el contexto actual en el archivo kubeconfig de Kubernetes. Además, puedes ejecutar comandos kubectl en un clúster específico con la marca --cluster.

En las siguientes secciones, se explica cómo funciona kubeconfig, cómo configurar un clúster predeterminado para kubectl y cómo ejecutar comandos kubectl individuales en un clúster específico.

Antes de comenzar

Sigue estos pasos a fin de prepararte para esta tarea:

  • Asegúrate de que habilitaste la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Asegúrate de que instalaste el SDK de Cloud.
  • Establece tu ID del proyecto predeterminado:
    gcloud config set project [PROJECT_ID]
  • Si trabajas con clústeres zonales, establece tu zona de procesamiento predeterminada:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Si trabajas con clústeres regionales, establece tu región de procesamiento predeterminada:
    gcloud config set compute/region [COMPUTE_REGION]
  • Actualiza gcloud a la versión más reciente:
    gcloud components update

Archivo de configuración de Kubernetes

Kubernetes usa un archivo YAML llamado kubeconfig a fin de almacenar información de autenticación de clúster para kubectl. kubeconfig contiene una lista de contextos a los que kubectl se refiere cuando ejecuta comandos. De forma predeterminada, el archivo se guarda en $HOME/.kube/config.

Un contexto es un grupo de parámetros de acceso. Cada contexto contiene un clúster de Kubernetes, un usuario y un espacio de nombres. El contexto actual es el clúster que predeterminado para kubectl: todos los comandos kubectl se ejecutan en ese clúster.

Cuando creas un clúster con gcloud container clusters create, una entrada se agrega de manera automática a kubeconfig en tu entorno y el contexto actual cambia a ese clúster:

gcloud container clusters create my-cluster
Creating my-cluster...done
Fetching cluster endpoint and auth data.
kubeconfig entry generated for my-cluster

Cuando creas un clúster con Google Cloud Platform Console o gcloud desde una computadora diferente, el kubeconfig de tu entorno no se actualiza. Además, si un miembro del equipo del proyecto usa gcloud para crear un clúster desde su computadora, su kubeconfig se actualiza, pero el tuyo no. Sigue las instrucciones a continuación para agregar estos clústeres a tu kubeconfig local.

Sobre el extremo del clúster

Todos los clústeres tienen un extremo canónico. El extremo es la dirección IP del servidor de la API de Kubernetes que kubectl y otros servicios usan para comunicarse con la instancia principal del clúster. El extremo se muestra en GCP Console en el campo Extremos de la pestaña Detalles del clúster y en el resultado de gcloud container clusters describe en el campo endpoint.

Cuando ejecutas gcloud container clusters get-credentials, se ve que el comando obtiene el extremo del clúster como parte de la actualización de kubeconfig.

Los clústeres privados tienen dos valores de extremos únicos: privateEndpoint, que es una dirección IP interna, y publicEndpoint, que es una externa. Ejecutar get-credentials en un clúster privado hace que se configure la dirección IP externa como extremo de forma predeterminada. Si prefieres usar la IP interna como extremo, consulta la página sobre cómo generar una entrada de kubeconfig con la dirección IP interna de un clúster privado.

Acerca de la autenticación para kubectl

Todos los clústeres de GKE están configurados para aceptar identidades de usuario y cuenta de servicio de GCP, mediante la validación de las credenciales que presenta kubectl y la recuperación de la dirección de correo electrónico asociada con la identidad del usuario o cuenta de servicio. Como resultado, las credenciales de esas cuentas deben incluir el alcance de OAuth userinfo.email para autenticarse de forma correcta.

Cuando usas gcloud a fin de configurar el kubeconfig de tu entorno para un clúster nuevo o existente, le da a kubectl las mismas credenciales que usa . Por ejemplo, si usas gcloud auth login, tus credenciales personales se proporcionan a kubectl, incluido el alcance userinfo.email. Esto permite que el clúster de GKE autentique el cliente kubectl.

Como alternativa, puedes configurar kubectl para usar las credenciales de una cuenta de servicio de GCP mientras se ejecuta en una instancia de Compute Engine. Sin embargo, de forma predeterminada, el alcance userinfo.email no se incluye en las credenciales que crean las instancias de Compute Engine. Por lo tanto, debes agregar este alcance de forma explícita, mediante el uso de la marca --scopes cuando se crea la instancia de Compute Engine.

Una vez que los usuarios o las cuentas de servicio de GCP se autentican, también deben estar autorizados para realizar cualquier acción en un clúster de GKE. Consulta la página sobre control de acceso basado en funciones para obtener más información sobre cómo configurar la autorización.

Visualiza el contexto actual de kubectl

Para ver el contexto actual de kubectl, ejecuta el siguiente comando:

kubectl config current-context

Visualiza kubeconfig

Para ver kubeconfig en tu entorno, ejecuta el siguiente comando:

kubectl config view

El comando muestra una lista de todos los clústeres para los cuales se generaron entradas de kubeconfig. Si aparece un clúster de GKE, puedes ejecutar comandos kubectl en tu entorno actual. De lo contrario, debes generar una entrada kubeconfig para el clúster.

Genera una entrada kubeconfig

Para ejecutar comandos kubectl en un clúster creado en GCP Console, desde otra computadora o si lo hace otro miembro del proyecto, debes generar una entrada kubeconfig en tu entorno.

Ejecuta este comando para generar una entrada kubeconfig:

gcloud container clusters get-credentials [CLUSTER_NAME]

en el que [CLUSTER_NAME] es el nombre del clúster.

La entrada kubeconfig contiene:

  1. Tus credenciales, como se muestra en gcloud auth list, o
  2. Las credenciales predeterminadas de tu aplicación, si se las configuró.

Genera una entrada kubeconfig con la dirección IP interna de un clúster privado

Cuando ejecutas get-credentials, puedes especificar --internal-ip para escribir la dirección IP interna de un clúster privado en kubeconfig:

gcloud container clusters get-credentials --internal-ip [CLUSTER_NAME]

Configura un clúster predeterminado para los comandos kubectl

Si ya generaste una entrada kubeconfig para clústeres, puedes ejecutar gcloud container clusters get-credentials a fin de cambiar el contexto actual de kubectl a ese clúster.

Por ejemplo, considera un proyecto con dos clústeres, my-cluster y my-new-cluster. El contexto actual es my-new-cluster, pero deseas ejecutar todos los comandos kubectl en my-cluster.

Para cambiar el contexto actual a my-cluster, deberías ejecutar el siguiente comando:

gcloud container clusters get-credentials my-cluster

Ejecuta comandos kubectl individuales en un clúster específico

Puedes ejecutar comandos kubectl individuales en un clúster específico si pasas el nombre del clúster como aparece en kubeconfig como el argumento para la marca --cluster.

Por ejemplo, considera un entorno con dos clústeres, my-cluster y my-new-cluster, en el que el contexto actual es . Quieres implementar una aplicación en my-new-cluster, pero no cambiar el contexto actual

Para implementar la aplicación en my-new-cluster, debes ejecutar el siguiente comando:

kubectl run my-app --image gcr.io/my-bucket/my-app:1.0 --cluster my-new-cluster

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Kubernetes Engine