所以我经历了生成RSA密钥的过程,为CSR创建YAML,使用kubectl在Minikube中创建CSR,批准了证书。
但是,当我尝试使用kubectl get csr my-csr -o jsonpath='{.status.certificate}'
下载证书时,我得到的结果为空。
当我做一个kubectl get csr my-csr -o yaml
来获取更多信息时,这就是我看到的:
status:
conditions:
- lastUpdateTime: "2020-01-17T20:17:20Z"
message: This CSR was approved by kubectl certificate approve.
reason: KubectlApprove
type: Approved
我期待一个带有 base64 编码字符串的证书属性,我将解码该属性以获取用于客户端证书验证的证书。有人可以告诉我我做错了什么吗?
有关更多上下文,我正在尝试按照本教程中的说明进行操作
我遇到了类似的问题。当我使用以下命令检查时:
Kubectl Get SVC
似乎CSR的状态已批准,但尚未发布。知道如何解决它吗?
[更新] 我发现了问题。这是因为 kube-controller-manager 错过了这些选项:
--群集签名证书文件和 --群集签名密钥文件
就我而言,我有一个错别字错误
带拼写错误:签名者姓名:kubernetes.io/kube-apisever-client
WithoutTypo: signerName: kubernetes.io/kube-apiserver-client
并具有相同的结果.csr被批准并且未颁发证书。 在我更正错别字错误后,它已解决。
由于 CSR 不是特定于命名空间的,因此该命令看起来不错。 我做了同样的事情来获取证书,请检查您正确提供正确的 csr 名称。
其次,如果您没有提供名称,并尝试获取所有 CSR 详细信息,则需要通过其他.items[*]
更改密钥结构
kubectl get csr -o jsonpath='{.items[*].status.certificate}'
我有一种感觉,你错过了 csr 名称my-csr
或者名称与搜索不匹配(错别字?仔细检查。
这个错误必须出现。从文档中
Permitted subjects - organizations are exactly ["system:nodes"], common name starts with "system:node:".
因此,解决方案是在证书生成中添加主题 O=system:nodes,并将"system:node:"附加到您的服务名称中。
例如。openssl req -new -key server.key -out server.csr -subj "/O=system:nodes/CN=system:node:colortokens-bgl.csp.svc" -config server.conf
验证您的控制器管理器配置,必须为控制器管理器提供 --cluster-signing-cert-file 和 --cluster-signing-key-file config,以便叹息 CSR。
https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/#kube-controller-manager-configuration
前任:
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
controllerManager:
extraArgs:
cluster-signing-cert-file: /etc/kubernetes/pki/ca.crt
cluster-signing-key-file: /etc/kubernetes/pki/ca.key