如何向k8s添加证书颁发机构(CA)?

时间:2020-10-16 14:23:36

标签: ssl kubernetes

我试图在k8上使用自己的CA进行内部https通信。

我阅读了文档Certificate Management with kubeadm,该文件在conf文件中使用了如下所述的路径:

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

启动主节点时,出现以下错误:

error execution phase certs/apiserver: couldn't load CA certificate ca: ca certificate is not a certificate authority

我试图找到一种定义权限的方法,并且找到了Certificates。我确实认为这是我正在寻找的内容,因为这是指如何生成自己的自签名CA。

我要申请的CA来自官方机构。

这里是否有我想念的东西?

我正在1.19.2版本上运行

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.2", GitCommit:"f5743093fd1c663cb0cbc89748f730662345d44d", GitTreeState:"clean", BuildDate:"2020-09-16T13:41:02Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"19", GitVersion:"v1.19.2", GitCommit:"f5743093fd1c663cb0cbc89748f730662345d44d", GitTreeState:"clean", BuildDate:"2020-09-16T13:32:58Z", GoVersion:"go1.15", Compiler:"gc", Platform:"linux/amd64"}

1 个答案:

答案 0 :(得分:2)

您已经获得了由外部CA签名的私钥和服务器证书,并带有该私钥。您确实没有CA的私钥。

如果您使用的是自签名CA 选项,那么您实际上会获得CA的私钥,而kubeadm可以使用它来签名并生成控制平面组件的所有服务器和客户端证书

您需要遵循kubeadm的External CA mode,只需在ca.crt位置提供/etc/kubernetes/pki/ca.crt

这将利用服务器证书在https上托管Kubernetes API Server,这是您要实现的目标。

请注意以下内容

  1. 在这种情况下,由于您没有用于签署CSR的CA私钥,因此您将无法使用kubernetes来通过批准certificate signing request 来颁发证书。

  2. 由于kubeadm在外部CA模式下运行;控制平面组件的所有证书都必须由用户提供,因为kubeadm无法自行生成它们。