K8S The Hard Way 3/10 - Arquivos de Configuração

Mon, Feb 15, 2021 3-minute read

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