kubernetes - 如何让 K8s `ca.crt` 和 `ca.key` 在服务提供商(GKE)上运行 K8s
问题描述
注意:我不是在 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.crt
和ca.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/.
解决方案
你没有。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
我在这里写了一个端到端流程的例子。
推荐阅读
- php - 涉及 phar 文件的自动加载优先级是什么
- java - UTF 符号的 DataOutputStream.writeUTF() 问题
- r - R Shiny:只计算一次重复输出
- react-native - 如何在 API Nextjs 服务器上发布数据
- c++ - 移动构造函数和移动赋值运算符在不将指针作为成员变量且不管理资源的类中有意义吗?
- python - 如何使用 pygame.draw.line 设置 alpha 透明度属性?
- python - 如何使用 BDFR 从 Reddit 下载所有保存的图片?
- haskell - 为什么 Haskell 在 Real 上实现 Enum?
- php - 使用嵌套数组解码 json 响应并循环到表 php
- javascript - React-native-action-button : 改变动作项的位置