Salve Salve Pessoal!
Dando continuidade a nossa serie de posts Kubernetes The Hard Way no Slackware 15, nesse post nos vamos ver como criar toda a infraestrutura PKI, usando as ferramentas cfssl e cfssljson para provisionar uma CA e gerar todos os Certificados TLS.
Para quem ainda não leu os posts anteriores, só clicar nos links abaixo.
Kubernetes The Hard Way no Slackware 15 – Parte 01
Kubernetes The Hard Way no Slackware 15 – Parte 02
Kubernetes The Hard Way no Slackware 15 – Parte 03
Nós vamos gerar os certificados para os seguintes componentes do cluster, lembrando que toda a comunicação dos componentes do kubernetes é atráves de certificados.
-
- etcd
- kube-apiserver
- kube-controller-manager
- kube-scheduler
- kubelet
- kube-proxy
Para começar vamos gerar a autoridade certificadora, que será usada para gerar todos os demais certificados.
Se você estiver olhando o post original no GitHub, observe que alguns comandos vão ser diferentes, ele provisionou a infraestrutura dele usando a Cloud do Google e nós estamos provisionando localmente.
Autoridade Certificadora (CA)
Execute o seguinte código em seu terminal:
{ cat > ca-config.json <<EOF { "signing": { "default": { "expiry": "8760h" }, "profiles": { "kubernetes": { "usages": ["signing", "key encipherment", "server auth", "client auth"], "expiry": "8760h" } } } } EOF cat > ca-csr.json <<EOF { "CN": "Kubernetes", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "US", "L": "Portland", "O": "Kubernetes", "OU": "CA", "ST": "Oregon" } ] } EOF cfssl gencert -initca ca-csr.json | cfssljson -bare ca }
Arquivos esperados:
Agora vamos gerar os certificados cliente e servidor para todos os componentes do cluster, além de gerarmos um certificado para um usuário admin.
Certificado para o usuário admin
Execute o seguinte código em seu terminal:
{ cat > admin-csr.json <<EOF { "CN": "admin", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "US", "L": "Portland", "O": "system:masters", "OU": "Kubernetes The Hard Way", "ST": "Oregon" } ] } EOF cfssl gencert \ -ca=ca.pem \ -ca-key=ca-key.pem \ -config=ca-config.json \ -profile=kubernetes \ admin-csr.json | cfssljson -bare admin }
Arquivos esperados:
Certificados para o Kubelet
Execute o seguinte código em seu terminal, será necessário executar o comando três vezes, uma vez para cada node, observer que coloquei o nome e o IP de cada host no início do código, basta substituir e de acordo com seu ambiente.
HOST="k8s-node-01" IP="10.20.30.84" cat > ${HOST}-csr.json <<EOF { "CN": "system:node:${HOST}", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "US", "L": "Portland", "O": "system:nodes", "OU": "Kubernetes The Hard Way", "ST": "Oregon" } ] } EOF cfssl gencert \ -ca=ca.pem \ -ca-key=ca-key.pem \ -config=ca-config.json \ -hostname=${HOST},${IP} \ -profile=kubernetes \ ${HOST}-csr.json | cfssljson -bare ${HOST}
Arquivos esperados:
Certificado para o Controller Manager
Execute o seguinte código em seu terminal:
{ cat > kube-controller-manager-csr.json <<EOF { "CN": "system:kube-controller-manager", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "US", "L": "Portland", "O": "system:kube-controller-manager", "OU": "Kubernetes The Hard Way", "ST": "Oregon" } ] } EOF cfssl gencert \ -ca=ca.pem \ -ca-key=ca-key.pem \ -config=ca-config.json \ -profile=kubernetes \ kube-controller-manager-csr.json | cfssljson -bare kube-controller-manager }
Arquivos esperados:
Certificado para o Kube Proxy
Execute o seguinte código em seu terminal:
{ cat > kube-proxy-csr.json <<EOF { "CN": "system:kube-proxy", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "US", "L": "Portland", "O": "system:node-proxier", "OU": "Kubernetes The Hard Way", "ST": "Oregon" } ] } EOF cfssl gencert \ -ca=ca.pem \ -ca-key=ca-key.pem \ -config=ca-config.json \ -profile=kubernetes \ kube-proxy-csr.json | cfssljson -bare kube-proxy }
Arquivos esperados:
Certificado para o Kube Scheduler
Execute o seguinte código em seu terminal:
{ cat > kube-scheduler-csr.json <<EOF { "CN": "system:kube-scheduler", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "US", "L": "Portland", "O": "system:kube-scheduler", "OU": "Kubernetes The Hard Way", "ST": "Oregon" } ] } EOF cfssl gencert \ -ca=ca.pem \ -ca-key=ca-key.pem \ -config=ca-config.json \ -profile=kubernetes \ kube-scheduler-csr.json | cfssljson -bare kube-scheduler }
Arquivos esperados:
Certificado para o API Server
Execute o seguinte código em seu terminal, observe que temos os endereços IP dos control planes, modifique de acordo com seu ambiente.
{ cat > kubernetes-csr.json <<EOF { "CN": "kubernetes", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "US", "L": "Portland", "O": "Kubernetes", "OU": "Kubernetes The Hard Way", "ST": "Oregon" } ] } EOF cfssl gencert \ -ca=ca.pem \ -ca-key=ca-key.pem \ -config=ca-config.json \ -hostname=10.32.0.1,10.20.30.81,10.20.30.82,10.20.30.83,127.0.0.1,kubernetes,kubernetes.default,kubernetes.default.svc,kubernetes.default.svc.cluster,kubernetes.svc.cluster.local \ -profile=kubernetes \ kubernetes-csr.json | cfssljson -bare kubernetes }
Arquivos esperados:
Chaves para Service Account
Execute o seguinte código em seu terminal, o Controller Manager usa um par de chaves para gerar e assinar tokens de contas de serviço.
{ cat > service-account-csr.json <<EOF { "CN": "service-accounts", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "US", "L": "Portland", "O": "Kubernetes", "OU": "Kubernetes The Hard Way", "ST": "Oregon" } ] } EOF cfssl gencert \ -ca=ca.pem \ -ca-key=ca-key.pem \ -config=ca-config.json \ -profile=kubernetes \ service-account-csr.json | cfssljson -bare service-account }
Arquivos esperados:
Enviar certificados para os Servidores
Vamos começar enviando os certificados e chaves para os nodes workes.
Envie primeiro para o k8s-node-01.
scp ca.pem k8s-node-01-key.pem k8s-node-01.pem [email protected]:/root
Faça o mesmo processo com k8s-node-02.
scp ca.pem k8s-node-02-key.pem k8s-node-02.pem [email protected]:/root
Agora com o k8s-node-03.
scp ca.pem k8s-node-03-key.pem k8s-node-03.pem [email protected]:/root
Agora vamos enviar os certificados e chaves para os control planes.
Envie primeiro para o k8s-cp-01.
scp ca.pem ca-key.pem kubernetes-key.pem kubernetes.pem service-account-key.pem service-account.pem [email protected]:/root
Faça o mesmo processo com k8s-cp-02.
scp ca.pem ca-key.pem kubernetes-key.pem kubernetes.pem service-account-key.pem service-account.pem [email protected]:/root
Agora com o k8s-node-03.
scp ca.pem ca-key.pem kubernetes-key.pem kubernetes.pem service-account-key.pem service-account.pem [email protected]:/root
É isso pessoal, até o próximo post!
😀
Referência:
Seja o primeiro a comentar