Toggle navigation
主页
English
K8S
Golang
Guitar
About Me
归档
标签
Welcome to Sanger's Blog!
ACK专有集群手动签发替换Apiserver证书指导
K8S
2024-01-10 17:34:36
34
0
0
sanger
K8S
[TOC] # 专有集群手动签发替换Apiserver证书 说明: ACK专有集群不支持Apiserver SLB EIP后续添加或更换的产品化能力,由于专有版Master节点在客户侧运维,您可以使用Master节点上的集群CA和key重新签发apiserver服务端证书,解决由于集群创建后EIP变更导致的apiserver服务端证书SAN认证问题。 ## 1. 备份 登录到目标集群Master节点上,在您指定的路径下创建备份目录,需要备份的原apiserver服务端证书路径如下: ``` mkdkr /etc/kubernetes/pki/backup;mv /etc/kubernetes/pki/apiserver.crt /etc/kubernetes/pki/backup/;mv /etc/kubernetes/pki/apiserver.key /etc/kubernetes/pki/backup/ ``` ## 2. 签发新证书 One by one依次登录到目标集群所有Master节点上,完成如下操作: ### 1)确认安装cfssl 如果节点上未安装cfssl,请参考如下步骤安装: ``` curl -s -L -o /bin/cfssl https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 curl -s -L -o /bin/cfssljson https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 curl -s -L -o /bin/cfssl-certinfo https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 chmod +x /bin/cfssl* ``` ### 2)生成默认证书配置 ``` mkdir /etc/kubernetes/renew; echo '{"signing":{"default":{"expiry":"876000h","usages":["signing","key encipherment","server auth"]}}}' > /etc/kubernetes/renew/ca-config.json ``` 注意这里的证书过期时间设为100年,可以根据需要自行修改 ### 3) 生成新证书 使用cfssl基于上述配置文件和apiserver服务端证书对应的Organazation,CN,SAN等信息生成新的证书对: 1.export证书SAN,包含原证书所有host、ip以及新的EIP网址,通过逗号分割 ``` export ADDRESS=cn-hongkong.192.168.1.35,kubernetes,kubernetes.default,kubernetes.default.svc,kubernetes.default.svc.cluster.local,172.19.0.1,192.168.0.37,192.168.0.34,39.107.209.17,192.168.0.35,192.168.0.36,192.168.0.37,127.0.0.1 ``` 注:这里的host和ip可通过命令 `openssl x509 -in /etc/kubernetes/pki/apiserver.crt -text -noout` 查看 2. export 证书CN,这里可以固定 ``` export NAME=kube-apiserver ``` ## 3. 签发证书: ``` echo '{"CN":"'$NAME'","hosts":[""],"key":{"algo":"rsa","size":2048}}' | cfssl gencert -config=/etc/kubernetes/renew/ca-config.json -ca=/etc/kubernetes/pki/ca.crt -ca-key=/etc/kubernetes/pki/ca.key -hostname="$ADDRESS" - | cfssljson -bare $NAME ``` 注意cfssl默认生成的证书后缀为pem,请将生成的证书对重命名apiserver.crt和 apiserver.key ## 4. 替换证书 请确认您已经备份了原apiserver服务端证书和key,然后在节点上将新证书拷贝到相应路径/etc/kubernetes/pki下。 ## 5. 重启节点Apiserver 执行如下命令: ``` docker ps | grep kube-apiserver | awk '{print $1}' | xargs -I '{}' docker restart {} || true ``` 对于containerd运行时的节点,可以kubectl get po -nkube-system | grep api 找到节点对应的apiserver pod,然后执行kubectl delete po xxxxxx -nkube-system删除pod,kubelet会自动拉起pod apiserver完成重启后请kubectl get po -n kube-system | grep api 并且kubectl get no查看重启后的apiserver和节点是否工作正常,在确认无误后再进入到下一个节点的轮转。
上一篇:
Ingress
下一篇:
K8S常用命令
0
赞
34 人读过
新浪微博
微信
更多分享
腾讯微博
QQ空间
人人网
文档导航