Как создать запрос подписи сертификата клиента 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
на имя пользователя, который вы используете.