cks

3.12 Secrets no etcd

Detalhamento do acesso a Secrets armazenados no etcd para o CKS.

O que é

No Kubernetes, Secrets (e outros recursos) são persistidos no etcd. Em clusters kubeadm, o API server se conecta ao etcd usando certificados. Com etcdctl e os certs corretos você pode ler diretamente as chaves do etcd (ex.: /registry/secrets/<namespace>/<secret-name>). Os valores ficam em Base64; para uso legível é preciso decodificar.

Documentação oficial

Certificados do API server para etcd

Os paths dos certs costumam estar no manifest do kube-apiserver:

grep etcd /etc/kubernetes/manifests/kube-apiserver.yaml

Tipicamente aparecem:

Em muitos clusters kubeadm:

Comando etcdctl (API v3)

ETCDCTL_API=3 etcdctl \
  --cert /etc/kubernetes/pki/apiserver-etcd-client.crt \
  --key /etc/kubernetes/pki/apiserver-etcd-client.key \
  --cacert /etc/kubernetes/pki/etcd/ca.crt \
  get /registry/secrets/<namespace>/<secret-name>

Decodificar valor de Secret

Os dados dos Secrets no Kubernetes estão em Base64. Para decodificar:

echo <base64-value> | base64 -d

Se você extrair do etcd o conteúdo do secret (ex.: campo .data.password), use o mesmo base64 -d para ver o valor em claro.

Segurança

Resumo para o exame

  1. Achar certs: grep etcd /etc/kubernetes/manifests/kube-apiserver.yaml.
  2. ETCDCTL_API=3 etcdctl --cert ... --key ... --cacert ... get /registry/secrets/<ns>/<name>.
  3. Decodificar campos do secret: echo <base64> | base64 -d.