- Autenticação: Verificar se o cliente tem permisssão de acesso. Métodos incluem tokens compartilhados e certificados SSL mútuos.
- Autorização: Confirmar se o usuário tem permissões específicas, usando ABAC, RBAC, NODE ou Webhooks.
- Controle de Admissão: Validar permissões para recursos associados à operação.
O Kubernetes avalia atributos específicos da requisição:
- Identidade do usuário (nome, UID) e grupos.
- Caminho da API, como
/apis/apps/v1/namespaces/{nome-ns}/pods. - Verbo HTTP mapeado para ações (ex.: GET → list, POST → create).
- Recurso, sub-recurso e namespace alvo.
Contas de serviço facilitam a interação de processos dentro de pods com a API do Kubernetes ou serviços externos. Diferem das contas de usuário:
- Contas de usuário são para humanos; contas de serviço são para processos em pods.
- Contas de serviço são limitadas ao namespace, enquanto contas de usuário são globais.
- Cada namespace tem uma conta de serviço padrão criada automatticamente.
- Um controlador de tokens gera secrets para contas de serviço.
- Ao habilitar o controlador de admissão de ServiceAccount:
- Pods são configurados com a conta de serviço padrão se não especificada.
- Secrets de imagem são herdadas da conta de serviço.
- Um token e certificado CA são montados em
/var/run/secrets/kubernetes.io/serviceaccount/.
Criar um namespace e verificar a conta de serviço padrão:
kubectl create ns demo-ns
kubectl get sa -n demo-ns
kubectl get secrets -n demo-ns
Saída esperada:
NAME SECRETS AGE
default 1 10s
Arquivo pod-exemplo.yaml:
apiVersion: v1
kind: Pod
metadata:
name: pod-web
namespace: demo-ns
spec:
containers:
- name: web-container
image: nginx:latest
ports:
- containerPort: 80
serviceAccountName: default
Aplicar e inspecionar:
kubectl apply -f pod-exemplo.yaml
kubectl describe pod pod-web -n demo-ns
Note que o token da conta de serviço é montado automaticamente.
Criar uma nova conta de serviço:
kubectl create serviceaccount gerente
kubectl describe sa gerente
Associar a um pod:
apiVersion: v1
kind: Pod
metadata:
name: pod-gerente
spec:
containers:
- name: app
image: python:3.9
serviceAccountName: gerente
O kubeconfig armazena informações de cluster, usuário e contexto. Exemplo de visualização:
kubectl config view
Para criar um usuário personalizado:
- Gerar certificados com a CA do cluster:
openssl genrsa -out usuario.key 2048
openssl req -new -key usuario.key -out usuario.csr -subj "/CN=usuario"
openssl x509 -req -in usuario.csr -CA ca.crt -CAkey ca.key -out usuario.crt -days 365
- Adicionar usuário ao kubeconfig:
kubectl config set-credentials usuario --client-certificate=usuario.crt --client-key=usuario.key
- Criar um contexto:
kubectl config set-context usuario@meu-cluster --cluster=meu-cluster --user=usuario
- Alternar contexto:
kubectl config use-context usuario@meu-cluster
Testar o acesso:
kubectl get pods # Deve retornar erro de permissão se não houver RBAC
Principais subcomendos:
kubectl config current-context: Exibe o contexto atual.kubectl config set-cluster: Define um novo cluster.kubectl config set-context: Configura um contexto.
Exemplo de configuração de cluster em arquivo separado:
kubectl config set-cluster cluster-dev --server=https://192.168.1.10:6443 --certificate-authority=ca.pem --kubeconfig=dev.conf