2

注意:我不是在 Minikube 或其他东西上本地运行,而是 GKE - 但可以是任何提供者。

我希望能够使用 openssl 在 K8s 中创建用户/上下文:

openssl x509 -req -in juan.csr -CA CA_LOCATION/ca.crt -CAKey CA_LOCATION/ca.key -CAcreateserial -out juan.crt -days 500

如何获得 K8sca.crtca.key? - 我找到了这个ca.crt,但这是方式并且仍然缺少 ca.key?

kubectl get secret -o jsonpath="{.items[?(@.type==\"kubernetes.io/service-account-token\")].data['ca\.crt']}" | base64 --decode

而且,除了登录主节点之外/etc/kubernetes/pki/.

4

2 回答 2

1

你没有。Google 不会按照文档公开密钥。

具体来说,我引用:

内部 Google 服务管理此 CA 的根密钥,这些密钥是不可导出的。此服务接受证书签名请求,包括来自每个 GKE 集群中 kubelet 的请求。即使集群中的 API 服务器被入侵,CA 也不会被入侵,因此不会影响其他集群。

使用 Kubernetes v1.19 及更高版本,您可以使用此处引用的 Kubernetes API 本身签署您的 CSR 。

编码您的 CSR $ ENCODED=$(cat mia.csr | base64 | tr -d "\n")

然后发布到k8s:

$ cat <<EOF | kubectl apply -f -
apiVersion: certificates.k8s.io/v1
kind: CertificateSigningRequest
metadata:
  name: mia
spec:
  request: $ENCODED
  signerName: kubernetes.io/kube-apiserver-client
  #expirationSeconds: 86400  # Only supported on >=1.22
  usages:
  - client auth
EOF

然后批准 CSR:

$ kubectl certificate approve mia
certificatesigningrequest.certificates.k8s.io/mia approved

然后下载签名证书:

kubectl get csr mia -o jsonpath='{.status.certificate}'| base64 -d > mia.crt

我在这里写了一个端到端流程的例子。

于 2021-10-16T23:50:24.330 回答
1

我建议查看以下有关如何为您的 kubernetes 集群生成 ca.key 和 ca.crt 的文档。请记住,这不是官方的 google 文档,但是这可能会帮助您实现所需的内容。

以下是文档中的命令。

生成 ca.key:openssl genrsa -out ca.key 2048

生成 ca.cert:openssl req -x509 -new -nodes -key ca.key -subj "/CN=${MASTER_IP}" -days 10000 -out ca.crt

编辑

我发现了 2 个关于使用 openssl 生成证书和密钥的不受支持的文档[1] [2],它应该适用于 kubernetes。

于 2020-01-10T13:44:18.560 回答