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:
CURRENT | NAME | CLUSTER | AUTHINFO | NAMESPACE |
---|---|---|---|---|
* | arn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-name | arn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-name | arn: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:
CURRENT | NAME | CLUSTER | AUTHINFO | NAMESPACE |
---|---|---|---|---|
* | arn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-name | arn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-name | my-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:
CURRENT | NAME | CLUSTER | AUTHINFO | NAMESPACE |
---|---|---|---|---|
* | first-context | arn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-name | my-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:
CURRENT | NAME | CLUSTER | AUTHINFO | NAMESPACE |
---|---|---|---|---|
* | first-context | arn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-name | my-eks-user-1 | my-namespace1 |
second-context | arn:aws:eks:eu-central-1:999999999999:cluster/my-eks-cluster-name | my-eks-user-2 | my-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”).
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