K8S憑證過期:X509: Certificate Has Expired Or Is Not Yet Valid

閱讀時間約 17 分鐘


raw-image

👨‍💻簡介

今天早上在下kubectl get pods時,突然跳出了以下錯誤

Unable to connect to the server: x509: certificate has expired or is not yet valid

下了kubeadm alpha certs check-expiration之後才發現原來是憑證過期

raw-image

因此紀錄一下解決過程

Information

  • environment
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
  • docker version
Client:
Version: 1.13.1
API version: 1.26
Package version: docker-1.13.1-162.git64e9980.el7.centos.x86_64
Go version: go1.10.3
Git commit: 64e9980/1.13.1
Built: Wed Jul 1 14:56:42 2020
OS/Arch: linux/amd64

Server:
Version: 1.13.1
API version: 1.26 (minimum version 1.12)
Package version: docker-1.13.1-162.git64e9980.el7.centos.x86_64
Go version: go1.10.3
Git commit: 64e9980/1.13.1
Built: Wed Jul 1 14:56:42 2020
OS/Arch: linux/amd64
Experimental: false
  • kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.6", GitCommit:"dff82dc0de47299ab66c83c626e08b245ab19037", GitTreeState:"clean", BuildDate:"2020-07-15T16:56:34Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
  • k8s version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.6", GitCommit:"dff82dc0de47299ab66c83c626e08b245ab19037", GitTreeState:"clean", BuildDate:"2020-07-15T16:58:53Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.6", GitCommit:"dff82dc0de47299ab66c83c626e08b245ab19037", GitTreeState:"clean", BuildDate:"2020-07-15T16:51:04Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}

💡解決步驟

1. 更新憑證

  1. 執行以下命令備份現有k8s 憑證
$ mkdir -p $HOME/k8s-old-certs/pki 
$ /bin/cp -p /etc/kubernetes/pki/*.* $HOME/k8s-old-certs/pki $ ls -l $HOME/k8s-old-certs/pki/

輸出類似以下內容:

total 56
-rw-r--r-- 1 root root 1090 Jul 27 2022 apiserver-etcd-client.crt
-rw------- 1 root root 1679 Jul 27 2022 apiserver-etcd-client.key
-rw-r--r-- 1 root root 1099 Jul 27 2022 apiserver-kubelet-client.crt
-rw------- 1 root root 1679 Jul 27 2022 apiserver-kubelet-client.key
-rw-r--r-- 1 root root 1229 Jul 27 2022 apiserver.crt
-rw------- 1 root root 1675 Jul 27 2022 apiserver.key
-rw-r--r-- 1 root root 1025 Jul 25 2020 ca.crt
-rw------- 1 root root 1675 Jul 25 2020 ca.key
-rw-r--r-- 1 root root 1038 Jul 27 2022 front-proxy-ca.crt
-rw------- 1 root root 1675 Jul 27 2022 front-proxy-ca.key
-rw-r--r-- 1 root root 1058 Jul 27 2022 front-proxy-client.crt
-rw------- 1 root root 1679 Jul 27 2022 front-proxy-client.key
-rw------- 1 root root 1679 Jul 25 2020 sa.key
-rw------- 1 root root 451 Jul 25 2020 sa.pub

2. 執行以下命令備份現有k8s設定檔

/bin/cp -p /etc/kubernetes/*.conf $HOME/k8s-old-certs 
ls -ltr $HOME/k8s-old-certs

輸出類似以下內容:

total 36
-rw------- 1 root root 5506 Jul 27 2022 kubelet.conf
-rw------- 1 root root 5453 Jul 27 2022 admin.conf
-rw------- 1 root root 5489 Jul 27 2022 controller-manager.conf
-rw------- 1 root root 5437 Jul 27 2022 scheduler.conf
drwxrwxr-x 2 root root 4096 Jul 27 12:05 pki

3. 執行以下命令備份家目錄設定:

mkdir -p $HOME/k8s-old-certs/.kube 
/bin/cp -p ~/.kube/config $HOME/k8s-old-certs/.kube/.
ls -l $HOME/k8s-old-certs/.kube/.

輸出類似以下內容:

total 8
-rw------- 1 root root 5454 Jul 27 2022 config

4. 執行以下命令更新所有k8s憑證

kubeadm alpha certs renew all

輸出類似以下內容:

[renew] Reading configuration from the cluster...
[renew] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'

certificate embedded in the kubeconfig file for the admin to use and for kubeadm itself renewed
certificate for serving the Kubernetes API renewed
certificate the apiserver uses to access etcd renewed
certificate for the API server to connect to kubelet renewed
certificate embedded in the kubeconfig file for the controller manager to use renewed
certificate for liveness probes to healthcheck etcd renewed
certificate for etcd nodes to communicate with each other renewed
certificate for serving etcd renewed
certificate for the front proxy client renewed
certificate embedded in the kubeconfig file for the scheduler manager to use renewed

5. 執行以下命令確認憑證是否更新並顯示364天後過期:

kubeadm alpha certs check-expiration

輸出類似以下內容:

[check-expiration] Reading configuration from the cluster...
[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'

CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
admin.conf Jul 26, 2024 04:14 UTC 364d no
apiserver Jul 26, 2024 04:15 UTC 364d ca no
apiserver-etcd-client Jul 26, 2024 04:15 UTC 364d etcd-ca no
apiserver-kubelet-client Jul 26, 2024 04:15 UTC 364d ca no
controller-manager.conf Jul 26, 2024 04:15 UTC 364d no
etcd-healthcheck-client Jul 26, 2024 04:15 UTC 364d etcd-ca no
etcd-peer Jul 26, 2024 04:15 UTC 364d etcd-ca no
etcd-server Jul 26, 2024 04:15 UTC 364d etcd-ca no
front-proxy-client Jul 26, 2024 04:15 UTC 364d front-proxy-ca no
scheduler.conf Jul 26, 2024 04:16 UTC 364d no
CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
ca Jul 23, 2030 03:21 UTC 6y no
etcd-ca Jul 23, 2030 03:21 UTC 6y no
front-proxy-ca Jul 24, 2032 03:09 UTC 8y no

2. 確認kubelet設定

這時候下 kubectl get pods可能會噴以下錯誤

error: You must be logged in to the server (Unauthorized)

此時可以使用指令比對一下家目錄的設定檔是否更新

diff $HOME/.kube/config/  /etc/kubernetes/admin.conf

如果沒顯示任何輸出,原因是家目錄的設定檔沒更新,因此必須複製一份新的設定檔到家目錄

cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

接著需要重起kubelet以及相關的docker服務(master與node都要重啟)

systemctl restart docker 
systemctl restart kubelet

如果以上指令沒有輸出表示成功,最後確認是否新的設定檔成功

kubectl get node

NAME STATUS ROLES AGE VERSION
master Ready <none> 3y2d v1.18.6
worker1 Ready <none> 3y2d v1.18.6
worker2 Ready <none> 3y2d v1.18.6

以上就是這次更新憑證的過程。

📚Reference

17會員
81Content count
golang
留言0
查看全部
發表第一個留言支持創作者!
wang alan的沙龍 的其他內容
👨‍💻簡介 因在wsl環境下使用websocket通訊協議,並在windows使用postman發生連線被拒 嘗試了localhost與127.0.0.1都無效,爬文後找到了一些解決辦法,這邊簡單紀錄一下
👨‍💻簡介 從來沒想過部署可以如此的方便快速,第一次接觸到Zeabur的時候覺得他跟一般的雲端服務商差不多,架設網站用個vm之類的,但仔細去摸索後才發現他是個想讓開發人員專注在寫扣這件事上,不需去管任何infra相關事項的一個服務,像是架設wordpress需要sql,就簡單的點兩下即可完
什麼是 Kubernetes Deployment? 一樣先來個官網解說 A Deployment provides declarative updates for Pods and ReplicaSets. You describe a desired state in a Deployment,
👨‍💻Intro 為了實現vscode在wsl環境下使用ssh連接到gce的需求,在爬文後找到一篇解法,因此記錄下來,方便日後查詢 🎯setup 建立ssh.bat檔案,並放在windows下任意位置 2. vscode設定ssh.bat路徑 打開vscode的settings -> exte
GitLab不僅是一個源代碼管理工具,它還提供了一個統一的平台,將開發、運營和安全等流程整合在一起。通過GitLab,可以在單一的應用程序中進行專案計劃、源代碼管理、分支控制、CI/CD等操作。不論角色為何,GitLab提供了一個統一的資訊來源,讓你輕鬆地管理和追蹤整個開發流程。它消除了工具鏈的複雜
什麼是Kubernetes Service? 先來個官網的解說 A Kubernetes Service is an abstraction which defines a logical set of Pods and a policy by which to access them. 白話文就是
👨‍💻簡介 因在wsl環境下使用websocket通訊協議,並在windows使用postman發生連線被拒 嘗試了localhost與127.0.0.1都無效,爬文後找到了一些解決辦法,這邊簡單紀錄一下
👨‍💻簡介 從來沒想過部署可以如此的方便快速,第一次接觸到Zeabur的時候覺得他跟一般的雲端服務商差不多,架設網站用個vm之類的,但仔細去摸索後才發現他是個想讓開發人員專注在寫扣這件事上,不需去管任何infra相關事項的一個服務,像是架設wordpress需要sql,就簡單的點兩下即可完
什麼是 Kubernetes Deployment? 一樣先來個官網解說 A Deployment provides declarative updates for Pods and ReplicaSets. You describe a desired state in a Deployment,
👨‍💻Intro 為了實現vscode在wsl環境下使用ssh連接到gce的需求,在爬文後找到一篇解法,因此記錄下來,方便日後查詢 🎯setup 建立ssh.bat檔案,並放在windows下任意位置 2. vscode設定ssh.bat路徑 打開vscode的settings -> exte
GitLab不僅是一個源代碼管理工具,它還提供了一個統一的平台,將開發、運營和安全等流程整合在一起。通過GitLab,可以在單一的應用程序中進行專案計劃、源代碼管理、分支控制、CI/CD等操作。不論角色為何,GitLab提供了一個統一的資訊來源,讓你輕鬆地管理和追蹤整個開發流程。它消除了工具鏈的複雜
什麼是Kubernetes Service? 先來個官網的解說 A Kubernetes Service is an abstraction which defines a logical set of Pods and a policy by which to access them. 白話文就是
你可能也想看
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
這篇分享希望能讓你了解 什麼Container、與Kubernetes和Docker是什麼關係,以及Kubernetes中又包含了哪些 組件?
Thumbnail
一線天團防彈少年,幾年前在歐洲的演唱會門票半小時內全數售鑿,阿米軍團力量強大。隊長RM在2018受邀到聯合國演講Love Yourself,其他成員也列席支持他。他們用行動證明偶像不只是站在鎂光燈下進行華麗表演,也能對粉絲帶來正面影響。
Thumbnail
「mission=征服日本」的偶像團體人氣暴漲 韓國JYP朴軫永提到:「過去的偶像團體都是以征服世界作為目標,而將日本當做中途通過點,事實上K-POP並未征服日本樂壇。日本音樂產業的規模僅次於美國為世界第二,是超過韓國15倍的巨大市場。」 新出道的女團「NiziU」人氣暴漲為日本樂團投下震撼彈!
每天醒來都需要有一顆持之以恆的心
Thumbnail
覺得上一篇網站和廣播節目聽不夠嗎?這篇要再介紹三個好用好聽的K-indie廣播節目讓你的音樂24小時不間斷,除了線上收聽,有的還可以下載或是以Podcast的方式聆聽,即使不會韓文也沒有關係,還有針對台灣聽眾設計的節目!
Thumbnail
<p>日日春成立以來,最常收到的私訊就是「幫忙推薦首爾的Live House」,雖然弘大周邊的Live House近幾年關閉、搬家的消息時有所聞,但是會定期舉辦小型公演的場地大約還是在10間左右。</p>
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
這篇分享希望能讓你了解 什麼Container、與Kubernetes和Docker是什麼關係,以及Kubernetes中又包含了哪些 組件?
Thumbnail
一線天團防彈少年,幾年前在歐洲的演唱會門票半小時內全數售鑿,阿米軍團力量強大。隊長RM在2018受邀到聯合國演講Love Yourself,其他成員也列席支持他。他們用行動證明偶像不只是站在鎂光燈下進行華麗表演,也能對粉絲帶來正面影響。
Thumbnail
「mission=征服日本」的偶像團體人氣暴漲 韓國JYP朴軫永提到:「過去的偶像團體都是以征服世界作為目標,而將日本當做中途通過點,事實上K-POP並未征服日本樂壇。日本音樂產業的規模僅次於美國為世界第二,是超過韓國15倍的巨大市場。」 新出道的女團「NiziU」人氣暴漲為日本樂團投下震撼彈!
每天醒來都需要有一顆持之以恆的心
Thumbnail
覺得上一篇網站和廣播節目聽不夠嗎?這篇要再介紹三個好用好聽的K-indie廣播節目讓你的音樂24小時不間斷,除了線上收聽,有的還可以下載或是以Podcast的方式聆聽,即使不會韓文也沒有關係,還有針對台灣聽眾設計的節目!
Thumbnail
<p>日日春成立以來,最常收到的私訊就是「幫忙推薦首爾的Live House」,雖然弘大周邊的Live House近幾年關閉、搬家的消息時有所聞,但是會定期舉辦小型公演的場地大約還是在10間左右。</p>