网站开发需要哪些人才,暴富建站 网址,前端简历,网站开发者工作描述文章目录 制作延期的CA证书获取CA全名准备签发申请配置生成新CA验证并替换CA 更新master组件的CA配置kube-apiserverkube-controller-managerkube-schedulerkube-admin检查证书过期时间 更新ServiceAccount secret更新node组件配置的CA更新kubelet连接配置签发kubelet自动申请的… 文章目录 制作延期的CA证书获取CA全名准备签发申请配置生成新CA验证并替换CA 更新master组件的CA配置kube-apiserverkube-controller-managerkube-schedulerkube-admin检查证书过期时间 更新ServiceAccount secret更新node组件配置的CA更新kubelet连接配置签发kubelet自动申请的客户端证书 更新master组件的服务端/客户端证书可选kube-apiserverkube-admin 不改变原CA的公私钥安全地在线地更新集群CA 制作延期的CA证书
使用go语言开发的证书生成工具cfssl必须
获取CA全名
cfssl certinfo -cert /etc/kubernetes/pki/ca.crt准备签发申请配置
把原CA的组织、名称信息写入申请配置并设置新CA证书的过期时间为10年后
tee ca-cfssl-csr.json -EOF
{CA: {expiry: 87600h,pathlen: 2},names:[{C: ,ST: ,L: ,O: ,OU: }],CN: kubernetes
}
EOF生成新CA
cfssl开启参数initca传入原CA私钥保持新生成的CA公钥与之前一致
cfssl gencert -initcatrue -ca-key ca.key ca-cfssl-csr.json | cfssljson -bare ca-20240406不能使用openssl来生成CA因为kubeadm、kube-apiserver是golang开发的golang的pki工具包核对证书链时要求CA证书的rawSubject、客户端证书里记录的rawIssuer完全一致而cfssl、kubeadm都是golang开发的能够把信息相同的Subject对象即CA证书的组织、名称序列化为一致的rawSubjectDER字节数组
验证并替换CA
确认新CA是否可以用于验证原CA签发的证书
openssl verify -CAfile ca-20240406.pem apiserver.crt
# 备份原CA
mv ca.crt ca-20191001.crt
mv ca-20240406.pem ca.crt更新master组件的CA配置
kube-apiserver
apiserver的client-ca-file参数用于验证其他master组件、kubelet的客户端证书的合法性默认指向/etc/kubernetes/pki/ca.crt ca.crt文件更新后重启apiserver即可。 requestheader-client-ca-file、etcd-cafile参数指向的其他ca文件如需延期也是按照相同步骤来生成延期的新ca文件
kube-controller-manager
controller-manager连接apiserver的配置信息默认放在/etc/kubernetes/controller-manager.conf文件里 controller-manager.conf文件里certificate-authority-data字段的值就是对/etc/kubernetes/pki/ca.crt文件的base64 with padding编码 root-ca-file参数控制的是注入到ServiceAccount secret里的CA数据也是指向/etc/kubernetes/pki/ca.crt cluster-signing-cert-file参数控制的是签发客户端证书的CA也是指向/etc/kubernetes/pki/ca.crt 需要替换certificate-authority-data字段后重启controller-manager
kube-scheduler
更新/etc/kubernetes/scheduler.conf里的certificate-authority-data后重启scheduler
kube-admin
更新/etc/kubernetes/admin.conf里的certificate-authority-data 把admin.conf复制到~/.kube/config里供kubectl使用
检查证书过期时间
检查apiserver服务端证书、检查配置文件里的客户端证书client-certificate-data、检查CA证书
kubeadm certs check-expiration更新ServiceAccount secret
controller-manager的root-ca-file更新后会自动更新所有ServiceAccount secret里的ca.crt字段用于验证apiserver服务端证书的合法性 使用了ServiceAccount来查询/管理集群配置的系统组件如kube-proxy、calico、coredns需要手动重启以重新加载由ServiceAccount secret注入的CA文件
kubectl rollout restart deployment coredns -n kube-systemServiceAccount secret里的token部分就是一个JWT且不含expire信息不会过期
更新node组件配置的CA
更新kubelet连接配置
更新/etc/kubernetes/kubelet.conf里的certificate-authority-data后重启kubelet kubelet及时恢复与apiserver的通讯不会影响宿主机已运行的pod
签发kubelet自动申请的客户端证书
kubelet发现自己的证书快过期后会自动申请续期自己的客户端证书如果申请的证书可用时间超过了ca本身的有效期则不允许申请集群ca更新后就可以看到待签发的证书申请记录
kubectl get csr
# 批量通过申请
kubectl get csr | grep Pending| cut -d -f 1 |xargs -I{} kubectl certificate approve {}批准签发证书后到宿主机查看新的kubelet证书
# 默认的kubelet证书存放位置
ls -al /var/lib/kubelet/pki/更新master组件的服务端/客户端证书可选
如果不想每年手动生成新的证书可以自己制作长期证书
kube-apiserver
使用原证书的信息使用原证书的私钥制作csr文件 csr文件包含了证书subject所属组织、证书名称、公钥原文这两个关键信息并使用私钥进行了自签名
/usr/bin/openssl x509 -x509toreq -in apiserver.crt -signkey apiserver.key -out apiserver.csr
# 查看csr内容
/usr/bin/openssl req -text -noout -in apiserver.csr根据csr文件使用CA私钥签发证书
# 指定证书的密钥用法TLS密钥协商、扩展用途服务端证书、可选名称(域名和IP)
tee apiserver_ext.cnf -EOF
basicConstraints CA:FALSE
subjectKeyIdentifier hash
authorityKeyIdentifier keyid,issuer
keyUsage critical, digitalSignature, keyEncipherment
extendedKeyUsage serverAuth
subjectAltName alt_names
[alt_names]
DNS.1 kubernetes
DNS.2 kubernetes.default
DNS.3 kubernetes.default.svc
DNS.4 kubernetes.default.svc.cluster.local
DNS.5 服务器名字/域名
IP.1 10.96.0.1
IP.2 服务器IP/反向代理IP
EOF
# 制作10年有效期的证书
/usr/bin/openssl x509 -req -days 3650 -in apiserver.csr -extfile apiserver_ext.cnf -CA ca.crt -CAkey ca.key -CAcreateserial -out apiserver-new20240305.crt
# 验证新证书
/usr/bin/openssl verify -CAfile ca.crt -verbose apiserver-new20240305.crt覆盖原先的apiserver.crt文件重启apiserver即可
kube-admin
从/etc/kubernetes/admin.conf里获取admin的客户端证书和私钥 client-certificate-data进行base64 decode后得到的文本保存为kube-admin.crt文件 client-key-data进行base64 decode后得到的文本保存为kube-admin.key文件
/usr/bin/openssl x509 -x509toreq -in kube-admin.crt -signkey kube-admin.key -out kube-admin.csr使用CA私钥签发证书
tee kube-admin_ext.cnf -EOF
basicConstraints CA:FALSE
subjectKeyIdentifier hash
authorityKeyIdentifier keyid,issuer
keyUsage critical, digitalSignature, keyEncipherment
extendedKeyUsage clientAuth
EOF
# 制作10年有效期的证书
/usr/bin/openssl x509 -req -days 3650 -in kube-admin.csr -extfile kube-admin_ext.cnf -CA ca.crt -CAkey ca.key -CAcreateserial -out kube-admin-new20240305.crt
# 验证新证书
/usr/bin/openssl verify -CAfile ca.crt -verbose kube-admin-new20240305.crt更新admin.conf文件把kube-admin-new20240305.crt文件进行base64 with padding编码填回client-certificate-data字段 把admin.conf复制到~/.kube/config里供kubectl使用