Как создать запрос подписи сертификата клиента Kubernetes для Cockroachdb

Средой, с которой я работаю, является защищенный кластер, в котором работает таракан / гке.

У меня есть утвержденный сертификат default.client.root, который позволяет мне получать доступ к БД с помощью root, но я не могу понять, как генерировать новые запросы на сертификаты для дополнительных пользователей. Я снова и снова читал документы по cockroachDB, и в них объясняется, как вручную генерировать сертификат пользователя в автономной конфигурации, где доступно расположение ca.key, но не конкретно, как это сделать в контексте Kubernetes.

Я полагаю, что образ cockroachdb/cockroach-k8s-request-cert:0.3 является отправной точкой, но я не могу понять, как его использовать.

Любые указатели будут высоко оценены. В конечном итоге я хотел бы иметь возможность использовать этот сертификат из API в том же кластере Kubernetes, который использует клиент pg. В настоящее время он находится в небезопасном режиме, используя только имя пользователя и пароль.

1 ответ

request-cert Задание используется в качестве контейнера инициализации для модуля. Он будет запрашивать сертификат клиента или сервера (сертификаты сервера запрашиваются узлами CockroachDB) с использованием API CSR K8S.

Вы можете увидеть пример запроса сертификата клиента, который затем используется заданием в client-secure.yaml. Контейнер init запускается перед вашим обычным контейнером:

  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

Это отправляет CSR с использованием API K8S, ожидает утверждения и помещает все полученные файлы (сертификат клиента, ключ для сертификата клиента, сертификат CA) в /cockroach-certs, Если сертификат уже существует как секрет K8S, он просто захватывает его.

Вы можете запросить сертификат для любого пользователя, просто изменив --user=root на имя пользователя, который вы используете.

Другие вопросы по тегам