Como configurar o acesso ao clusters para o kubectl

Nesta página, explicamos como configurar o acesso de cluster para a ferramenta de linha de comando kubectl no Google Kubernetes Engine.

Visão geral

Se você executar vários clusters no seu projeto do Google Cloud Platform, precisará escolher com qual cluster o kubectl se comunicará. Você pode definir um cluster padrão para kubectl definindo o contexto atual no arquivo kubeconfig do Kubernetes. Além disso, você pode executar comandos kubectl em um cluster específico usando a sinalização --cluster.

Nas seções a seguir, explicamos como o kubeconfig funciona, como definir um cluster padrão para o kubectl e como executar comandos individuais do kubectl em um cluster específico.

Antes de começar

Prepare-se para a tarefa tomando as seguintes medidas:

  • Verifique se você ativou a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Verifique se o SDK do Cloud está instalado.
  • Defina o ID do projeto padrão:
    gcloud config set project [PROJECT_ID]
  • Se você estiver trabalhando com clusters zonais, defina a zona de computação padrão:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Se você estiver trabalhando com clusters regionais, defina a região de computação padrão:
    gcloud config set compute/region [COMPUTE_REGION]
  • Atualize o gcloud para a versão mais recente:
    gcloud components update

Arquivo de configuração do Kubernetes

O Kubernetes usa um arquivo YAML chamado kubeconfig para armazenar informações de autenticação do cluster para o kubectl. O kubeconfig contém uma lista de contextos a que o kubectl se refere ao executar comandos. Por padrão, o arquivo é salvo em $HOME/.kube/config.

Um contexto é um grupo de parâmetros de acesso. Cada contexto contém um cluster do Kubernetes, um usuário e um namespace. O contexto atual é o cluster que atualmente é o padrão de kubectl: todos os comandos kubectl são executados nesse cluster.

Quando você cria um cluster usando gcloud container clusters create, uma entrada é automaticamente incluída no kubeconfig em seu ambiente e o contexto atual é alterado para esse cluster:

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

Quando você cria um cluster usando o Console do Google Cloud Platform ou o gcloud em outro computador, o kubeconfig do seu ambiente não é atualizado. Além disso, se um membro da equipe do projeto usar o gcloud para criar um cluster no computador dele, o kubeconfig dele será atualizado, mas o seu não será. Siga as instruções abaixo para adicionar esses clusters ao kubeconfig local.

Sobre o ponto de extremidade do cluster

Todos os clusters têm um ponto de extremidade canônico. O ponto de extremidade é o endereço IP do servidor da API Kubernetes que o kubectl e outros serviços usam para se comunicar com o mestre do cluster. O endpoint é exibido no Console do GCP no campo Endpoints da guia "Detalhes" do cluster e na saída de gcloud container clusters describe no campo endpoint.

Ao executar gcloud container clusters get-credentials, você vê que o comando recebe o ponto de extremidade do cluster como parte da atualização de kubeconfig.

Os clusters particulares têm dois valores exclusivos de endpoint: privateEndpoint, que é um endereço IP interno, e publicEndpoint, que é externo. A execução de get-credentials em um cluster particular define o endereço IP externo como o endpoint por padrão. Se você preferir usar o IP interno como endpoint, consulte Como gerar uma entrada kubeconfig usando o endereço IP interno de um cluster particular.

Sobre a autenticação para o kubectl

Todos os clusters do GKE são configurados para aceitar identidades de conta de serviço e usuários do GCP. Para fazer isso, eles validam as credenciais apresentadas pelo kubectl e recuperam o endereço de e-mail associado à identidade da conta de serviço ou do usuário. Como resultado, as credenciais para essas contas precisam incluir o escopo do OAuth userinfo.email para realizar autenticação com êxito.

Quando você usa o gcloud para configurar o kubeconfig do seu ambiente para um cluster novo ou atual, o gcloud fornece ao kubectl as mesmas credenciais usadas pelo próprio gcloud. Por exemplo, se você usar o gcloud auth login, suas credenciais pessoais serão fornecidas ao kubectl, incluindo o escopo do userinfo.email. Isso permite que o cluster do GKE autentique o cliente do kubectl.

Como alternativa, é possível configurar o kubectl para usar as credenciais de uma conta de serviço do GCP e, ao mesmo tempo, ser executado em uma instância do Compute Engine. No entanto, por padrão, o escopo do userinfo.email não é incluído nas credenciais criadas pelas instâncias do Compute Engine. Portanto, é necessário adicionar esse escopo explicitamente, por exemplo, usando a sinalização --scopes quando a instância do Compute Engine for criada.

Depois que as contas de serviço do GCP e os usuários forem autenticados, eles também precisarão estar autorizados a executar qualquer ação em um cluster do GKE. Consulte Controle de acesso baseado em papéis para mais informações sobre como configurar a autorização.

Como ver o contexto atual de kubectl

Para ver o contexto atual de kubectl, execute o seguinte comando:

kubectl config current-context

Como ver o kubeconfig

Para ver o kubeconfig do seu ambiente, execute o seguinte comando:

kubectl config view

O comando retorna uma lista de todos os clusters para os quais foram geradas entradas kubeconfig. Se um cluster do GKE estiver listado, é possível executar comandos kubectl nele em seu ambiente atual. Caso contrário, é necessário gerar uma entrada kubeconfig para o cluster.

Como gerar uma entrada kubeconfig

Para executar comandos kubectl em um cluster criado no console do GCP, em outro computador ou por outro membro do projeto, você precisa gerar uma entrada kubeconfig no seu ambiente.

Gere uma entrada kubeconfig executando o seguinte comando:

gcloud container clusters get-credentials [CLUSTER_NAME]

em que [CLUSTER_NAME] é o nome do cluster.

A entrada kubeconfig contém:

  1. Suas credenciais, como mostradas em gcloud auth list, ou
  2. Suas credenciais padrão do aplicativo, se configuradas.

Como gerar uma entrada kubeconfig usando o endereço IP interno de um cluster particular

Ao executar get-credentials, você pode especificar o --internal-ip para gravar o endereço IP interno de um cluster particular no kubeconfig:

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

Como configurar um cluster padrão para comandos kubectl

Se você gerou uma entrada kubeconfig para clusters anteriormente, é possível mudar o contexto atual de kubectl para esse cluster com a execução de gcloud container clusters get-credentials.

Por exemplo, pense em um projeto com dois clusters, my-cluster e my-new-cluster. O contexto atual é my-new-cluster, mas você quer executar todos os comandos kubectl em my-cluster.

Para mudar o contexto atual para my-cluster, execute o seguinte comando:

gcloud container clusters get-credentials my-cluster

Como executar comandos kubectl individuais em um cluster específico

É possível executar comandos kubectl individuais em um cluster específico usando o nome do cluster como aparece em kubeconfig como o argumento da sinalização --cluster.

Por exemplo, pense em um ambiente com dois clusters, my-cluster e my-new-cluster, em que o contexto atual é my-cluster. Você quer implantar um aplicativo no my-new-cluster, mas não quer alterar o contexto atual.

Para implantar o aplicativo no my-new-cluster, execute o seguinte comando:

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

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Kubernetes Engine