Kubernetes : ユーザーを追加する2025/11/07 |
|
Kubernetes クラスターを利用可能なユーザーを追加します。 当例では以下のように 4 台のノードを使用して Kubernetes クラスターを構成しています。
+----------------------+ +----------------------+
| [ ctrl.srv.world ] | | [ dlp.srv.world ] |
| Manager Node | | Control Plane |
+-----------+----------+ +-----------+----------+
eth0|10.0.0.25 eth0|10.0.0.30
| |
------------+--------------------------+-----------
| |
eth0|10.0.0.51 eth0|10.0.0.52
+-----------+----------+ +-----------+----------+
| [ node01.srv.world ] | | [ node02.srv.world ] |
| Worker Node#1 | | Worker Node#2 |
+----------------------+ +----------------------+
|
| [1] | 例として、X509 クライアント証明書による認証方式のユーザーを追加します。 |
|
# [/CN=***] に作成するユーザー名を指定 ctrl:~ # openssl ecparam -name prime256v1 -genkey -out kubernetes.key ctrl:~ # openssl req -new -key kubernetes.key -out kubernetes.csr -subj "/CN=serverworld" CSR=$(cat kubernetes.csr | base64 | tr -d '\n')
ctrl:~ # cat <<EOF > serverworld-csr.yaml
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
name: serverworld-csr
spec:
request: $CSR
signerName: kubernetes.io/kube-apiserver-client
usages:
- client auth
EOF
# CSR をクラスターに登録 ctrl:~ # kubectl apply -f serverworld-csr.yaml certificatesigningrequest.certificates.k8s.io/serverworld-csr created kubectl get csr NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION csr-b4xs8 6m37s kubernetes.io/kube-apiserver-client-kubelet system:bootstrap:abcdef <none> Approved,Issued csr-bvtgp 2m50s kubernetes.io/kube-apiserver-client-kubelet system:bootstrap:abcdef <none> Approved,Issued csr-xb7cd 15m kubernetes.io/kube-apiserver-client-kubelet system:node:dlp.srv.world <none> Approved,Issued serverworld-csr 7s kubernetes.io/kube-apiserver-client kubernetes-admin <none> Pending # CSR を承認して証明書に書き出す ctrl:~ # kubectl certificate approve serverworld-csr certificatesigningrequest.certificates.k8s.io/serverworld-csr approved ctrl:~ # kubectl get csr serverworld-csr -o jsonpath='{.status.certificate}' | base64 --decode > kubernetes.crt # ユーザーにクラスターロールを割り当てる # 例として 管理者権限の [cluster-admin] を設定 ctrl:~ # kubectl create clusterrolebinding serverworld --clusterrole=cluster-admin --user=serverworld clusterrolebinding.rbac.authorization.k8s.io/serverworld created # ユーザー用の kubeconfig を作成する ctrl:~ # SERVER=$(kubectl config view -o jsonpath='{.clusters[].cluster.server}') ctrl:~ # CLUSTER=$(kubectl config view -o jsonpath='{.contexts[].context.cluster}') ctrl:~ # ROOTCA=$(kubectl get cm kube-root-ca.crt -o jsonpath="{['data']['ca\.crt']}"| base64 | tr -d '\n') ctrl:~ # kubectl config set-cluster kubernetes --server=$SERVER --kubeconfig=config Cluster "kubernetes" set. ctrl:~ # kubectl config set clusters.kubernetes.certificate-authority-data $ROOTCA --kubeconfig=config Property "clusters.kubernetes.certificate-authority-data" set. ctrl:~ # kubectl config set-context kubernetes --cluster=$CLUSTER --user=serverworld --kubeconfig=config Context "kubernetes" created. ctrl:~ # kubectl config set-credentials serverworld --client-certificate=kubernetes.crt --client-key=kubernetes.key --kubeconfig=config User "serverworld" set.
ctrl:~ #
kubectl config use-context kubernetes --kubeconfig=config Switched to context "kubernetes". # 以下の 3 ファイルを任意のユーザーに渡す ctrl:~ # ll kubernetes.crt kubernetes.key config -rw-------. 1 root root 1831 Nov 7 09:14 config -rw-r--r--. 1 root root 818 Nov 7 09:13 kubernetes.crt -rw-------. 1 root root 302 Nov 7 09:12 kubernetes.key |
| [2] | 任意のユーザーのホーム配下に [.kube] ディレクトリを作成して受け取ったファイルを配置すると、設定したロールに応じた権限で Kubernetes クラスターが利用できるようになります。 |
|
suse@ctrl:~> ll ~/.kube total 12 -rw-------. 1 suse suse 1831 Nov 7 09:15 config -rw-r--r--. 1 suse suse 818 Nov 7 09:15 kubernetes.crt -rw-------. 1 suse suse 302 Nov 7 09:15 kubernetes.keysuse@ctrl:~> kubectl get nodes NAME STATUS ROLES AGE VERSION dlp.srv.world Ready control-plane 19m v1.34.1 node01.srv.world Ready <none> 10m v1.34.1 node02.srv.world Ready <none> 6m34s v1.34.1 |
| Sponsored Link |
|
|