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