Configuração de Autenticação
Vamos gerar arquivos os 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.
o resultado será os configs para o controller manager, kubelet, kube-proxy, scheduler e o usuário administrador.
Kubernetes DNS Público
Cada kubeconfig requer um servidor Kubernetes API para se conectar. Para oferecer suporte à alta disponibilidade, o endereço IP atribuído ao balanceador de carga externo na frente dos servidores da API Kubernetes será usado.
KUBERNETES_PUBLIC_ADDRESS=$(aws elbv2 describe-load-balancers \ --load-balancer-arns ${LOAD_BALANCER_ARN} \ --output text --query 'LoadBalancers[0].DNSName') echo "$KUBERNETES_PUBLIC_ADDRESS"
Kubeconfig (Workers)
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.
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}:443 \ --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 ls worker-0.kubeconfig worker-1.kubeconfig worker-2.kubeconfig
Kubeconfig (Proxy)
kubectl config set-cluster kubernetes-the-hard-way \ --certificate-authority=ca.pem \ --embed-certs=true \ --server=https://${KUBERNETES_PUBLIC_ADDRESS}:443 \ --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 cat kube-proxy.kubeconfig
Kubeconfig (Controller)
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 cat kube-controller-manager.kubeconfig
Kubeconfig (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 cat kube-scheduler.kubeconfig
Kubeconfig (Admin)
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 cat admin.kubeconfig
Distribuindo Kubeconfig (Workers)
Copiaremos os arquivos kubelet e kube-proxy kubeconfig gerados para cada worker:
for instance in worker-0 worker-1 worker-2; do external_ip=$(aws ec2 describe-instances --filters \ "Name=tag:Name,Values=${instance}" \ "Name=instance-state-name,Values=running" \ --output text --query 'Reservations[].Instances[].PublicIpAddress') scp -i kubernetes.id_rsa \ ${instance}.kubeconfig kube-proxy.kubeconfig ubuntu@${external_ip}:~/ done
Distribuindo Kubeconfig (Controllers)
Copiaremos os arquivos kubeconfig kube-controller-manager e kube-scheduler em cada instância dos controllers:
for instance in controller-0 controller-1 controller-2; do external_ip=$(aws ec2 describe-instances --filters \ "Name=tag:Name,Values=${instance}" \ "Name=instance-state-name,Values=running" \ --output text --query 'Reservations[].Instances[].PublicIpAddress') scp -i kubernetes.id_rsa \ admin.kubeconfig kube-controller-manager.kubeconfig kube-scheduler.kubeconfig ubuntu@${external_ip}:~/ done