Skip to content

Latest commit

 

History

History
executable file
·
380 lines (280 loc) · 12.1 KB

9.Kubeconfig.md

File metadata and controls

executable file
·
380 lines (280 loc) · 12.1 KB

Kimlik Doğrulama için Kubernetes Konfigürasyon Dosyalarının Oluşturulması

Bu bölümde Kubernetes API'sini tüketecek istemci uygulamaların kullanacağı konfigürasyon dosyalarını oluşturacağız. Bu dosyaların (kubeconfig) temel amacı komut satırında farklı Kubertes cluster'larını yönetmemizi kolaylaştırmaktır. Bu tür bi konfigürasyon dosyası olmasaydı örneğin kubectl kullanırken Kubernetes API'sine bağlanabilmek için sertifika, güvenlik, cluster bilgileri gibi birçok parametreyi hatırlamak durumunda kalacaktık.

Kubelet için Kubeconfig Dosyalarının Oluşurulması

Kubelet'ler için kubeconfig dosyaları oluştururken, Kubelet'in node adıyla eşleşen istemci sertifikası kullanılmalıdır. Bu, Kubelet'in Kubernetes "Node Authorizer" tarafından uygun şekilde yetkilendirilmesini sağlayacaktır.

KUBERNETES_PUBLIC_ADDRESS için load balancer'larımız için oluşturduğumuz virtual ip adresini kullanıyor olacağız. Böylece Kubernetes API server için High Availability sağlamış olacağız.

Linux ve Mac için

cd ~/kubernetes

KUBERNETES_PUBLIC_ADDRESS=10.240.10.10

for instance in worker-01 worker-02 worker-03; 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

Windows için

cd ~/kubernetes

$instances = @{'worker-01'='10.240.10.7'; 'worker-02'='10.240.10.8';'worker-03'='10.240.10.9'} 

$KUBERNETES_PUBLIC_ADDRESS="10.240.10.10"

foreach ($instance in $instances.keys)
{
  .\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
}

Sonuçta 3 adet kubeconfig dosyası oluşmuş olacak.

  • worker-01.kubeconfig
  • worker-02.kubeconfig
  • worker-03.kubeconfig

Kube-proxy için Kubeconfig Dosyasının Oluşurulması

Linux ve Mac için

KUBERNETES_PUBLIC_ADDRESS=10.240.10.10

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

Windows için

$KUBERNETES_PUBLIC_ADDRESS="10.240.10.10"

.\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

Sonuçta 1 adet kubeconfig dosyası oluşmuş olmalıdır.

  • kube-proxy.kubeconfig

Kube-controller-manager için Kubeconfig Dosyasının Oluşurulması

Mac ve Linux için

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

Windows için

.\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

Sonuçta 1 adet kubeconfig dosyası oluşmuş olmalıdır.

  • kube-controller-manager.kubeconfig

Kube-scheduler için Kubeconfig Dosyasının Oluşurulması

Linux va Mac için

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

Windows için

.\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

Sonuçta 1 adet kubeconfig dosyası oluşmuş olmalıdır.

  • kube-scheduler.kubeconfig

Admin Kullanıcısı İçin Kubeconfig Dosyasının Oluşturulması

Linux ve Mac için

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

Windows için

.\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

Sonuçta 1 adet kubeconfig dosyası oluşmuş olmalıdır.

  • admin.kubeconfig

Kubeconfig Dosyalarının Dağıtılması

LXC kullananlar için

Kubelet ve kubeproxy kubeconfig dosyalarının worker node'lara taşınması.

for instance in worker-01 worker-02 worker-03; do  
  lxc file push ${instance}.kubeconfig kube-proxy.kubeconfig ${instance}/home/ubuntu/
done

kube-controller-manager ve kube-scheduler kubeconfig dosyalarının controller node'lara taşınması.

for instance in controller-01 controller-02 controller-03; do
  lxc file push admin.kubeconfig kube-controller-manager.kubeconfig kube-scheduler.kubeconfig ${instance}/home/ubuntu/
done

(Linux ve Mac) SSH kullananlar için

Kubelet ve kubeproxy kubeconfig dosyalarının worker node'lara taşınması.

for instance in worker-01 worker-02 worker-03; do
  scp ca.pem ${instance}-key.pem ${instance}.pem ${instance}:~/kubernetes
done

kube-controller-manager ve kube-scheduler kubeconfig dosyalarının controller node'lara taşınması.

for instance in controller-01 controller-02 controller-03; do
  scp ca.pem ca-key.pem kubernetes-key.pem kubernetes.pem \
    service-account-key.pem service-account.pem ${instance}:~/kubernetes
done

Windows için

kubelet ve kubeproxy kubeconfig dosyalarının worker node'lara taşınması.

$instances = @{"worker-01"="10.240.10.7"; "worker-02"="10.240.10.8";"worker-03"="10.240.10.9"} 

foreach ($key in $instances.keys)
{
  $instance=$key
  $internal_ip=$instances[$key]

  scp ca.pem $instance-key.pem $instance.pem $internal_ip:~/kubernetes
}

kube-controller-manager ve kube-scheduler kubeconfig dosyalarının controller node'lara taşınması.

$instances = @{"controller-01"="10.240.10.4"; "controller-02"="10.240.10.5";"controller-03"="10.240.10.6"} 

foreach ($key in $instances.keys)
{
  $instance=$key
  $internal_ip=$instances[$key]

  scp ca.pem ca-key.pem kubernetes-key.pem kubernetes.pem `
    service-account-key.pem service-account.pem $internal_ip:~/kubernetes
}