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:
- Tus credenciales, como se muestra en
gcloud auth list
, o - 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