k8s 1.14版本證書過期問題解決

經(jīng)過幾輪方案和填坑,目前方案應(yīng)該最簡(jiǎn)單可靠阶女。

一颊糜,經(jīng)歷

說起來,都是淚秃踩,從三年前和這個(gè)問題作斗爭(zhēng)衬鱼,證書過期和自動(dòng)續(xù)期這個(gè)大問題,始終是一個(gè)心頭的傷憔杨。
現(xiàn)在要想到一刀切的方案鸟赫,還是自己更改Kubeadm源碼,全部改成100年芍秆,最灑脫惯疙。
但,如果線上已運(yùn)行了這些東東妖啥,且是10年1年證書過期的都有,那啷個(gè)弄嘛对碌?

二荆虱,刺探

先用如下命令,看看k8s的哪些證書何時(shí)到期

CERT_DIR=${CERT_DIR:-/etc/kubernetes/pki}
for i in $(find $CERT_DIR -name '*.crt' -o -name '*.pem'); do
 echo $i
    openssl x509 -enddate -in $i -noout
done
for f in $(ls /etc/kubernetes/{admin,controller-manager,scheduler,kubelet}.conf); do
 echo $f
    kubectl --kubeconfig $f config view --raw -o jsonpath='{range .users[*]}{.user.client-certificate-data}{end}' | base64 -d | openssl x509 -enddate -noout
done

輸出pki下的證書情況:

/etc/kubernetes/pki/ca.crt
notAfter=Nov 25 01:41:33 2029 GMT
/etc/kubernetes/pki/apiserver.crt
notAfter=Nov 27 01:41:34 2020 GMT
/etc/kubernetes/pki/apiserver-kubelet-client.crt
notAfter=Nov 27 01:41:34 2020 GMT
/etc/kubernetes/pki/etcd/ca.crt
notAfter=Nov 25 01:41:34 2029 GMT
/etc/kubernetes/pki/etcd/server.crt
notAfter=Nov 27 01:41:34 2020 GMT
/etc/kubernetes/pki/etcd/peer.crt
notAfter=Nov 27 01:41:35 2020 GMT
/etc/kubernetes/pki/etcd/healthcheck-client.crt
notAfter=Nov 27 01:41:35 2020 GMT
/etc/kubernetes/pki/apiserver-etcd-client.crt
notAfter=Nov 27 01:41:35 2020 GMT
/etc/kubernetes/pki/front-proxy-ca.crt
notAfter=Nov 25 01:41:36 2029 GMT
/etc/kubernetes/pki/front-proxy-client.crt
notAfter=Nov 27 01:41:36 2020 GMT

輸出/etc/kubernetes下的證書情況

/etc/kubernetes/admin.conf
notAfter=Jul 24 02:20:39 2021 GMT
/etc/kubernetes/controller-manager.conf
notAfter=Jul 24 06:16:54 2021 GMT
/etc/kubernetes/kubelet.conf
notAfter=Jul 24 06:17:13 2021 GMT
/etc/kubernetes/scheduler.conf
notAfter=Jul 24 06:16:10 2021 GMT

三朽们,如果只是/etc/kubernetes下面的證書過期怀读,則使用如下方案解決。

1,備份

cp -R /etc/kubernetes /etc/kubernetes$(date "+%Y%m%d")

2,將主要證書文件mv一下骑脱,如果不mv菜枷,則不能創(chuàng)建新的證書文件

mv /etc/kubernetes/admin.conf /etc/kubernetes/admin.bak 
mv /etc/kubernetes/controller-manager.conf /etc/kubernetes/controller-manager.conf.bak                   
mv /etc/kubernetes/scheduler.conf /etc/kubernetes/scheduler.conf.bak 
mv /etc/kubernetes/kubelet.conf /etc/kubernetes/kubelet.conf.bak 

3,重新生成所有四個(gè)證書(這是踩過大坑的,最開始只升級(jí)admin叁丧,干到凌晨啤誊,才查出來還要升級(jí)controller-manager,scheduler,后來又忘了kubelet拥娄,導(dǎo)致k8s集群兩小時(shí)不能動(dòng)彈)蚊锹。

kubeadm init phase kubeconfig admin     
kubeadm init phase kubeconfig scheduler                                                                                             
kubeadm init phase kubeconfig controller-manager 
kubeadm init phase kubeconfig kubelet     

又或者一條命令搞定
kubeadm init phase kubeconfig all
這里有個(gè)注意的細(xì)節(jié),在使用kubeadm命令之前稚瘾,它會(huì)到外網(wǎng)查找此K8s集群的版本信息牡昆,如果我們的機(jī)器是純企業(yè)內(nèi)網(wǎng),不能訪問外面摊欠,這里就會(huì)卡住丢烘。
BUT柱宦,還是可以離線進(jìn)行的。
先從本集群生成一個(gè)config view類型文件播瞳。
kubeadm config view > kubeadm.conf
然后掸刊,在之后生成證書時(shí),加上這個(gè)文件作為--config參數(shù)即可狐史。如
kubeadm alpha phase kubeconfig scheduler --config kubeadm.conf
(上面是kueadm 1.10版本的命令痒给,新版本已從alpha轉(zhuǎn)正式命令,-h可找出來)

幫助

如果生疏了骏全,可能看看help命令

kubeadm init phase kubeconfig -h
This command is not meant to be run on its own. See list of available subcommands.

Usage:
  kubeadm init phase kubeconfig [flags]
  kubeadm init phase kubeconfig [command]

Available Commands:
  admin              Generates a kubeconfig file for the admin to use and for kubeadm itself
  all                Generates all kubeconfig files
  controller-manager Generates a kubeconfig file for the controller manager to use
  kubelet            Generates a kubeconfig file for the kubelet to use *only* for cluster bootstrapping purposes
  scheduler          Generates a kubeconfig file for the scheduler to use

Flags:
  -h, --help   help for kubeconfig

Global Flags:
      --log-file string   If non-empty, use this log file
      --rootfs string     [EXPERIMENTAL] The path to the 'real' host root filesystem.
      --skip-headers      If true, avoid header prefixes in the log messages
  -v, --v Level           number for the log level verbosity

Use "kubeadm init phase kubeconfig [command] --help" for more information about a command.

四苍柏,如果是/etc/kubernetes/pki下面的證書過期,則使用如下方案解決姜贡。

1试吁,仍然先備份喲,備份使得萬年船~~
cp -R /etc/kubernetes /etc/kubernetes$(date "+%Y%m%d")
2楼咳,先將要過期的證書作更名

mv front-proxy-client.crt front-proxy-client.crt.bak
mv front-proxy-client.key front-proxy-client.key.bak

3熄捍,生成k8s的config view,然后使用kubeadm生成新的證書對(duì)

kubeadm alpha phase kubeconfig scheduler  --config kubeadm.conf
kubeadm alpha phase certs front-proxy-client --config kubeadm.conf 
kubeadm alpha phase certs front-proxy-client --config kubeadm.conf 

4母怜,依次升級(jí)完其它幾個(gè)要過期的證書余耽,包括與etcd連接的證書對(duì)。
5苹熏,注意碟贾,有三個(gè)根證書對(duì),是20年過期的轨域,我沒有更新(關(guān)鍵我不清楚更新之后袱耽,會(huì)發(fā)生什么事)。

/etc/kubernetes/pki/ca.crt
notAfter=Oct 27 02:34:13 2028 GMT
/etc/kubernetes/pki/etcd/ca.crt
notAfter=Oct 27 02:34:13 2028 GMT
/etc/kubernetes/pki/front-proxy-ca.crt
notAfter=Oct 27 02:34:15 2028 GMT

6干发,根據(jù)不同版本朱巨,查看證書過期的命令還不一樣呢,最好再作個(gè)重復(fù)記錄枉长。
查看/etc/kubernetes/pki目錄證書過期

CERT_DIR=${CERT_DIR:-/etc/kubernetes/pki}
for i in $(find $CERT_DIR -name '*.crt' -o -name '*.pem'); do
 echo $i
    openssl x509 -enddate -in $i -noout
done

查看/etc/kubernetes/目錄下的幾個(gè)conf里的證書過期

config_file=controller-manager.conf;echo $(grep "client-certificate-data" /etc/kubernetes/${config_file} | awk -F ":" '{print $2}' | grep -v "^$") | base64 -d > key_new.crt; openssl x509 -in key_new.crt -noout -dates

config_file=scheduler.conf;echo $(grep "client-certificate-data" /etc/kubernetes/${config_file} | awk -F ":" '{print $2}' | grep -v "^$") | base64 -d > key_new.crt; openssl x509 -in key_new.crt -noout -dates

config_file=admin.conf;echo $(grep "client-certificate-data" /etc/kubernetes/${config_file} | awk -F ":" '{print $2}' | grep -v "^$") | base64 -d > key_new.crt; openssl x509 -in key_new.crt -noout -dates

config_file=kubelet.conf;echo $(grep "client-certificate-data" /etc/kubernetes/${config_file} | awk -F ":" '{print $2}' | grep -v "^$") | base64 -d > key_new.crt; openssl x509 -in key_new.crt -noout -dates

config_file=front-proxy-client.crt;echo $(grep "client-certificate-data" /etc/kubernetes/${config_file} | awk -F ":" '{print $2}' | grep -v "^$") | base64 -d > key_new.crt; openssl x509 -in key_new.crt -noout -dates
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末冀续,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子搀暑,更是在濱河造成了極大的恐慌沥阳,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件自点,死亡現(xiàn)場(chǎng)離奇詭異桐罕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門功炮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來溅潜,“玉大人,你說我怎么就攤上這事薪伏」隼剑” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵嫁怀,是天一觀的道長(zhǎng)设捐。 經(jīng)常有香客問我,道長(zhǎng)塘淑,這世上最難降的妖魔是什么萝招? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮存捺,結(jié)果婚禮上槐沼,老公的妹妹穿的比我還像新娘。我一直安慰自己捌治,他們只是感情好岗钩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肖油,像睡著了一般兼吓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上森枪,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天周蹭,我揣著相機(jī)與錄音,去河邊找鬼疲恢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瓷胧,可吹牛的內(nèi)容都是我干的显拳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼搓萧,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼杂数!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瘸洛,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤揍移,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后反肋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體那伐,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了罕邀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畅形。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖诉探,靈堂內(nèi)的尸體忽然破棺而出日熬,到底是詐尸還是另有隱情,我是刑警寧澤肾胯,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布竖席,位于F島的核電站,受9級(jí)特大地震影響敬肚,放射性物質(zhì)發(fā)生泄漏毕荐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一帘皿、第九天 我趴在偏房一處隱蔽的房頂上張望东跪。 院中可真熱鬧,春花似錦鹰溜、人聲如沸虽填。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)斋日。三九已至,卻和暖如春墓陈,著一層夾襖步出監(jiān)牢的瞬間恶守,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工贡必, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留兔港,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓仔拟,卻偏偏與公主長(zhǎng)得像衫樊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子利花,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354