Creación de una kubeconfig para Amazon EKS - Amazon EKS

Creación de una kubeconfig para Amazon EKS

En esta sección, creará un archivo kubeconfig para su clúster (o actualizará uno existente).

En esta sección se ofrecen dos procedimientos para crear o actualizar su kubeconfig. Puede crear o actualizar rápidamente un kubeconfig con el comando AWS CLI de la update-kubeconfig automáticamente utilizando la AWS CLI o puede crear un kubeconfig manualmente usando la AWS CLI o el aws-iam-authenticator.

Amazon EKS utiliza el comando aws eks get-token disponible en la versión 1.16.156 o posterior de la AWS CLI o el autenticador de AWS IAM para Kubernetes con kubectl para la autenticación del clúster. Si ha instalado AWS CLI en su sistema, el autenticador de AWS IAM para Kubernetes utilizará de forma predeterminada las mismas credenciales que se devuelven con el siguiente comando:

aws sts get-caller-identity

Para obtener más información, consulte Configuración de AWS CLI en la Guía del usuario de AWS Command Line Interface.

Crear kubeconfig automáticamente

Para crear el archivo kubeconfig con la AWS CLI

  1. Asegúrese de que tiene la versión 1.16.156 o posterior de la AWS CLI instalada. Para instalar o actualizar la AWS CLI, consulte Instalación de AWS CLI en la Guía del usuario de AWS Command Line Interface.

    nota

    La versión de Python de su sistema debe ser 2.7.9 o posterior. En caso contrario, se producirán errores hostname doesn't match en las llamadas de la AWS CLI a Amazon EKS.

    Puede comprobar la versión de la AWS CLI con el comando siguiente:

    aws --version
    importante

    Los administradores de paquetes tales como yum, apt-get o Homebrew para macOS suelen estar atrasados varias versiones de la versión de la AWS CLI. Para asegurarse de que tiene la versión más reciente, consulte Instalación de AWS CLI en la Guía del usuario de AWS Command Line Interface.

  2. Utilice el comando AWS CLI de la update-kubeconfig para crear o actualizar el archivo kubeconfig del clúster.

    • De forma predeterminada, el archivo de configuración resultante se crea en la ruta de kubeconfig predeterminada (.kube/config) en el directorio de inicio o en combinación con un archivo kubeconfig existente en dicha ubicación. Puede especificar otra ruta con la opción --kubeconfig.

    • Puede especificar un ARN de rol de IAM con la opción --role-arn para utilizar en la autenticación al emitir comandos kubectl. De lo contrario, se utilizará la entidad de IAM de la AWS CLI predeterminada o las credenciales del SDK. Puede ver su identidad de AWS CLI o SDK predeterminada ejecutando el comando aws sts get-caller-identity.

    • Para obtener más información, consulte la página de ayuda con el comando aws eks update-kubeconfig help o consulte update-kubeconfig en la Referencia del comando AWS CLI.

    nota

    Para ejecutar el siguiente comando, debe tener permiso para utilizar la acción de la API eks:DescribeCluster con el clúster que especifique. Para obtener más información, consulte Ejemplos de políticas de Amazon EKS basadas en identidades.

    aws eks --region <region-code> update-kubeconfig --name <cluster_name>
  3. Pruebe la configuración.

    kubectl get svc
    nota

    Si recibe cualquier error de tipo de recurso o autorización, consulte Acceso denegado o no autorizado (kubectl) en la sección de solución de problemas.

    Salida:

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m

Crear kubeconfig manualmente

Para crear el archivo kubeconfig manualmente

  1. Cree el directorio ~/.kube predeterminado si aún no existe.

    mkdir -p ~/.kube
  2. Abra el editor de texto de su elección y copie uno de los bloques de código de kubeconfig debajo, en función del método de token de cliente que prefiera.

    • Para utilizar el comando aws eks get-token de la AWS CLI (requiere la versión 1.16.156 o posterior de la AWS CLI):

      apiVersion: v1 clusters: - cluster: server: <endpoint-url> certificate-authority-data: <base64-encoded-ca-cert> name: kubernetes contexts: - context: cluster: kubernetes user: aws name: aws current-context: aws kind: Config preferences: {} users: - name: aws user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 command: aws args: - "eks" - "get-token" - "--cluster-name" - "<cluster-name>" # - "--role-arn" # - "<role-arn>" # env: # - name: AWS_PROFILE # value: "<aws-profile>"
    • Para utilizar el autenticador de AWS IAM para Kubernetes:

      apiVersion: v1 clusters: - cluster: server: <endpoint-url> certificate-authority-data: <base64-encoded-ca-cert> name: kubernetes contexts: - context: cluster: kubernetes user: aws name: aws current-context: aws kind: Config preferences: {} users: - name: aws user: exec: apiVersion: client.authentication.k8s.io/v1alpha1 command: aws-iam-authenticator args: - "token" - "-i" - "<cluster-name>" # - "-r" # - "<role-arn>" # env: # - name: AWS_PROFILE # value: "<aws-profile>"
  3. Sustituya <endpoint-url> por la URL de punto de enlace creada para el clúster.

  4. Sustituya <base64-encoded-ca-cert> por la certificateAuthority.data creada para el clúster.

  5. Sustituya <cluster-name> por el nombre del clúster.

  6. (Opcional) Para asumir un rol de IAM a fin de realizar operaciones del clúster en lugar de la cadena de proveedores de credenciales de AWS predeterminada, quite el comentario de las líneas -r o --role y <role-arn>, y sustituya un ARN de rol de IAM para utilizarlo con el usuario.

  7. (Opcional) Para utilizar siempre un perfil de credenciales de AWS específico con nombre (en lugar de la cadena de proveedores de credenciales de AWS predeterminada), quite el comentario de las líneas env y sustituya <aws-profile> por el nombre del perfil que desee utilizar.

  8. Guarde el archivo en la carpeta de kubectl predeterminada con el nombre del clúster en el nombre del archivo. Por ejemplo, si el nombre del clúster es <devel>, guarde el archivo como ~/.kube/config-<devel>.

  9. Agregue la ruta del archivo a la variable de entorno KUBECONFIG para que kubectl sepa dónde encontrar la configuración del clúster.

    • Para los shells Bash en macOS o Linux:

      export KUBECONFIG=$KUBECONFIG:~/.kube/config-<devel>
    • Para PowerShell en Windows:

      $ENV:KUBECONFIG="{0};{1}" -f $ENV:KUBECONFIG, "$ENV:userprofile\.kube\config-<devel>"
  10. (Opcional) Agregue la configuración al archivo de inicialización del shell para que se configure al abrir un shell.

    • Para los shells Bash en MacOS:

      echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config-<devel>' >> ~/.bash_profile
    • Para los shells Bash en Linux:

      echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config-<devel>' >> ~/.bashrc
    • Para PowerShell en Windows:

      [System.Environment]::SetEnvironmentVariable('KUBECONFIG', $ENV:KUBECONFIG, 'Machine')
  11. Pruebe la configuración.

    kubectl get svc
    nota

    Si recibe cualquier error de tipo de recurso o autorización, consulte Acceso denegado o no autorizado (kubectl) en la sección de solución de problemas.

    Salida:

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m