1. 程式人生 > 其它 >11.證書可用時間修改

11.證書可用時間修改

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