11.證書可用時間修改
阿新 • • 發佈:2021-08-01
k8s所有用到的證書
/etc/kubernetes/pki [root@k8s-master01 pki]# ls apiserver.crt apiserver-kubelet-client.key front-proxy-ca.key apiserver-etcd-client.crt ca.crt front-proxy-client.crt apiserver-etcd-client.key ca.key front-proxy-client.key apiserver.key etcd sa.key apiserver-kubelet-client.crt front-proxy-ca.crt sa.pub #檢視證書的資訊 openssl x509 -in apiserver.crt -text -noout #檢視證書的期限 kubeadm alpha certs check-expiration #生成配置檔案 kubeadm config view > /tmp/kubeadm-config.yaml
一、自動續簽
kubeadm alpha certs renew all
將上面加入自動計劃任務 * * * * *
0 0 1 */3 * kubeadm alpha certs renew all
格式: * * * * * 分別對應表示: 分鐘(0-59) 小時(0-23) 日(1-31) 月份(1-12) 星期(0-6) 星號(*):代表所有可能的值,例如month欄位如果是星號,則表示在滿足其它欄位的制約條件後每月都執行該命令操作。 逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,“1,2,5,7,8,9” 中槓(-):可以用整數之間的中槓表示一個整數範圍,例如“2-6”表示“2,3,4,5,6” 正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。 同時正斜線可以和星號一起使用, 例如*/5,第一個位置就是每隔5秒,如果用在minute欄位,表示每多少分鐘。 每五分鐘執行 */5 * * * * 每小時執行 0 * * * * 每天執行 0 0 * * * 每週執行 0 0 * * 0 每月執行 0 0 1 * * 每年執行 0 0 1 1 * -e : 執行文字編輯器來設定時程表,內定的文字編輯器是 VI,如果你想用別的文字編輯器, 則請先設定 VISUAL 環境變數來指定使用那個文字編輯器(比如說 setenv VISUAL joe) -r : 刪除目前的時程表 -l : 列出目前的時程表
二、手動續簽
1、go環境部署
wget https://dl.google.com/go/go1.12.7.linux-amd64.tar.gz
tar -zxvf go1.12.7.linux-amd64.tar.gz -C /usr/local/
vim /etc/profile
export PATH=$PATH:/usr/local/go/bin
source /etc/profile
2、下載原始碼
cd /data && git clone https://github.com/kubernetes/kubernetes.git #國內 git clone https://gitee.com/RaYong8080/kubernetes.git cd kubernetes/ git checkout -b remotes/origin/release-1.15.1 v1.15.1
3、修改kubeadm原始碼包更新證書策略
vim staging/src/k8s.io/client-go/util/cert/cert.go # kubeadm 1.14 版本之前
vim cmd/kubeadm/app/util/pkiutil/pki_helpers.go # kubeadm 1.14 至今
# 在func NewSignedCert方法下面 定義一個常量 duration365d
const duration365d = time.Hour * 24 * 365 * 10 # 這裡改為10年
# NotAfter: time.Now().Add(kubeadmconstants.CertificateValidity).UTC(), 將更改為下面內容
NotAfter: time.Now().Add(duration365d).UTC(),
make WHAT=cmd/kubeadm GOFLAGS=-v
編譯後的kubeadm 放在_output檔案的bin下
4、更新kubeadm
cp /usr/bin/kubeadm /usr/bin/kubeadm.old
cp _output/bin/kubeadm /usr/bin/kubeadm
chmod a+x /usr/bin/kubeadm
5、更新各節點證書至Master節點
cp -r /etc/kubernetes/pki /etc/kubernetes/pki.old
cd /etc/kubernetes/pki
kubeadm alpha certs renew all --config=/root/kubeadm-config.yaml
openssl x509 -in apiserver.crt -text -noout | grep Not
更新kubectl 客戶端證書
cp -a /etc/kubernetes /root/.kube/config
授權config許可權
chown $(id -un):$(id -un) /root/.kube/config
6、HA叢集其餘mater節點證書更新
scp /etc/kubernetes/pki/{ca.crt,ca.key,sa.key,sa.pub,\
front-proxy-ca.crt,front-proxy-ca.key} \@192.168.66.111:/etc/kubernetes/pki/
scp /etc/kubernetes/pki/etcd/{ca.crt,ca.key} @192.168.66.112:/etc/kubernetes/pki/etcd/
scp /usr/bin/kubeadm @192.168.66.111:/usr/bin/kubeadm
#!/bin/bash
masterNode="192.168.66.111 192.168.66.112"
#for host in ${masterNode}; do
# scp /etc/kubernetes/pki/{ca.crt,ca.key,sa.key,sa.pub,front-proxy-ca.crt,
front-proxy-ca.key}"${USER}"@$host:/etc/kubernetes/pki/
# scp /etc/kubernetes/pki/etcd/{ca.crt,ca.key} "root"@$host:/etc/kubernetes/pki/etcd
# scp /etc/kubernetes/admin.conf "root"@$host:/etc/kubernetes/
#done
for host in ${CONTROL_PLANE_IPS}; do
scp /etc/kubernetes/pki/{ca.crt,ca.key,sa.key,sa.pub,front-proxy-ca.crt,front-proxy-ca.key}"${USER}"@$host:/root/pki/
scp /etc/kubernetes/pki/etcd/{ca.crt,ca.key} "root"@$host:/root/etcd/
scp /etc/kubernetes/admin.conf "root"@$host:/root/kubernetes/
done
7、驗證證書
檢視證書的資訊
openssl x509 -in apiserver.crt -text -noout
#檢視證書的期限
kubeadm alpha certs check-expiration
完成後重啟 kube-apiserver、kube-controller、kube-scheduler、etcd
docker ps | grep -E 'k8s_kube-apiserver|k8s_etcd_etcd|k8s_kube-scheduler|k8s_kube-controller' | \
awk -F ' ' '{print $1}' | xargs docker restart