nodeとして動いているマシン以外のマシンをMicroK8sのクライアント環境としてセットアップする。
より具体的にはtestuserというユーザでnodeとして動いていないマシンでkubectl経由でpodの情報を取得することをこの記事のゴールとする。
MicroK8sのクラスタセットアップについてはこの記事に書いてある通り。
- VM2: master node
- client-machine: クライアント環境をセットアップするマシン
RBACの設定
microk8sのRBACを有効にする。
VM2 $ microk8s enable rbac
次に、testuserを適当なroleにバインドする。
VM2 $ microk8s kubectl create clusterrolebinding testuser --clusterrole=admin --user=testuser
認証方式の確認
api-serverのオプションを確認する。
microk8sの場合、$SNAP_DATA/args/kube-apiserver
を見ればよい。
VM2 $ cat /var/snap/microk8s/current/args/kube-apiserver
確認したところ、--client-ca-file
が指定されていたので、X509 client certificatesが有効であることが分かった。
CSRの作成
csrの作成
client-machine $ openssl genrsa -out testuser.key 2048 client-machine $ openssl req -new -key testuser.key -out testuser.csr -subj "/CN=testuser"
client-machine $ scp testuser.csr VM2:~/work
CSR(CertificateSigningRequest)を下記内容で作成する。(filename: testuser.csr.yaml)
apiVersion: certificates.k8s.io/v1 kind: CertificateSigningRequest metadata: name: testuser spec: request: xxxxxx # cat testuser.csr | base64 | tr -d "\n" signerName: kubernetes.io/kube-apiserver-client expirationSeconds: 86400 usages: - client auth
VM2 $ microk8s kubectl apply -f testuser.csr.yaml
VM2 $ microk8s kubectl certificate approve testuser
証明書の取得
作成された証明書とca.crtをclient-machineに置いてやる。
VM2 $ microk8s kubectl get csr testuser -o jsonpath='{.status.certificate}' | base64 -d > testuser.crt VM2 $ scp testuser.crt client-machine:~/work VM2 $ scp /var/snap/microk8s/current/certs/ca.crt client-machine:~/work
kubeconfigのセットアップ
client-machine $ kubectl config set-credentials testuser --client-key=testuser.key --client-certificate=testuser.crt --embed-certs=true client-machine $ kubectl config set-cluster microk8s-cluster --server=https://VM2:16443 --certificate-authority=./ca.crt client-machine $ kubectl config set-context microk8s --cluster=microk8s-cluster --user=testuser --namespace=default client-machine $ kubectl config use-context microk8s
動作検証
client-machine $ kubectl get pods -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system calico-kube-controllers-77bd7c5b-lm8w2 1/1 Running 0 8h kube-system coredns-864597b5fd-mp64v 1/1 Running 0 8h kube-system calico-node-b84v4 1/1 Running 0 8h kube-system calico-node-d2zjq 1/1 Running 0 8h