Criar um kubeconfig para o Amazon EKS - Amazon EKS

Criar um kubeconfig para o Amazon EKS

Nesta seção, você cria um arquivo kubeconfig para o seu cluster (ou atualiza um existente).

Esta seção oferece dois procedimentos para criar ou atualizar o arquivo kubeconfig. Você pode criar ou atualizar de forma rápida um arquivo kubeconfig com o comando da AWS CLI update-kubeconfig automaticamente usando a AWS CLI, ou pode criar um arquivo kubeconfig manualmente usando a AWS CLI ou aws-iam-authenticator.

O Amazon EKS usa o comando aws eks get-token, disponível na versão 1.16.156 ou superior da AWS CLI ou do AWS IAM Authenticator para Kubernetes com kubectl para autenticação de clusters. Se você instalou a AWS CLI em seu sistema, por padrão, o AWS IAM Authenticator para Kubernetes usa as mesmas credenciais que são retornadas com o seguinte comando:

aws sts get-caller-identity

Para obter mais informações, consulte Configuração da AWS CLI no Guia do usuário da AWS Command Line Interface.

Criar arquivo kubeconfig automaticamente

Para criar o arquivo kubeconfig com a AWS CLI

  1. Verifique se você tem a versão 1.25.46 ou 2.7.21 posterior instalada. Para instalar ou atualizar a AWS CLI, consulte Installing the AWS CLI (Instalar a CLI) no Manual do usuário do AWS Command Line Interface.

    nota

    Seu sistema precisa ter a versão 2.7.9 ou superior do Python. Caso contrário, você receberá erros de hostname doesn't match com chamadas do AWS CLI para o Amazon EKS.

    Você pode verificar a versão da AWS CLI com o comando a seguir:

    aws --version
    Importante

    Gerenciadores de pacotes como yum, apt-get ou Homebrew para macOS geralmente estão por trás de várias versões da AWS CLI. Para verificar se você tem a versão mais recente, consulte Instalar o AWS CLI (Instalar a ) no Manual do usuário do AWS Command Line Interface.

  2. Crie um arquivo kubeconfig para o cluster. Substitua example values pelos seus próprios valores.

    • Por padrão, o arquivo de configuração resultante é criado no caminho padrão do kubeconfig (.kube) em seu diretório inicial ou mesclado com um config existente no local. Você pode especificar outro caminho com a opção --kubeconfig.

    • Você pode especificar um ARN de função do IAM com a opção --role-arn para uso na autenticação quando você emitir comandos kubectl. Caso contrário, a entidade do IAM na AWS CLI padrão ou na cadeia de credenciais padrão do SDK será usada. Você pode visualizar sua identidade padrão da AWS CLI ou do SDK executando o comando aws sts get-caller-identity.

    • Para obter mais informações, consulte a página de ajuda com o comando aws eks update-kubeconfig help ou consulte update-kubeconfig no AWS CLI Commando Reference (Referência do comando da CLI).

    nota

    Para executar o comando a seguir, você deve ter permissão para usar a ação da API eks:DescribeCluster com o cluster especificado. Para mais informações, consulte Exemplos de políticas baseadas em identidade do Amazon EKS.

    aws eks update-kubeconfig --region region-code --name my-cluster
  3. Teste a configuração.

    kubectl get svc
    nota

    Se você receber qualquer erro de autorização ou de tipo de recurso, consulte Acesso negado ou não autorizado (kubectl) na seção de solução de problemas.

    O exemplo de saída é o que se encontra a seguir.

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

Criar o arquivo kubeconfig manualmente

Para criar o arquivo kubeconfig manualmente

  1. Defina valores para algumas variáveis, substituindo os exemplos de example values pelos seus próprios valores e, depois, executando os comandos modificados.

    export region_code=region-code export cluster_name=my-cluster export account_id=111122223333
  2. Recupere o endpoint do seu cluster e armazene o valor em uma variável.

    cluster_endpoint=$(aws eks describe-cluster \ --region $region_code \ --name $cluster_name \ --query "cluster.endpoint" \ --output text)
  3. Recupere os dados de certificado codificado em Base64 necessários para se comunicar com o cluster e armazene o valor em uma variável.

    certificate_data=$(aws eks describe-cluster \ --region $region_code \ --name $cluster_name \ --query "cluster.certificateAuthority.data" \ --output text)
  4. Crie o diretório ~/.kube padrão, caso ele ainda não exista.

    mkdir -p ~/.kube
  5. Execute o comando para o método de token de cliente preferido (AWS CLI ou AWS IAM authenticator para Kubernetes) para criar o arquivo config no diretório ~/.kube. É possível especificar o seguinte antes de executar um dos comandos, modificando o comando para incluir o seguinte:

    • Um perfil do IAM: remova o # no início das linhas abaixo de args:. Substitua my-role pelo nome do perfil do IAM com o qual você deseja executar operações de cluster em vez da cadeia de provedores de credenciais padrão da AWS. Para obter mais informações, consulte Set up kubectl to use authentication tokens provided by AWS IAM Authenticator for Kubernetes (Configurar kubectl para usar tokens de autenticação fornecidos pelo AWS IAM Authenticator para Kubernetes) no GitHub.

    • Um perfil nomeado da AWS CLI: remova # no início da linha env: e remova # no início das linhas abaixo dele. Substitua aws-profile pelo nome do perfil a ser utilizado. Se você não especificar um perfil, o padrão será utilizado. Para obter mais informações, consulte Specifying Credentials & Using AWS Profiles (Especificar credenciais e usar perfis da AWS) no GitHub.

    AWS CLI

    Pré-requisito

    A versão 1.16.156 ou posterior da AWS CLI deve estar instalada no dispositivo.

    #!/bin/bash read -r -d '' KUBECONFIG <<EOF apiVersion: v1 clusters: - cluster: certificate-authority-data: $certificate_data server: $cluster_endpoint name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name contexts: - context: cluster: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name user: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name current-context: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name kind: Config preferences: {} users: - name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name user: exec: apiVersion: client.authentication.k8s.io/v1beta1 command: aws args: - --region - $region_code - eks - get-token - --cluster-name - $cluster_name # - "- --role-arn" # - "arn:aws:iam::$account_id:role/my-role" # env: # - name: "AWS_PROFILE" # value: "aws-profile" EOF echo "${KUBECONFIG}" > ~/.kube/config
    AWS IAM Authenticator for Kubernetes

    Pré-requisito

    O AWS IAM Authenticator para Kubernetes deve estar instalado no dispositivo. Para instalá-lo, consulte Instalação do aws-iam-authenticator.

    #!/bin/bash read -r -d '' KUBECONFIG <<EOF apiVersion: v1 clusters: - cluster: server: $cluster_endpoint certificate-authority-data: $certificate_data name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name contexts: - context: cluster: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name user: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name current-context: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name kind: Config preferences: {} users: - name: arn:aws:eks:$region_code:$account_id:cluster/$cluster_name user: exec: apiVersion: client.authentication.k8s.io/v1beta1 command: aws-iam-authenticator args: - "token" - "-i" - "$cluster_name" # - "- --role-arn" # - "arn:aws:iam::$account_id:role/my-role" # env: # - name: "AWS_PROFILE" # value: "aws-profile" EOF echo "${KUBECONFIG}" > ~/.kube/config
  6. Adicione o caminho desse arquivo à variável de ambiente KUBECONFIG para que o kubectl saiba onde procurar a configuração do cluster.

    • Para shells Bash no MacOS ou Linux:

      export KUBECONFIG=$KUBECONFIG:~/.kube/config
    • Para o PowerShell no Windows:

      $ENV:KUBECONFIG="{0};{1}" -f $ENV:KUBECONFIG, "$ENV:userprofile\.kube\config"
  7. (Opcional) Adicione a configuração ao arquivo de inicialização do shell para que ele esteja configurado quando você abrir um shell.

    • Para shells Bash no MacOS:

      echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config' >> ~/.bash_profile
    • Para shells Bash no Linux:

      echo 'export KUBECONFIG=$KUBECONFIG:~/.kube/config' >> ~/.bashrc
    • Para o PowerShell no Windows:

      [System.Environment]::SetEnvironmentVariable('KUBECONFIG', $ENV:KUBECONFIG, 'Machine')
  8. Teste a configuração.

    kubectl get svc
    nota

    Se você receber qualquer erro de autorização ou de tipo de recurso, consulte Acesso negado ou não autorizado (kubectl) na seção de solução de problemas.

    O exemplo de saída é o que se encontra a seguir.

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