Home / DevOps / Configure kubectl para gerenciar dois namespaces com usuários diferentes em um mesmo cluster Kubernetes

Configure kubectl para gerenciar dois namespaces com usuários diferentes em um mesmo cluster Kubernetes

1. Introdução

Esse artigo mostra como configurar o kubectl no computador local para gerenciar dois namespaces com usuários diferentes em um mesmo cluster Kubernetes. Esse procedimento assume que a configuração do cluster e do namespace no EKS, bem como a criação dos usuários IAM no AWS, já foi realizada.

Além disso, você precisará também instalar e configurar o kubectl e o AWS CLI no seu computador. Bom, se você já tem todas as ferramentas e pré-requisitos, então mãos à obra.

2. Configurar o AWS credentials 

O primeiro passo é adicionar os usuários IAM ao arquivo de credenciais do AWS. Normalmente esse arquivo fica em %userprofile%\.aws\credentials

Adicione os usuários conforme exemplificado abaixo:

[my-first-user]
aws_access_key_id = ACCESSKEYID01
aws_secret_access_key = somesharesecretacesskey
region=eu-central-1

[my-second-user]
aws_access_key_id = ACCESSKEYID02
aws_secret_access_key = anothersharesecretacesskey
region=eu-central-1

Os nomes entre “[ ]” são apelidos (alias) para os seus usuários do AWS. Você pode escolher o nome que melhor lhe convir.

Da mesma forma, a Access Key ID e Secret Access Key de cada usuário dependem do seu ambiente, portanto se você não tiver essas informações, verifique-as com o seu administrador do AWS.

Finalmente, a região depende de onde o cluster EKS foi configurado no seu ambiente. Novamente, verifique isso com o administrador do cluster e faça os ajustes necessários para o seu ambiente. 

3. Configurar o primeiro namespace no kubectl

Abra um novo prompt de comando e configure uma variável de ambiente para referir ao primeiro usuário AWS.

PS> $env:AWS_PROFILE="my-first-user"

Você pode executar o seguinte comando para verificar que o usuário foi configurado e assumido corretamente pelo prompt de comando. Se tudo estiver configurado corretamente você deve ver a Access Key ID do usuário que você configurou no arquivo credentials, bem como outras informações do usuário obtidas no AWS.

PS> aws sts get-caller-identity
{
  "UserId": "ACCESSKEYID01",
  "Account": "999999999999",
  "Arn": "arn:aws:iam::430423143424:user/my-eks-user-1"
}

Agora vamos adicionar o cluster EKS ao kubectl com o seguinte comando:

PS> aws eks update-kubeconfig --region eu-central-1 --name my-eks-cluster-name

Note que no comando acima o parâmetro --name deve referir ao nome do cluster no seu ambiente AWS. Neste caso não é necessário utilizar o ARN do cluster, apenas o nome é suficiente.

Execute o seguinte comando para verificar que o contexto foi adicionado no kubectl:

PS> kubectl config get-contexts

Você deve ver o contexto que acabou de adicionar. Note que o campo NAMESPACE ainda está em branco. Nós vamos agora modificar isso, e ajustar algumas configurações do contexto:

CURRENTNAMECLUSTERAUTHINFONAMESPACE
*arn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-namearn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-namearn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-name

Conforme comentamos, dado que há múltiplos namespaces configurados sob o mesmo cluster, vamos executar o comando abaixo para definir o nome do namespace a que esse contexto se refere. O nome do namespace já foi definido durante a configuração do cluster EKS, portanto, certifique-se do nome referente ao seu ambiente.

Além disso, vamos usar o parâmetro --user para definir um alias para o usuário que o kubectl utilizará para gerenciar esse contexto. 

PS> kubectl config set-context --current --namespace my-namespace1 --user my-eks-user-1

Agora, ao executar o comando kubectl config get-contexts, devemos ver as alterações que acabamos de executar:

CURRENTNAMECLUSTERAUTHINFONAMESPACE
*arn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-namearn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-namemy-eks-user-1 my-namespace1

Para facilitar o gerenciamento desse contexto no futuro, vamos também alterar o nome do contexto. Para isso, execute o seguinte comando:

PS> kubectl config rename-context arn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-name first-context

Os parâmetros utilizados nesse comando são o nome atual do contexto ( arn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-name ) e o nome desejado (ou seja, first-context). Ajuste esses nomes de acordo com sua necessidade.

Ótimo, agora ao executar kubectl config get-contexts novamente, as configurações do contexto devem ser parecidas com essa:

CURRENTNAMECLUSTERAUTHINFONAMESPACE
* first-contextarn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-namemy-eks-user-1 my-namespace1

4. Adicionar o segundo contexto

Para adicionar o segundo contexto, vamos basicamente repetir os passos que executamos para adicionar o primeiro contexto. Por isso, vou cobrir isso de mais resumidamente nessa seção. Configure a variável de ambiente referente ao segundo usuário AWS.

PS> $env:AWS_PROFILE="my-second-user"

Execute novamente o comando para adicionar o cluster EKS. Isso vai adicionar uma nova entrada no arquivo de configuração do kubectl.

PS> aws eks update-kubeconfig --region eu-central-1 --name my-eks-cluster-name

Updated context arn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-name in C:\Users\User1.kube\config

Modifique as configurações do contexto para definir o namespace e o alias do usuário que o kubectl utilizará para gerenciar esse contexto e, finalmente, renomeie o contexto:

PS> kubectl config set-context --current --namespace my-namespace2 --user my-eks-user-2

PS> kubectl config rename-context arn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-name second-context

Agora o comando kubectl config get-contexts deve mostrar os dois contextos configurados no seu ambiente:

CURRENTNAMECLUSTERAUTHINFONAMESPACE
* first-contextarn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-namemy-eks-user-1 my-namespace1
second-contextarn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-namemy-eks-user-2my-namespace2

5. Ajustar usuários no kubectl

O último passo é ajustar os usuários no arquivo de configuração do kubectl. O arquivo de configuração do kubectl contém os clusters, contextos e usuários configurados no kubectl. 

O arquivo de configuração do kubectl usa a sintaxe YAML, portanto tome muito cuidado com a identação das linhas. Normalmente o arquivo fica armazenado em %userprofile%\.kube\conf. Abra esse arquivo com um editor de texto como o Notepad ou Notepad++.

Conforme destacado na figura abaixo, o arquivo de configuração do kubectl tem três entradas principais: clusters, contexts e users.

A seção contexts: contém uma entrada para cada contexto que adicionamos nos passos 2 e 3. Além disso, cada entrada de contexto contém o nome do usuário correspondente que definimos nos passos 2 e 3.

A seção users: contém os usuários que utilizamos durante a configuração do cluster. É possível notar que essa seção contém apenas 1 usuário. Além disso, o nome do usuário definido na seção users: (“arn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-name”), difere dos nomes dos usuários que definimos nos passos anteriores (“my-eks-user-1” e “my-eks-user-2”).

Texto que mostra um arquivo de configuração do kubectl

O primeiro passo, portanto, é adicionar um novo usuário na seção users:. Conforme ilustrado abaixo, copie todo o conteúdo a partir da linha name: até a linha value: e cole no final do arquivo.

Em seguida, modifique o valor do parâmetro name: nos dois usuários para que correspondam ao nome dos usuários que definimos nos passos 2 e 3 (ou seja, my-eks-user-1 e my-eks-user-2). 

Finalmente, modique o valor do parâmetro value: dos usuários para que correspondam ao valor do alias dos usuários AWS definidos no arquivo %userprofile%\.aws\credentials, e que usamos nas variáveis de ambiente nos passos 2 e 3 (ou seja, my-first-user e my-second-user).

O arquivo deve ficar parecido com a imagem à esquerda:

Finalmente, volte ao prompt de comando e execute o seguinte comando para listar os recursos existentes no namespace:

PS> kubectl get pods

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *