涅槃を目指す in はてな

人生に迷う様を書きます

Kubernetes The Hard Way On VirtualBox 3日目

Generating Kubernetes Configuration Files for Authentication

前回は証明書の作成と配布を行いました。

今回はkubeconfigのようなconfigファイルを作成し、、クライアントツールが Kubernetes API サーバと認証成功できるようにします。

クライアント認証の設定

ここでは、adminユーザ,controller manager, kube-proxy, schedulerそれぞれのためのkubeconfigファイルを作成します。

Kubernetes Public IP Address

各kubeconfigには接続するKubernetes API Serverの設定が必要です。高可用性のためにロードバランサーIPアドレスを使います。

今の環境では 192.168.5.30 です。

環境変数に設定します。

LOADBALANCER_ADDRESS=192.168.5.30

kube-proxy Kubernetes Configuration Filesの作成

以下のようにして、kube-proxy サービス用のkubeconfigファイルを作成します。

{
  kubectl config set-cluster kubernetes-the-hard-way \
    --certificate-authority=ca.crt \
    --embed-certs=true \
    --server=https://${LOADBALANCER_ADDRESS}:6443 \
    --kubeconfig=kube-proxy.kubeconfig

  kubectl config set-credentials system:kube-proxy \
    --client-certificate=kube-proxy.crt \
    --client-key=kube-proxy.key \
    --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
}

以下のファイルが出来ていることを確認

kube-proxy.kubeconfig

kube-controller-manager Kubernetes Configuration Filesの作成

次はkube-controller-manager サービス用のkubeconfigファイルを作成します。

{
  kubectl config set-cluster kubernetes-the-hard-way \
    --certificate-authority=ca.crt \
    --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.crt \
    --client-key=kube-controller-manager.key \
    --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

kube-scheduler Kubernetes Configuration Filesの作成

次はkube-schedulerサービス用のkubeconfigファイルを作成します。

{
  kubectl config set-cluster kubernetes-the-hard-way \
    --certificate-authority=ca.crt \
    --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.crt \
    --client-key=kube-scheduler.key \
    --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

admin Kubernetes Configuration Filesの作成

次はadminユーザ用のkubeconfigファイルを作成します。 Serverの値はローカルホストを示しているが、これで良いのか?(軽く不安になるけど、迷わず行けよ。行けば分かるさ)

{
  kubectl config set-cluster kubernetes-the-hard-way \
    --certificate-authority=ca.crt \
    --embed-certs=true \
    --server=https://127.0.0.1:6443 \
    --kubeconfig=admin.kubeconfig

  kubectl config set-credentials admin \
    --client-certificate=admin.crt \
    --client-key=admin.key \
    --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

Kubernetes Configuration Filesの配布

kube-proxy 用のkubeconfigをworkerインスタンスに配布します

手元のPCにからやってるので公式手順と異なってます。

for instance in vagrant@192.168.5.21  vagrant@192.168.5.22 ; do
  scp kube-proxy.kubeconfig ${instance}:~/
done

admin.kubeconfig, kube-controller-manager,kube-schedulerのkubeconfigをmasterインスタンスにコピーします。

for instance in vagrant@192.168.5.11 vagrant@192.168.5.12; do
  scp admin.kubeconfig kube-controller-manager.kubeconfig kube-scheduler.kubeconfig ${instance}:~/
done

今日はここまで。

お読みいただきありがとうございました!