Adicionando usuários a um cluster do Kubernetes

8 Outubro 2019

Parte 1 - Etapas a serem executadas pelo próprio usuário

1.1) Gerar um par de chaves RSA ou SSA

Se você já possui um par de chaves (certificados) que utiliza para fazer autenticação em servidores SSH, GitHub, BitBucket, entre outros, provavelmente você pode pular diretamente para o passo 2, e usar os certificados presentes na sua pasta ~/.ssh (assumindo que você esteja utilizando o Linux).

Caso contrário, gere um par de chaves com o comando abaixo. Você pode trocar meu_certificado por um outro nome de sua preferência.

ssh-keygen -f meu_certificado.key

1.2) Gerar uma requisição de assinatura de certificado

Para gerar uma requisição de assinatuar de certificado (CSR - Certificate Signing Request), rode o comando abaixo passando o nome do certificado gerado no passo 1 (no nosso caso, meu_certificado é o nome da chave).

openssl req -new -key meu_certificado.key -out meu_certificado.csr -subj "/CN=usuario_kubernetes/O=grupo_kubernetes"

Parte 2 - Etapas a serem executadas pelo administrador do cluster Kubernetes

2.1) Criar um CSR no Kubernetes

cat <<EOF | kubectl apply -f -
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
    name: meu_certificado.csr
spec:
  request: $(cat meu_certificado.csr | base64 | tr -d '\n')
  usages:
  - client auth
EOF

2.2) Aprovar certificado

kubectl certificate approve meu_certificado.csr

2.3) Extrair certificado assinado

kubectl get csr meu_certificado.csr -o jsonpath={.status.certificate} | base64 -d > meu_certificado.crt

2.4) Revisar certificado

openssl x509 -noout -text -in meu_certificado.crt

2.5) Criar ClusterRoleBinding

Esse é o passo final, que associa o usuário criado (no nosso exemplo, usuario_kubernetes) a um ClusterRole. Aqui estamos assumindo que o ClusterRole já tenha sido criado, e se chama developer.

Arquivo yaml a ser aplicado (ClusterRoleBinding.usuario_kubernetes.yaml):

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: usuario_kubernetes
subjects:
- kind: User
  name: usuario_kubernetes
  namespace: default
roleRef:
  kind: ClusterRole
  name: developer
  apiGroup: rbac.authorization.k8s.io
kubectl apply -f ClusterRoleBinding.usuario_kubernetes.yaml