Kubernetes the Hard Way on Azure : 5. kubeconfig

こんにちは。

引き続き、Kubernetes the Hard Way on Azure を進めていきます。

5. Generating Kubernetes Configuration Files for Authentication

このラボでは、kubernetes クライアントが Kubernetes API サーバを見つけて認証できるようにするkubeconfigとも呼ばれるKubernetes構成ファイルを生成します。

f:id:dombri:20200209144421j:plain

またもやなかった概念、現る。

Client Authentication Configs

controller manager kubelet kube-proxy scheduler のクライアント・管理 ユーザのkubeconfigファイルを生成します。

Kubernetes Public IP Address

各kubeconfigには、接続するAPIサーバが必要です。高可用性をサポートするために、APIサーバの前面にある外部ロードバランサに割り当てられたIPアドレスが使用されます。
静的IPアドレス[Kubernetes-the-hard-way] を取得します。

KUBERNETES_PUBLIC_ADDRESS=$(az network public-ip show -g kubernetes \
  -n kubernetes-pip --query "ipAddress" -otsv)


The kubelet Kubernetes Configuration File

Kubeletのkubeconfigファイルを生成する場合、Kubeletのノード名に一致するクライアント証明書を使用する必要があります。これにより、Kubelet が Kubernetes Node Authorizer によって適切に承認されます。

各ワーカーノードのkubeconfig ファイルを生成します。

for instance in worker-0 worker-1; 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

# 以下が生成されます
worker-0.kubeconfig
worker-1.kubeconfig


The kube-proxy Kubernetes Configuration File

Kube-proxyサービスのkubeconfigファイルを生成します。

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 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=kube-proxy \
  --kubeconfig=kube-proxy.kubeconfig

kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig

# 以下が生成されます
kube-proxy.kubeconfig


The kube-controller-manager Kubernetes Configuration File

Kube-controller-manager サービスのkubeconfigファイルを生成します。

{
  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
}

# 以下が生成されます
kube-controller-manager.kubeconfig


The kube-scheduler Kubernetes Configuration File

Kube-schedulerサービスのkubeconfigファイルを生成します。

{
  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
}

# 以下が生成されます
kube-scheduler.kubeconfig


The admin Kubernetes Configuration File

Adminユーザのkubeconfigファイルを生成します。

{
  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
}

# 以下が生成されます
admin.kubeconfig


Distribute the Kubernetes Configuration Files

適切なkubeletおよびkube-proxy kubeconfigファイルを各ワーカインスタンスにコピーします。

for instance in worker-0 worker-1; do
  PUBLIC_IP_ADDRESS=$(az network public-ip show -g kubernetes \
​    -n ${instance}-pip --query "ipAddress" -otsv)
  scp ${instance}.kubeconfig kube-proxy.kubeconfig kuberoot@${PUBLIC_IP_ADDRESS}:~/
done

適切な kube-controller-manager および kube-scheduler kubeconfig ファイルを各コントローラインスタンスにコピーします。

for instance in controller-0 controller-1 ; do
  PUBLIC_IP_ADDRESS=$(az network public-ip show -g kubernetes \
​    -n ${instance}-pip --query "ipAddress" -otsv)
  scp admin.kubeconfig kube-controller-manager.kubeconfig kube-scheduler.kubeconfig kuberoot@${PUBLIC_IP_ADDRESS}:~/
done


この章で行ったこと

  • kubeconfig ファイルの生成
    • kubernetesクライアントがKubernetes APIサーバを見つけて認証できるようにする構成ファイル
  • kubeconfig ファイルの配置

6.へ続きます。