K8S The Hard Way 3/10 - Arquivos de Configuração
Gerando arquivos de configuração do Kubernetes para autenticação
Neste laboratório, você gerará arquivos de configuração do Kubernetes, também conhecidos como kubeconfigs, que permitem que os clientes do Kubernetes localizem e se autentiquem nos servidores da API do Kubernetes.
Configurações de autenticação de cliente
Nesta seção, você irá gerar arquivos kubeconfig para o gerenciador de controlador, kubelet, kube-proxy e clientes do planejador e o usuário administrador.
IP público do Kubernetes(Loadbalance)
Cada kubeconfig requer um servidor da API Kubernetes para se conectar. Para oferecer suporte à alta disponibilidade, o endereço IP atribuído ao balanceador de carga vai ficar na frente dos servidores da API Kubernetes.
Recupere o endereço IP estático do loadbalance:
KUBERNETES_PUBLIC_ADDRESS=`sudo vagrant ssh-config loadbalancer | grep HostName | xargs | sed 's/HostName//g' | xargs`
Arquivo de configuração do kubelet
Ao gerar arquivos kubeconfig para Kubelets, o certificado do cliente correspondente ao nome do nó do Kubelet deve ser usado. Isso garantirá que os Kubelets sejam devidamente autorizados pelo Autorizador de Nó do Kubernetes.
Os comandos a seguir devem ser executados no mesmo diretório usado para gerar os certificados SSL durante o laboratório Geração de certificados TLS. Gere um arquivo kubeconfig para cada nó de trabalho:
for instance in worker-0 worker-1 worker-2; do
kubectl config set-cluster kubernetes-the-hard-way \
--certificate-authority=ca.pem \
--embed-certs=true \
--server=https://${KUBERNETES_PUBLIC_ADDRESS}:6443 \
--kubeconfig=${instance}.kubeconfig
kubectl config set-credentials system:node:${instance} \
--client-certificate=${instance}.pem \
--client-key=${instance}-key.pem \
--embed-certs=true \
--kubeconfig=${instance}.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=system:node:${instance} \
--kubeconfig=${instance}.kubeconfig
kubectl config use-context default --kubeconfig=${instance}.kubeconfig
done
Resultado
worker-0.kubeconfig
worker-1.kubeconfig
worker-2.kubeconfig
Arquivo de configuração do kube-proxy
Gere um arquivo kubeconfig para o serviço kube-proxy:
kubectl config set-cluster kubernetes-the-hard-way \
--certificate-authority=ca.pem \
--embed-certs=true \
--server=https://${KUBERNETES_PUBLIC_ADDRESS}:6443 \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-credentials system:kube-proxy \
--client-certificate=kube-proxy.pem \
--client-key=kube-proxy-key.pem \
--embed-certs=true \
--kubeconfig=kube-proxy.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=system:kube-proxy \
--kubeconfig=kube-proxy.kubeconfig
kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
Resultado
kube-proxy.kubeconfig
Arquivo de configuração do kube-controller-manager
Gere um arquivo kubeconfig para o serviço kube-controller-manager:
kubectl config set-cluster kubernetes-the-hard-way \
--certificate-authority=ca.pem \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=kube-controller-manager.kubeconfig
kubectl config set-credentials system:kube-controller-manager \
--client-certificate=kube-controller-manager.pem \
--client-key=kube-controller-manager-key.pem \
--embed-certs=true \
--kubeconfig=kube-controller-manager.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=system:kube-controller-manager \
--kubeconfig=kube-controller-manager.kubeconfig
kubectl config use-context default --kubeconfig=kube-controller-manager.kubeconfig
Resultado
kube-controller-manager.kubeconfig
Arquivo de configuração do kube-scheduler
Gere um arquivo kubeconfig para o serviço kube-scheduler:
kubectl config set-cluster kubernetes-the-hard-way \
--certificate-authority=ca.pem \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=kube-scheduler.kubeconfig
kubectl config set-credentials system:kube-scheduler \
--client-certificate=kube-scheduler.pem \
--client-key=kube-scheduler-key.pem \
--embed-certs=true \
--kubeconfig=kube-scheduler.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=system:kube-scheduler \
--kubeconfig=kube-scheduler.kubeconfig
kubectl config use-context default --kubeconfig=kube-scheduler.kubeconfig
Resultado
kube-scheduler.kubeconfig
Arquivo de configuração do administrador
Gere um arquivo kubeconfig para o usuário administrador:
kubectl config set-cluster kubernetes-the-hard-way \
--certificate-authority=ca.pem \
--embed-certs=true \
--server=https://127.0.0.1:6443 \
--kubeconfig=admin.kubeconfig
kubectl config set-credentials admin \
--client-certificate=admin.pem \
--client-key=admin-key.pem \
--embed-certs=true \
--kubeconfig=admin.kubeconfig
kubectl config set-context default \
--cluster=kubernetes-the-hard-way \
--user=admin \
--kubeconfig=admin.kubeconfig
kubectl config use-context default --kubeconfig=admin.kubeconfig
Resultado
admin.kubeconfig
Distribuir os arquivos de configuração do Kubernetes
Copie os arquivos kubelet e kube-proxy kubeconfig apropriados para cada instância de trabalho:
for instance in worker-0 worker-1 worker-2; do
IP=`sudo vagrant ssh-config $instance | grep HostName | xargs | sed 's/HostName//g' | xargs`
sudo scp -i /home/$USER/vagrant-vm/kubernetes-the-hard-way/.vagrant/machines/$instance/libvirt/private_key \
${instance}.kubeconfig kube-proxy.kubeconfig \
vagrant@${IP}:~/
done
Copie os arquivos kubeconfig kube-controller-manager e kube-scheduler apropriados para cada instância do controlador:
for instance in controller-0 controller-1 controller-2; do
IP=`sudo vagrant ssh-config $instance | grep HostName | xargs | sed 's/HostName//g' | xargs`
sudo scp -i /home/$USER/vagrant-vm/kubernetes-the-hard-way/.vagrant/machines/$instance/libvirt/private_key \
admin.kubeconfig kube-controller-manager.kubeconfig kube-scheduler.kubeconfig \
vagrant@${IP}:~/
done
Proximo: K8S The Hard Way 4/10 - Criptografia