【问题标题】:How do I get the K8s `ca.crt` and `ca.key` running K8s on a service provider(GKE)如何让 K8s `ca.crt` 和 `ca.key` 在服务提供商(GKE)上运行 K8s
【发布时间】:2021-10-17 07:50:24
【问题描述】:

注意:我不是在 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

如何获得 K8s ca.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/.之外的其他方式

【问题讨论】:

    标签: kubernetes google-kubernetes-engine


    【解决方案1】:

    我建议查看以下documentation,了解如何为您的 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

    编辑

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

    【讨论】:

    • 谢谢,但我仍然需要证书和密钥 ;-)
    【解决方案2】:

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

    具体来说,我引用:

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

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

    编码您的 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
    

    我写了一个端到端流程here的例子。

    【讨论】:

      猜你喜欢
      • 2020-05-17
      • 2020-06-16
      • 2020-09-21
      • 2023-04-02
      • 2023-01-02
      • 2020-09-28
      • 1970-01-01
      • 2018-08-04
      相关资源
      最近更新 更多