vi /etc/kubernetes/cfg/token.csv
f89a76f197526a0d4bc2bf9c86e871c3,kubelet-bootstrap,10001,"system:bootstrappers"
#---
scp /etc/kubernetes/cfg/token.csv master-2:/etc/kubernetes/cfg/token.csv
scp /etc/kubernetes/cfg/token.csv master-3:/etc/kubernetes/cfg/token.csv
service kube-apiserver restart
#controller-manager
cat >/etc/kubernetes/cfg/kube-controller-manager.cfg<<EOFL
KUBE_CONTROLLER_MANAGER_OPTS="--logtostderr=true \
--v=4 \
--master=127.0.0.1:8080 \
--leader-elect=true \
--address=0.0.0.0 \
--service-cluster-ip-range=10.0.0.0/24 \
--cluster-name=kubernetes \
--feature-gates=RotateKubeletServerCertificate=true \
--experimental-cluster-signing-duration=87600h0m0s \
--cluster-signing-cert-file=/etc/kubernetes/ssl/ca.pem \
--cluster-signing-key-file=/etc/kubernetes/ssl/ca-key.pem \
--root-ca-file=/etc/kubernetes/ssl/ca.pem \
--service-account-private-key-file=/etc/kubernetes/ssl/ca-key.pem"
EOFL
看起來你提供的是與Kubernetes叢集相關的命令列引數。這些引數通常用於Kubernetes叢集的配置和啟動。下面是每個引數的含義:
1. `--feature-gates=RotateKubeletServerCertificate=true`:
- 這個引數是Kubernetes的一個特性門控(feature gate),用於啟用或禁用某些實驗性或alpha/beta特性。
- `RotateKubeletServerCertificate`是一個特性門控的名稱。
- `true`表示啟用這個特性。
- 啟用`RotateKubeletServerCertificate`特性後,Kubernetes會定期自動旋轉kubelet的伺服器證書。
2. `--experimental-cluster-signing-duration=87600h0m0s`:
- 這個引數用於設定Kubernetes叢集中證書的有效期。
- `--experimental-`字首表示這是一個實驗性特性,可能在未來的版本中發生變化或被移除。
- `cluster-signing-duration`指定了叢集簽名證書的持續時間。
- `87600h0m0s`表示證書的有效期為87600小時,即10年。
service kube-controller-manager restart
#建立證書檔案
vim tls-instructs-csr.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: system:certificates.k8s.io:certificatesigningrequests:selfnodeserver
rules:
- apiGroups: ["certificates.k8s.io"]
resources: ["certificatesigningrequests/selfnodeserver"]
verbs: ["create"]
kubectl apply -f tls-instructs-csr.yaml
#-------------------
#自動批准 kubelet-bootstrap 使用者 TLS bootstrapping 首次申請證書的 CSR 請求
kubectl create clusterrolebinding node-client-auto-approve-csr --clusterrole=system:certificates.k8s.io:certificatesigningrequests:nodeclient --user=kubelet-bootstrap
#-----------------
#自動批准 system:nodes 組使用者更新 kubelet 自身與 apiserver 通訊證書的 CSR 請求
kubectl create clusterrolebinding node-client-auto-renew-crt --clusterrole=system:certificates.k8s.io:certificatesigningrequests:selfnodeclient --group=system:nodes
#-------------
#自動批准 system:nodes 組使用者更新 kubelet 10250 api 埠證書的 CSR 請求
kubectl create clusterrolebinding node-server-auto-renew-crt --clusterrole=system:certificates.k8s.io:certificatesigningrequests:selfnodeserver --group=system:nodes
#--------------------客戶端刪除現在的證書
rm -f /etc/kubernetes/ssl/kubelet-client-current.pem /etc/kubernetes/ssl/kubelet-client*pem /etc/kubernetes/ssl/kubelet.key kubelet.crt
#---------------客戶端實現自動更新
cat >/etc/kubernetes/cfg/kubelet<<EOF
KUBELET_OPTS="--logtostderr=true \
--v=4 \
--hostname-override=192.168.91.21 \
--kubeconfig=/etc/kubernetes/cfg/kubelet.kubeconfig \
--bootstrap-kubeconfig=/etc/kubernetes/cfg/bootstrap.kubeconfig \
--config=/etc/kubernetes/cfg/kubelet.config \
--feature-gates=RotateKubeletClientCertificate=true,RotateKubeletServerCertificate=true \
--rotate-certificates \
--cert-dir=/etc/kubernetes/ssl \
--pod-infra-container-image=docker.io/kubernetes/pause:latest"
EOF
這兩個引數同樣是用於Kubernetes叢集配置的命令列引數,它們與證書管理和特性門控有關。下面是每個引數的詳細解釋:
1. `--feature-gates=RotateKubeletClientCertificate=true,RotateKubeletServerCertificate=true`:
- 這個引數設定了兩個特性門控(feature gates),分別是`RotateKubeletClientCertificate`和`RotateKubeletServerCertificate`。
- `RotateKubeletClientCertificate`啟用後,Kubernetes會定期自動旋轉kubelet的客戶端證書。
- `RotateKubeletServerCertificate`啟用後,Kubernetes會定期自動旋轉kubelet的伺服器證書。
- `true`表示啟用這些特性。
2. `--rotate-certificates`:
- 這個引數是一個標誌,用於指示Kubernetes在啟動時檢查並旋轉所有即將到期的證書。
- 當與`RotateKubeletClientCertificate`和`RotateKubeletServerCertificate`特性門控一起使用時,它會確保kubelet的客戶端和伺服器證書在到期前被自動更新。
這些引數通常用於Kubernetes叢集的控制平面元件,如kube-controller-manager和kube-apiserver。啟用這些特性可以幫助自動化證書管理過程,減少手動干預,提高叢集的安全性和穩定性。
如果你正在配置或管理Kubernetes叢集,並希望啟用這些特性,你需要確保你的Kubernetes版本支援這些特性,並且在啟動控制平面元件時正確設定了這些引數。如果你有任何疑問或需要進一步的幫助,請隨時提問。
service kubelet restart
#檢視kubelet.crt 檢視
#預設一年
openssl x509 -in kubelet-client-current.pem -noout -text | grep "Not"
openssl x509 -in server.crt -text
openssl x509 -in /etc/kubernetes/ssl/kubelet.crt -noout -text | grep -A2 "Validity"
#服務端狀態
[root@master-1 config]# kubectl get csr
NAME AGE REQUESTOR CONDITION
csr-lh2v5 6s kubelet-bootstrap Approved,Issued
#-----------------------參考
#------------
Below is a list of K8s (1.16) internal files (on each master node) which include certificates.
/etc/kubernetes/admin.conf
/etc/kubernetes/controller-manager.conf
/etc/kubernetes/scheduler.conf
/etc/kubernetes/pki/apiserver.crt
/etc/kubernetes/pki/apiserver-kubelet-client.crt
/etc/kubernetes/pki/apiserver-etcd-client.crt
/etc/kubernetes/pki/ca.crt
/etc/kubernetes/pki/etcd/healthcheck-client.crt
/etc/kubernetes/pki/etcd/peer.crt
/etc/kubernetes/pki/etcd/server.crt
/etc/kubernetes/pki/front-proxy-ca.crt
/etc/kubernetes/pki/front-proxy-client.crt
/var/lib/kubelet/pki/kubelet.crt
/var/lib/kubelet/pki/kubelet-client-current.pem
There are also some certificates on each worker node, mainly used by kubelet.
/etc/kubernetes/kubelet.conf
/etc/kubernetes/pki/ca.crt
/var/lib/kubelet/pki/kubelet.crt
/var/lib/kubelet/pki/kubelet-client-current.pem