我试图在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"}
答案 0 :(得分:2)
您已经获得了由外部CA签名的私钥和服务器证书,并带有该私钥。您确实没有CA的私钥。
如果您使用的是自签名CA 选项,那么您实际上会获得CA的私钥,而kubeadm可以使用它来签名并生成控制平面组件的所有服务器和客户端证书
您需要遵循kubeadm的External CA mode,只需在ca.crt
位置提供/etc/kubernetes/pki/ca.crt
。
这将利用服务器证书在https
上托管Kubernetes API Server,这是您要实现的目标。
请注意以下内容
在这种情况下,由于您没有用于签署CSR的CA私钥,因此您将无法使用kubernetes来通过批准certificate signing request 来颁发证书。
由于kubeadm在外部CA模式下运行;控制平面组件的所有证书都必须由用户提供,因为kubeadm无法自行生成它们。