如何为Cockroachdb创建Kubernetes客户端证书签名请求

时间:2018-08-23 09:46:33

标签: kubernetes client-certificates cockroachdb

我正在使用的环境是运行蟑螂/ gke的安全集群。

我有一个批准的default.client.root证书,该证书允许我使用root用户访问数据库,但是我不明白如何为其他用户生成新的证书请求。我已经一遍又一遍地阅读cockroachDB文档,并且说明了如何在可访问ca.key位置的独立配置中手动生成用户证书,但没有具体说明如何在Kubernetes的上下文中进行操作。

我相信图像cockroachdb / cockroach-k8s-request-cert:0.3是起点,但我无法弄清楚如何使用它。

任何指针将不胜感激。最终,我希望能够从使用pg客户端的同一Kubernetes集群中的API中使用此证书。当前,它处于不安全模式,仅使用用户名和密码。

1 个答案:

答案 0 :(得分:1)

request-cert作业用作容器的初始化容器。它将使用K8S CSR API请求客户端或服务器证书(服务器证书由CockroachDB节点请求)。

您可以在client-secure.yaml中看到一个请求然后由作业使用的客户端证书的示例。初始化容器先于常规容器运行:

  initContainers:
  # The init-certs container sends a certificate signing request to the
  # kubernetes cluster.
  # You can see pending requests using: kubectl get csr
  # CSRs can be approved using:         kubectl certificate approve <csr name>
  #
  # In addition to the client certificate and key, the init-certs entrypoint will symlink
  # the cluster CA to the certs directory.
  - name: init-certs
    image: cockroachdb/cockroach-k8s-request-cert:0.3
    imagePullPolicy: IfNotPresent
    command:
    - "/bin/ash"
    - "-ecx"
    - "/request-cert -namespace=${POD_NAMESPACE} -certs-dir=/cockroach-certs -type=client -user=root -symlink-ca-from=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
    env:
    - name: POD_NAMESPACE
      valueFrom:
        fieldRef:
          fieldPath: metadata.namespace
    volumeMounts:
    - name: client-certs
      mountPath: /cockroach-certs

这将使用K8S API发送CSR,等待批准,并将所有结果文件(客户端证书,客户端证书的密钥,CA证书)放置在/cockroach-certs中。如果该证书已经作为K8S机密存在,则只需获取它即可。

只需将--user=root更改为您要使用的用户名,即可为任何用户申请证书。