如何解决Kubernetes 使用哪个证书和密钥来签署 CertificateSigningRequests?
我试图为新用户自动执行 Kubernetes 证书签名过程。
官方文档 (here) 建议使用 Kubectl。他们特别建议使用以下命令:
kubectl certificate approve csr_name
并通过以下方式获取 base64 编码的证书:
kubectl get csr/csr_name -o yaml
并查看 status.certificate
字段。由于我可以访问集群证书(在 /etc/kubernetes/pki),并且因为我想进一步自动化该过程,所以我想知道 Kubernetes 在签名过程中使用了哪些证书和密钥。我试过使用 apiserver、ca 和 kubeadmin(.crt 和 .key)和 openssl 如下:
openssl x509 -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-controller-manager、kube-scheduler、kubelet 和 kube-proxy 的 CA
因为我可以访问集群证书(在 /etc/kubernetes/pki) 并且因为我想进一步自动化 过程我想知道哪个证书和密钥被使用 Kubernetes 在签名过程中。
有一个很棒的 Kubernetes The Hard Way 教程,让您有很好的机会来检查、测试和尝试自己如何使用手动创建核心资源的所有证书来手动创建 kubernetes 集群。
Provisioning a CA and Generating TLS Certificates
您将使用 CloudFlare 的 PKI 配置 PKI 基础设施 工具包,cfssl,然后使用它来引导证书颁发机构,以及 为以下组件生成 TLS 证书:etcd、 kube-apiserver、kube-controller-manager、kube-scheduler、kubelet 和 kube 代理。
Generating Kubernetes Configuration Files for Authentication
您将生成 Kubernetes 配置文件,也称为 kubeconfigs,它使 Kubernetes 客户端能够定位和 向 Kubernetes API 服务器进行身份验证。
2. 新用户创建 您可以使用 Kubernetes: How do I access the CA to sign a new user certificate? 作为参考。复制粘贴历史记录,以防原始帖子被删除
您可以在集群中使用 CA 中的构建来创建客户端 证书。关于如何使用 CA 的背景信息: https://kubernetes.io/docs/concepts/cluster-administration/certificates/
假设你有一个 user.json
{
"CN": "mfrank","key": {
"algo": "rsa","size": 4096
},"names": [{
"O": "mfrank","email": "some@email"
}]
}
然后您可以为此生成 CSR。在这个例子中,我使用 cfssl 生成 CSR:
cfssl genkey user.json | cfssljson -bare client
您现在可以使用 kubectl 为您的集群提交 CSR:
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
请求字段是您的 csr 文件的 base64 编码版本。
查看您的 CSR:kubectl get csr
批准:
kubectl certificate approve mfrank
解码:
kubectl get csr mfrank -o jsonpath='{.status.certificate}' | base64 -d > client.pem
您现在可以使用 client-key.pem 和 client.pem 构建一个 kubeconfig。
然后您可以在分配给的集群上创建 RBAC 角色绑定 –user=mfrank 或 –group=mfrank(假设您使用了“O”:“mfrank”)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。