Kubernetes Configuration Files for Authentication
https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/ にて述べられている設定ファイルを生成する。
Client Authentication Configs
ここでは、controller manager, kubelet, kube-proxy, scheduler clients, admin user についての設定ファイルを生成する。
kubernetes のエンドポイントとなる IP アドレスの指定が必要なのだが、今回は ELB などを前段に置かないようにしたので Master Node 1 の Private IP をエントリポイントとして利用した。
Master から kubectl も利用する。
kube-proxy 用 Configuration File
以下のコマンドにより生成する。
$ kubectl config set-cluster kubernetes-the-hard-way \
> --certificate-authority=ca.crt \
> --embed-certs=true \
> --server=https://192.168.0.37:6443 \
> --kubeconfig=kube-proxy.kubeconfig
Cluster "kubernetes-the-hard-way" set.
$ kubectl config set-credentials system:kube-proxy \
> --client-certificate=kube-proxy.crt \
> --client-key=kube-proxy.key \
> --embed-certs=true \
> --kubeconfig=kube-proxy.kubeconfig
User "system:kube-proxy" set.
$ kubectl config set-context default \
> --cluster=kubernetes-the-hard-way \
> --user=system:kube-proxy \
> --kubeconfig=kube-proxy.kubeconfig
Context "default" created.
$ kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig
Switched to context "default".
kube-proxy はワーカーとマスターの通信になるので --server は自分はマスターの Private IP にした。ほんとは冗長化された VIP を使うべきだろう。
AWS だったら Internal NLB とか使うことになるだろうけど、なんかそれもちょっと微妙だな。
とりあえず、上記の結果として kube-proxy.kubeconfig というファイルが生成されていることがわかる。
これは後ほどワーカが利用する。
kube-controller-manager 用 Configuration File
同様に、以下コマンド。
$ 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
Cluster "kubernetes-the-hard-way" set.
$ 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
User "system:kube-controller-manager" set.
$ kubectl config set-context default \
> --cluster=kubernetes-the-hard-way \
> --user=system:kube-controller-manager \
> --kubeconfig=kube-controller-manager.kubeconfig
Context "default" created.
$ kubectl config use-context default --kubeconfig=kube-controller-manager.kubeconfig
Switched to context "default".
結果として kube-controller-manager.kubeconfig というファイルが生成されていることがわかる。
kube-scheduler 用 Configuration File
$ 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
Cluster "kubernetes-the-hard-way" set.
$ kubectl config set-credentials system:kube-scheduler \
> --client-certificate=kube-scheduler.crt \
> --client-key=kube-scheduler.key \
> --embed-certs=true \
> --kubeconfig=kube-scheduler.kubeconfig
User "system:kube-scheduler" set.
$ kubectl config set-context default \
> --cluster=kubernetes-the-hard-way \
> --user=system:kube-scheduler \
> --kubeconfig=kube-scheduler.kubeconfig
Context "default" created.
$ kubectl config use-context default --kubeconfig=kube-scheduler.kubeconfig
Switched to context "default".
admin 用 Configuration File
$ 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
Cluster "kubernetes-the-hard-way" set.
$ kubectl config set-credentials admin \
> --client-certificate=admin.crt \
> --client-key=admin.key \
> --embed-certs=true \
> --kubeconfig=admin.kubeconfig
User "admin" set.
$ kubectl config set-context default \
> --cluster=kubernetes-the-hard-way \
> --user=admin \
> --kubeconfig=admin.kubeconfig
Context "default" created.
$ kubectl config use-context default --kubeconfig=admin.kubeconfig
Switched to context "default".
各ファイルの配布
Master Node 1 上で作ったので、2 に配るだけでよい。
$ scp -i .ssh/hoge.pem admin.kubeconfig kube-controller-manager.kubeconfig kube-scheduler.kubeconfig ubuntu@192.168.1.159:~/
admin.kubeconfig 100% 5301 5.5MB/s 00:00
kube-controller-manager.kubeconfig 100% 5355 6.5MB/s 00:00
kube-scheduler.kubeconfig 100% 5317 6.0MB/s 00:00
kube-proxy.kubeconfig は、ワーカーノードにくばる。
これにより、ワーカーノードは Master Node 1 に対してアクセスを行うこととなる。
(実際には LB などで冗長化して、VIP となるものを渡す認識)
for instance in worker1 worker2; do
scp kube-proxy.kubeconfig ${instance}:~/
done
