手動為k8s的kubelet生成有效期30年的證書

2021-10-04 20:42:04 字數 3460 閱讀 3162

這個東西的作用有:

1. 在新部署k8s集群時,就生成30年證書。這樣就不用1年後為kubelet更換證書。

2. 在證書快到期時,手動生成新證書,替換原證書(不需要替換key),這樣只需要重啟(伺服器或kubelet服務)就能使用新證書,不用等到證書過期,節點被踢出k8s集群,再重新生成。

1. 沿用kubelet原有的ecc演算法生成的 key,假設為kubelet-client.key。生成乙個csr

2. 生成csr之前,通過ini格式,配置乙個req配置檔案。

cat req.conf

[req]

prompt = no

distinguished_name = dn

input_password = 123456  #這個密碼好像沒啥用

[dn]

o = system:nodes

cn = system:node:192.168.1.93

生成csr的命令為:

openssl req -new -sha256 -key kubelet-client.key -config req.conf -out newcsr

其中,kubelet-client.key是原本的kubelet使用的key。新生成的csr是newcsr。

生成csr後,可以用命令看一下其內容:

openssl req -in newcsr -text

certificate request:

data:

version: 1 (0x0)

subject: o = system:nodes, cn = system:node:192.168.1.93

subject public key info:

public key algorithm: id-ecpublickey

public-key: (256 bit)

pub:

04:0b:d4:09:62:a5:d5:bb:aa:bf:2a:9a:7e:f7:01:

xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx

xx:xx:xx:xx:xx

asn1 oid: prime256v1

nist curve: p-256

attributes:

a0:00

signature algorithm: ecdsa-with-sha256

31:47:12:21:00:dd:9f:05:fd:82:7e:53:b7:f3:0c:d5:02:fb:

71:f9:cb:ec:bd:0b:f4:c5:b4:b1:62:21:e0:f9:92:6d:9d:be:

xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:x:

3. 根據csr,使用ca的key和證書頒發新證書

由於kubelet使用v3版本的x509格式。因此v3的額外引數檔案v3.ext如下:

cat v3.ext

keyusage=critical,digital signature, key encipherment

extendedkeyusage=tls web client authentication

basicconstraints=critical,ca:false

subjectkeyidentifier=hash

authoritykeyidentifier=keyid,issuer

最後頒發證書的命令為:

openssl x509 -req -in newcsr -ca  ca.pem -cakey ca-key.pem -out kubelet-c.crt --days 10950 -extfile v3.ext

其中,10950 days是表示30年有效期。

如果報錯ca.srl: no such file or directory

那麼 echo "01" > ca.srl 即可,這個檔案影響到ca頒發的證書的序號,而證書序號應該是唯一的,所以這點需要控制好。

用命令檢視生成的證書:

openssl x509 -in kubelet-c.crt -text

certificate:

data:

version: 3 (0x2)

serial number: 6 (0x6)

signature algorithm: sha256withrsaencryption

issuer: c = cn, st = st, l = l, o = example, ou = system, cn = www.example.com

validity

not before: mar 27 08:48:42 2020 gmt

not after : mar 25 08:48:42 2050 gmt

subject: o = system:nodes, cn = system:node:192.168.1.99

subject public key info:

public key algorithm: id-ecpublickey

public-key: (256 bit)

pub:

04:0b:d4:09:62:a5:d5:bb:aa:bf:2a:9a:7e:f7:01:

16:34:27:4e:79:32:05:8b:de:d3:d3:37:9a:ff:39:

asn1 oid: prime256v1

nist curve: p-256

x509v3 extensions:

x509v3 key usage: critical

digital signature, key encipherment

x509v3 extended key usage:

tls web client authentication

x509v3 basic constraints: critical

ca:false

x509v3 subject key identifier:

58:e3:90:cb:75:e5:c1:78:42:4

x509v3 authority key identifier:

keyid:68:ff:fe:fe:57:87:9b:08

signature algorithm: sha256withrsaencryption

53:a8:72:1d:62:1f:9b:b3:3e:a8:c1:4a:6e:91:ea:20:30:d0:

51:7d:78:4a:8f:a4:72:1a:98:12:51:b1:63:c4:3a:c9:c0:7c:

其他:用現有證書和key生成csr的命令為:

openssl x509 -x509toreq -in kubelet-client.crt -out req.pem -signkey kubelet-client.key

這個req.pem就和上文中的newcsr是一樣的。

k8s證書配置 為 kubelet 配置證書輪換

kubelet 使用證書進行 kubernetes api 的認證。預設情況下,這些證書的簽發期限為一年,所以不需要太頻繁地進行更新。kubelet程序接收 rotate certificates引數,該引數決定 kubelet 在當前使用的 證書即將到期時,是否會自動申請新的證書。kube con...

k8s 之kubelet 元件安裝報錯

1.k8s元件安裝好以後21和22機器都處於running狀態 使用 kubectl get nodes 顯示no.處理大概流程 1.先檢視kubelet元件的日誌 failed to list v1.service get x509 certificate is valid for 127.0.0...

K8s部署prometheus監控K8s細節

prometheus 一些配置檔案可以再github上找到。部署 root kube prometheus manifests 目錄下所有檔案 部署 root kube prometheus manifests setup 目錄下所有檔案 要注意的是自己要建立乙個工作空間 如果報錯執行下面語句 部署...