FEATURE STATE: Kubernetes v1.15
stable
kubeadm生成的客户端证书将在1年后过期。本页介绍如何使用kubeadm管理证书续订。
开始之前
熟悉Kubernetes中的PKI证书和要求以及证书最佳实践。
检查证书过期时间
check-expiration命令可用于检查证书过期时间。
kubeadm alpha certs check-expiration
输出类似于:
CERTIFICATE EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
admin.conf May 15, 2020 13:03 UTC 364d false
apiserver May 15, 2020 13:00 UTC 364d false
apiserver-etcd-client May 15, 2020 13:00 UTC 364d false
apiserver-kubelet-client May 15, 2020 13:00 UTC 364d false
controller-manager.conf May 15, 2020 13:03 UTC 364d false
etcd-healthcheck-client May 15, 2020 13:00 UTC 364d false
etcd-peer May 15, 2020 13:00 UTC 364d false
etcd-server May 15, 2020 13:00 UTC 364d false
front-proxy-client May 15, 2020 13:00 UTC 364d false
scheduler.conf May 15, 2020 13:03 UTC 364d false
该命令显示/etc/kubernetes/pki文件夹中的客户端证书的到期/剩余时间,以及kubeadm(admin.conf,controller-manager.conf和scheduler.conf)使用的KUBECONFIG文件中嵌入的客户端证书。
此外,如果证书是外部管理的,kubeadm会通知用户;在这种情况下,用户应该手动/使用其他工具来管理证书续订。
警告:kubeadm无法管理外部CA签名的证书。
注意:kubelet.conf不包含在上面的列表中,因为kubeadm配置kubelet以进行自动证书续订。
自动续订证书
kubeadm在控制平面升级期间更新所有证书。
此功能旨在解决最简单的使用案例;如果您没有对证书续订的具体要求并定期执行Kubernetes版本升级(每次升级之间不到1年),kubeadm将负责保持您的群集最新并且合理安全。
注意:最佳做法是频繁升级群集以保证安全。
如果您对证书续订有更复杂的要求,可以通过将--certificate-renewal = false传递给kubeadm upgrade apply或kubeadm upgrade node来退出默认行为。
手动续订证书
您可以使用kubeadm alpha certs renew命令随时手动续订证书。
此命令使用CA(或front-proxy-CA)证书和存储在/etc/kubernetes/pki中的密钥执行续订。
警告:如果您正在运行HA群集,则需要在所有控制平面节点上执行此命令。
注意:alpha certs renew使用现有证书作为属性(公用名,组织,SAN等)的权威来源,而不是kubeadm-config ConfigMap。强烈建议让它们保持同步。
kubeadm alpha certs renew提供以下选项:
- --csr-only可用于通过生成证书签名请求(不实际更新证书)来与外部CA续订证书;有关更多信息,请参阅下一节
- 也可以更新单个证书而不是全部证书
使用Kubernetes证书API续订证书
本节提供有关如何使用Kubernetes证书API执行手动证书续订的更多详细信息。
警告:这些高级主题是针对需要将其组织的证书集成到kubeadm构建的群集中的用户。如果默认的kubeadm配置满足您的需求,您应该让kubeadm管理证书。
设置签名
Kubernetes证书颁发机构非开箱即用。您可以配置外部签名,例如cert-manager,也可以使用内置签名。内置签名功能是kube-controller-manager的一部分。要激活内置签名功能,请向kube-controller-manager传递--cluster-signing-cert-file和--cluster-signing-key-file参数。
要激活内置签名功能,必须传递--cluster-signing-cert-file和--cluster-signing-key-file标志。
如果要创建新群集,可以使用kubeadm配置文件:
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
controllerManager:
extraArgs:
cluster-signing-cert-file: /etc/kubernetes/pki/ca.crt
cluster-signing-key-file: /etc/kubernetes/pki/ca.key
创建证书签名请求(CSR)
您可以使用kubeadm alpha certs renew --use-api为Kubernetes证书API创建证书签名请求。
如果设置[cert-manager] [cert-manager]等外部签名,则会自动创建证书签名请求(CSR)。否则,您必须使用kubectl certificate命令手动创建证书。以下kubeadm命令输出要创建证书的名称,然后阻塞并等待创建完成:
sudo kubeadm alpha certs renew apiserver --use-api &
输出类似于:
[1] 2890
[certs] certificate request "kubeadm-cert-kube-apiserver-ld526" created
签发证书签名请求(CSR)
如果设置了外部签名,则会自动签发证书签名请求(CSR)。
否则,您必须使用kubectl certificate命令手动签发证书。例如:
kubectl certificate approve kubeadm-cert-kube-apiserver-ld526
输出类似于:
certificatesigningrequest.certificates.k8s.io/kubeadm-cert-kube-apiserver-ld526 approved
您可以使用kubectl get csr查看待处理证书的列表。
使用外部CA续订证书
本节提供有关如何使用外部CA执行手动证书续订的更多详细信息。
为了更好地与外部CA集成,kubeadm还可以生成证书签名请求(CSR)。CSR表示向CA请求客户端的签名证书。在kubeadm术语中,通常由on-disk CA签名的任何证书都可以作为CSR。但是,CA不能作为CSR。
创建证书签名请求(CSR)
您可以使用--csr-dir传入目录,以将CSR输出到指定位置。如果未指定--csr-dir,则使用默认证书目录(/etc/kubernetes/pki)。CSR和附带的私钥都会输出。
CSR表示向CA请求客户端的签名证书。您可以使用kubeadm alpha certs renew --csr-only创建证书签名请求。
CSR包含证书的名称,域和IP,但不指定用法。CA颁发证书时,有责任指定正确的证书用法。
- 在openssl中,使用openssl ca命令完成
- 在cfssl中,在配置文件中指定用法
证书签名后,必须将证书和私钥复制到PKI目录(默认情况下为/etc kubernetes/pki)。