1、问题原因,在rancher上的一个集群上添加用户失败,错误码:
错误码
Internal error occurred: failed calling webhook "rancherauth.cattle.io": Post "https://rancher-webhook.cattle-system.svc:443/v1/webhook/validation?timeout=10s": x509: certificate has expired or is not yet valid: current time 2022-08-19T07:12:55Z is after 2022-08-18T03:27:29Z
for i in $(ls /var/lib/rancher/k3s/server/tls/*.crt); do echo $i; openssl x509 -enddate -noout -in $i; done
K8S各个组件的证书检查都是未过期的
3、可能是rancher本身的证书过期了
需要管理员身份进入 rancher 的 local - system
查看证书列表 发现有证书过期
操作:
需要进入编辑YAML: cattle-webhook-tls
解密base64并 备份为文件名为 tls.crt
和 tls.key
需要进入编辑YAML:cattle-webhook-ca
解密base64并 备份为文件名为 ca.crt
和 ca.key
文件放在同一个目录下即可。
查看检查证书详细信息,操作命令 openssl x509 -in tls.crt -noout -text
创建并编辑openssl.cnf
文件
cat openssl.cnf
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS = rancher-webhook.cattle-system.svc # 填写tls.crt详情里面的 DNS 地址(上图DNS)
或 DNS 有多的话
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = rancher.webhook # 填写tls.crt详情里面的 DNS 地址(上图DNS)
DNS.2 = rancher-webhook.cattle-system.svc # 填写tls.crt详情里面的 DNS 地址(上图DNS)
4、证书签发
#生成服务端私钥
openssl genrsa -out new.key 2048
#生成证书请求文件
openssl req -new -key new.key -out new.csr
注意:填写之前 tls.crt
文件详情里对应的参数
5、生成最终证书文件,-day指定证书有效期 3650 是十年
openssl x509 -req -days 3650 -sha256 -CA ca.crt -CAkey ca.key -CAcreateserial -extfile openssl.cnf -extensions v3_req -in new.csr -out new.crt
6、最终生成文件 new.key
和 new.crt
7、将new.key
和 new.crt
文件进入rancher证书列表,升级过期的 cattle-webhook-tls
。。例外-看看secret
kubectl get secret -n cattle-system