Kubernetes the hard way (GCP版)の続きです。
前回の記事はこちら。
Chap5. Generating Kubernetes Configuration Files for Authentication(認証用Kubernetes設定ファイルの作成)
このチャプターではChap4で作成した証明書を利用して、接続設定ファイルとして利用するkubeconfigファイルを作成します。
クライアント認証用のkubeconfigファイルの作成
controller manager
・kubelet
・kube-proxy
・scheduler
・adminユーザー用のkubeconfigファイルを作成します。
最初に外部公開用のIPアドレスをKUBERNETES_PUBLIC_ADDRESS
として取得します。
API Serverの前段に配置するELBで利用するIPアドレスをkubeconfig内で指定することで、Control PlaneのHA構成にも対応することが可能です。
(完全に余談ですが、Kubernetesクラスタの構築ツールの一つであるkubeadmでもHA構成のクラスタを作成できるようです。)
~/w/k/h/04 ❯❯❯ KUBERNETES_PUBLIC_ADDRESS=$(gcloud compute addresses describe kubernetes-the-hard-way \ --region $(gcloud config get-value compute/region) \ --format 'value(address)') ~/w/k/h/04 ❯❯❯ echo $KUBERNETES_PUBLIC_ADDRESS 35.233.237.51
次に、kubelet用のkubeconfigファイルを作成します。
各ノードごとにファイル名は${instance}.kubeconfig
として、kubeconfigファイルにクラスタに関する設定を追加していきます。
~/w/k/h/04 ❯❯❯ 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}: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 Cluster "kubernetes-the-hard-way" set. User "system:node:worker-0" set. Context "default" created. Switched to context "default". Cluster "kubernetes-the-hard-way" set. User "system:node:worker-1" set. Context "default" created. Switched to context "default". Cluster "kubernetes-the-hard-way" set. User "system:node:worker-2" set. Context "default" created. Switched to context "default".
引数や利用するファイルなどは変わりますが、同じコマンドを実行するため実行される各コマンドについて説明しておきます。
最初にkubectl config set-cluster
コマンドでkubeconfigファイルにクラスタの情報を追加します。(下記の情報を引数で渡します。)
--certificate-authority
: 作成したCA証明書ファイル (ca.pem
)--server
:https://${KUBERNETES_PUBLIC_ADDRESS}:6443
(外部公開用のIPアドレスを用いたURL) を指定
kubeletの通信相手はControl PlaneのAPI Serverとなるため、--server
の部分ではAPI Serverの前段に配置予定のELB用のIPアドレスを用いたURLを指定します。
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
コマンドでkubeconfigファイルにクライアント証明書の情報を追加します。
--client-certificate
: 作成したkubelet用のクライアント証明書 ( e.g.worker-0.pem
)--client-key
: 作成したkubelet用のクライアント証明書の秘密鍵 ( e.g.worker-0-key.pem
)
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
コマンドでクラスタのアクセス先情報であるcontextを作成します。
--cluster
: kubeconfig内で指定するクラスタ名(kubernetes-the-hard-way
)--user
: クライアント証明書内で指定したCN(Common Name) ( e.g.node:worker-0
)
--user
で指定するユーザー名は基本的に作成した証明書で指定したCNと同じ名前となります。
kubectl config set-context default \ --cluster=kubernetes-the-hard-way \ --user=system:node:${instance} \ --kubeconfig=${instance}.kubeconfig
次に、kube-proxy用のkubeconfigファイルを作成します。
各ノードごとにファイル名はkube-proxy.kubeconfig
として、先ほどと同じように設定を追加していきます。
同じコマンドを実行していますが、下記の引数は理解しておく必要があると思います。
--server
: kube-proxyの通信相手は同じノード内のAPI Serverであるため、https://${KUBERNETES_PUBLIC_ADDRESS}:6443
を指定--user
: クライアント証明書内で指定したCN(Common Name) であるsystem:kube-proxy
を指定
~/w/k/h/04 ❯❯❯ { 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 } Cluster "kubernetes-the-hard-way" set. User "system:kube-proxy" set. Context "default" created. Switched to context "default".
同様に、kube-scheduler・kube-controller-manager用のkubeconfigファイルを作成します。
Control Planeで利用するkubeconfigファイルを作成して、先ほどと同じように設定を追加していきます。
一部の引数について説明を記載しておきます。
--server
: 2つのコンポーネントの通信相手は同じノード内のAPI Serverとなるため、ループバックアドレスを用いてhttps://127.0.0.1:6443
を指定--user
: クライアント証明書内で指定したCN(Common Name) を指定 (system:kube-controller-manager
,system:kube-scheduler
)
~/w/k/h/04 ❯❯❯ { 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 } Cluster "kubernetes-the-hard-way" set. User "system:kube-controller-manager" set. Context "default" created. Switched to context "default". ~/w/k/h/04 ❯❯❯ { 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 } Cluster "kubernetes-the-hard-way" set. User "system:kube-scheduler" set. Context "default" created. Switched to context "default".
最後に、adminユーザー用のkubeconfigファイルを作成します。
このkubeconfigファイルはクラスタと通信するクライアント側で利用するkubeconfigファイルではないので注意が必要です。
(Chap8. でControl Plane内で各種設定を行う際に利用する用のconfigファイルだと考えられます。)
一部の引数について説明を記載しておきます。
--server
: Control Plane内で利用するkubeconfigファイルなので、ループバックアドレスを用いてhttps://127.0.0.1:6443
を指定--user
: クライアント証明書内で指定したCN(Common Name) を指定 (admin
)
w/k/h/04 ❯❯❯ { 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 } Cluster "kubernetes-the-hard-way" set. User "admin" set. Context "default" created. Switched to context "default".
kubeconfigファイルの作成が完了したら、コンポーネントが存在するNodeにファイルを配布していきます。
w/k/h/04 ❯❯❯ for instance in worker-0 worker-1 worker-2; do gcloud compute scp ${instance}.kubeconfig kube-proxy.kubeconfig ${instance}:~/ done Enter passphrase for key '/Users/.../.ssh/google_compute_engine': worker-0.kubeconfig 100% 6383 59.0KB/s 00:00 kube-proxy.kubeconfig 100% 6321 65.0KB/s 00:00 Enter passphrase for key '/Users/.../.ssh/google_compute_engine': worker-1.kubeconfig 100% 6383 31.4KB/s 00:00 kube-proxy.kubeconfig 100% 6321 61.9KB/s 00:00 Enter passphrase for key '/Users/.../.ssh/google_compute_engine': worker-2.kubeconfig 100% 6383 61.1KB/s 00:00 kube-proxy.kubeconfig 100% 6321 60.4KB/s 00:00 ~/w/k/h/04 ❯❯❯ for instance in controller-0 controller-1 controller-2; do gcloud compute scp admin.kubeconfig kube-controller-manager.kubeconfig kube-scheduler.kubeconfig ${instance}:~/ done Enter passphrase for key '/Users/.../.ssh/google_compute_engine': admin.kubeconfig 100% 6265 61.8KB/s 00:00 kube-controller-manager.kubeconfig 100% 6387 57.8KB/s 00:00 kube-scheduler.kubeconfig 100% 6337 59.1KB/s 00:00 Enter passphrase for key '/Users/.../.ssh/google_compute_engine': admin.kubeconfig 100% 6265 22.8KB/s 00:00 kube-controller-manager.kubeconfig 100% 6387 60.8KB/s 00:00 kube-scheduler.kubeconfig 100% 6337 63.9KB/s 00:00 Enter passphrase for key '/Users/.../.ssh/google_compute_engine': admin.kubeconfig 100% 6265 52.7KB/s 00:00 kube-controller-manager.kubeconfig 100% 6387 58.5KB/s 00:00 kube-scheduler.kubeconfig 100% 6337 64.2KB/s 00:00 ~/w/k/h/04 ❯❯❯
今回は、Chap5の内容をざっくりまとめました。
他に参考にした資料のリンクはこちらです。