
Em algum momento você vai precisar chamar a API do Kubernetes de fora do cluster, seja para rodar um job, listar deployments ou qualquer outra função que a API do Kubernetes oferece.
Neste artigo, vou te mostrar como fazer isso usando o JWT (JSON Web Token) de uma Service Account.
Primeiro, você precisa assumir um papel de admin no cluster (se ainda não tiver):
kubectl create clusterrolebinding cluster-admin-binding \ -clusterrole cluster-admin \-user "$(gcloud config get-value account)"Agora vamos criar uma service account dedicada do Kubernetes com as permissões necessárias:
kubectl create serviceaccount external-svcE agora vamos vincular algumas roles a essa service account. Neste caso, atrelamos batch. Jobs — view, list, create.
Isso vai permitir que o serviço externo crie e observe o Kubernetes (arquivo rbac.yaml aqui):
kubectl create -f rbac.yamlAgora precisamos extrair o nome único da service account:
export secret=`kubectl get serviceaccount external-svc -o json | jq -Mr ‘.secrets[].name’`Em seguida, vamos obter o certificado CA do cluster e salvá-lo localmente em um arquivo ca.crt:
kubectl get secrets $secret -o json | jq -Mr ‘.data["ca.crt"]’ | base64 -D > ca.crtE pegar o token secreto, guardando-o em uma variável de ambiente:
export token=`kubectl get secrets $secret -o json | jq -Mr ‘.data.token’ | base64 -D`Vamos descobrir o IP do cluster:
kubectl cluster-infoAgora vamos tentar listar todos os jobs com o novo token da service account a partir da nossa máquina local:
curl ‘https://<cluster-ip>/apis/batch/v1/namespaces/default/jobs’ -cacert ca.crt -H "Authorization: Bearer $token"E também criar um job de exemplo a partir de fora do cluster:
curl -X POST -H ‘Content-Type: application/yaml’-data-binary.yaml -cacert ca.crt -H "Authorization: Bearer $token" ‘https://<cluster-ip>/apis/batch/v1/namespaces/default/jobs’Pronto. Agora você pode usar o token e o ca.crt da forma que quiser para chamar a API do Kubernetes de fora do cluster.
Essa estratégia permite criar um serviço com privilégio mínimo, que só acessa endpoints específicos da API. Vale lembrar: o token funciona como uma senha do seu cluster e deve ser tratado como qualquer outro secret.
Há algumas outras estratégias para chegar ao mesmo resultado, todas documentadas aqui.
Os comandos e os arquivos yaml estão hospedados no GitLab.
Quer mais conteúdos como esse? Confira o nosso blog ou siga o Eran no Twitter.