Kubernetes使用哪个证书和密钥签署证书签名请求?

Kubernetes使用哪个证书和密钥签署证书签名请求?,kubernetes,certificate,kubectl,x509,Kubernetes,Certificate,Kubectl,X509,我试图为新用户自动签署Kubernetes证书。 官方文件()建议使用Kubectl。他们特别建议使用以下命令: kubectl证书批准csr\u名称 并通过以下方式获得base64编码证书: kubectl获取csr/csr\u名称-o yaml 并查看状态.certificate字段。因为我可以访问集群证书(at/etc/kubernetes/pki),而且我想进一步自动化这个过程,所以我想知道kubernetes在签名过程中使用了哪个证书和密钥。我尝试了apiserver、ca和kubea

我试图为新用户自动签署Kubernetes证书。
官方文件()建议使用Kubectl。他们特别建议使用以下命令:

kubectl证书批准csr\u名称

并通过以下方式获得base64编码证书:

kubectl获取csr/csr\u名称-o yaml

并查看
状态.certificate
字段。因为我可以访问集群证书(at/etc/kubernetes/pki),而且我想进一步自动化这个过程,所以我想知道kubernetes在签名过程中使用了哪个证书和密钥。我尝试了apiserver、ca和kubeadmin(.crt和.key)以及openssl,如下所示:

opensslx509-req my.csr-days 365-CA/etc/kubernetes/*.crt-CAkey/etc/kubernetes/*.key-CAcreateserial-out my.crt

其中,
*.crt
*.key
是上述各种文件。但结果总是不同于kubectl指挥部的结果。知道我错过了什么吗


提前谢谢

目前的答案非常片面

1.etcd、kube apiserver、kube控制器管理器、kube调度程序、kubelet和kube代理的CA

因为我可以访问群集证书(在 /etc/kubernetes/pki),因为我想进一步自动化 进程我想知道使用哪个证书和密钥 Kubernetes在签名过程中

有一个很好的教程,可以让您自己检查、测试和尝试如何使用手动创建核心资源的所有证书来手动创建kubernetes群集

您将使用CloudFlare的PKI提供PKI基础架构 然后使用它来引导证书颁发机构,以及 为以下组件生成TLS证书:etcd, kube apiserver、kube控制器管理器、kube调度程序、kubelet和 库贝代理

您将生成Kubernetes配置文件,也称为 kubeconfigs,使Kubernetes客户端能够定位和 向Kubernetes API服务器进行身份验证

2.新用户创建 你可以作为参考。复制粘贴历史记录,以防原始帖子被删除

您可以使用集群中的内置CA来创建客户端 证书。有关如何使用CA的背景信息:

假设您有一个user.json

{
    "CN": "mfrank",
    "key": {
        "algo": "rsa",
        "size": 4096
    },
    "names": [{
        "O": "mfrank",
        "email": "some@email"
    }]
}
然后,您可以为此生成CSR。在本例中,我使用cfssl 生成CSR:

您现在可以使用kubectl为集群提交CSR:

解码它:

现在可以使用client-key.pem和client.pem构建 库贝肯

然后,您可以在集群上创建RBAC角色索引,并将其分配给 –user=mfrank或–group=mfrank(假设您使用了“O”:“mfrank”)


非常感谢您花时间给出这么好的答案!
cfssl genkey user.json  | cfssljson -bare client
cat <<EOF | kubectl create -f -
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
  name: mfrank
spec:
  groups:
  - system:authenticated
  - mfrank
  request: $(cat client.csr | base64 | tr -d '\n')
  usages:
  - digital signature
  - key encipherment
  - client auth
EOF
kubectl certificate approve mfrank
kubectl get csr mfrank -o jsonpath='{.status.certificate}' | base64 -d > client.pem