Criar API TOKEN
Introdução
Esta documentação descreve o processo para criar um token de API não expirável e persistente para uma ServiceAccount no Kubernetes, utilizando um Secret do tipo kubernetes.io/service-account-token. Esse método é útil quando o mecanismo de solicitação de token não é adequado, fornecendo tokens de longa duração.
Crie tokens de API de longa duração apenas se o mecanismo de solicitação de token não for adequado. O mecanismo de solicitação de token fornece tokens com tempo limitado; devido à sua expiração, representam um risco menor à segurança da informação.
Passos para Criar um Token de API Persistente
1. Criação de um Secret
Para criar um token de API não expirável para uma ServiceAccount, crie um Secret do tipo kubernetes.io/service-account-token com uma anotação referenciando a ServiceAccount. O plano de controle gerará um token de longa duração e atualizará o Secret com os dados do token gerado.
2. Manifesto de Exemplo
Altere os campos my-serviceaccount e my-namespace para os valores de sua preferência.
Service Account:
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-serviceaccount
namespace: my-namespaceSecret:
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
name: my-secretname
namespace: my-namespace
annotations:
kubernetes.io/service-account.name: my-serviceaccount3. Crie um ClusterRole e um ClusterRoleBinding com permissões de READ para o Cluster:
ClusterRole:
Regra para somente ler o cluster (get)
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: read-cluster-admin
rules:
- apiGroups:
- "*"
resources:
- "*"
verbs:
- "*"
- nonResourceURLs:
- "*"
verbs: ["get"]ClusterRoleBinding:
O ClusterRoleBinding dá as regras criadas no ClusterRole para a ServiceAccount (my-serviceaccount) criada anteriomente.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: my-clusterrolebinding
subjects:
- kind: ServiceAccount
name: my-serviceaccount
namespace: my-namespace
roleRef:
kind: ClusterRole
name: read-cluster-admin
apiGroup: rbac.authorization.k8s.ioE então o secret usado por essa ServiceAccount pode ser usado somente para ler o Cluster, como indicado em "verbs: ["get"]"
4. Verificação dos Detalhes do Secret
Para ver os detalhes do Secret criado, execute:
kubectl -n my-namespace describe secret my-secretname5. Exemplo de Saída
A saída será semelhante a:
Namespace: my-namespace
Labels: <none>
Annotations: kubernetes.io/service-account.name=my-serviceaccount
kubernetes.io/service-account.uid=8a85c4c4-8483-11e9-bc42-526af7764f64
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1362 bytes
namespace: 9 bytes
token: <TOKEN_GERADO>6. Rode o seguinte comando mostrar o Token Gerado:
kubectl get secret my-secretname -n my-namespace -o jsonpath='{.data.token}' | base64 --decode7. Rode o seguinte comando para validar o Token:
curl -H "Authorization: Bearer <TOKEN>" -k https://<kubernetes-api-server>/api/v1/nodes