Инфраструктура

Управляйте секретами в Kubernetes с помощью External Secret Operator от OVHcloud 🎉

Поделиться:
Discover the External Secret Operator (ESO) OVHcloud Provider to manage your Kubernetes secrets  🎉

Несколько месяцев назад мы выпустили бета-версию OVHcloud Secret Manager и показали вам, как управлять секретами с помощью существующего провайдера Hashicorp Vault для External Secret Operator (ESO).

Теперь, когда наш Secret Manager стал общедоступным, наши команды разработали провайдер OVHcloud для ESO, который теперь доступен в новом релизе ESO v2.3.0 🎉.

В этой статье блога вы узнаете, как создать новый секрет в OVHcloud Secret Manager и как управлять им в ваших кластерах Kubernetes с помощью провайдера OVHcloud для ESO.

External Secrets Operator (ESO)

Discover the External Secret Operator (ESO) OVHcloud Provider to manage your Kubernetes secrets  🎉

External Secrets Operator (ESO), проект песочницы CNCF с 2022 года, — это оператор Kubernetes, который интегрирует системы управления внешними секретами.

Оператор считывает информацию из внешних API и автоматически внедряет значения в Kubernetes Secret. Если секрет изменяется во внешнем API, оператор обновляет его в кластере Kubernetes.

ESO подключается к внешнему менеджеру секретов, такому как OVHcloud, Vault, AWS или GCP, через провайдера, настроенного в (Cluster)SecretStore. Затем ресурс ExternalSecret указывает, какие секреты нужно получить. ESO извлекает эти значения и создает соответствующий Kubernetes Secret внутри кластера.

Discover the External Secret Operator (ESO) OVHcloud Provider to manage your Kubernetes secrets  🎉

Для получения более подробной информации ознакомьтесь с официальной документацией ESO.

Предварительные требования

Чтобы использовать провайдер OVHcloud для ESO, необходимо выполнить несколько предварительных условий:

Провайдер OVH для ESO поддерживает как аутентификацию token, так и mTLS. В этой статье мы будем использовать режим аутентификации по токену. Если вы хотите использовать режим аутентификации mTLS, следуйте руководству провайдера OVHcloud для ESO.

Сгенерировать PAT-токен (только для аутентификации по токену)

(Cluster)SecretStore ESO нуждается в разрешении на получение секретов из Secret Manager.

Если вы хотите использовать аутентификацию по токену, вам понадобится токен (PAT). Вы можете использовать для этого OVHcloud CLI:

PAT_TOKEN=$(ovhcloud iam user token create <имя-локального-пользователя-iam> --name pat-<имя-локального-пользователя-iam> --description "PAT для secret manager домена <id-okms>" -o json  | jq .details.token |  tr -d '"')

echo $PAT_TOKEN
<ваш-токен>

Результат должен быть примерно таким:

$ PAT_TOKEN=$(ovhcloud iam user token create secretmanager-305db938-331f-454d-83a7-3a0a29291661 --name pat-secretmanager-305db938-331f-454d-83a7-3a0a29291661 --description "PAT secret manager for domain 305db938-331f-454d-83a7-3a0a29291661" -o json  | jq .details.token |  tr -d '"')
2026/04/07 14:07:45 Final parameters:
{
"description": "PAT secret manager for domain 305db938-331f-454d-83a7-3a0a29291661",
"name": "pat-secretmanager-305db938-331f-454d-83a7-3a0a29291661"
}

$ echo $PAT_TOKEN
eyJhbGciOiJFZERTQSIsImtpZCI6IjgzMkFGNUE5ODg3MzFCMDNGM0EzMTRFMDJFRUJFRjBGNDE5MUY0Q0YiLCJraW5kIjoicGF0IiwidHlwIjoiSldUIn0.eyJ0b2tlbiI6InBBSFh1WE5JdVNHYVpmV3F2OUFzVmJrU3UwR2UySTJrdFU0OGdTZkwyZ1k9In0.-VDbiUf4vNm1KB9qSv7i4sGMCvxs_EuZFAETB-eaOFf3IX8-9m7akN800--ASgXy55_DDFHdy4Z5uSq8lww-Bw

Закодируйте PAT-токен в base64 и сохраните в переменной окружения:

export PAT_TOKEN_B64=$(echo -n $PAT_TOKEN | base64)
echo $PAT_TOKEN_B64

Получить и сохранить информацию о KMS

Выведите список доменов OKMS:

$ ovhcloud okms list
┌──────────────────────────────────────┬─────────────┐
│ id │ region │
├──────────────────────────────────────┼─────────────┤
│ 305db938-331f-454d-83a7-3a0a29291661 │ eu-west-par │
│ xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx │ eu-west-par │
└──────────────────────────────────────┴─────────────┘

Сохраните конечную точку KMS и ID OKMS в двух переменных окружения. Например:

export OKMS_ID="305db938-331f-454d-83a7-3a0a29291661"
export KMS_ENDPOINT=$(ovhcloud okms get 305db938-331f-454d-83a7-3a0a29291661 -o json | jq .restEndpoint | xargs)

Создать секрет в Secret Manager

В Панели управления OVHcloud (UI) перейдите в раздел 'Secret Manager' и нажмите кнопку Create a secret.

Затем, чтобы создать секрет 'prod/eu-west-par/dockerconfigjson' в регионе Европа (Франция – Париж) eu-west-par, выберите этот регион:

Discover the External Secret Operator (ESO) OVHcloud Provider to manage your Kubernetes secrets  🎉

Затем выберите домен OKMS и создайте "prod/eu-west-par/dockerconfigjson" в пути, заполнив содержимое:

Discover the External Secret Operator (ESO) OVHcloud Provider to manage your Kubernetes secrets  🎉

Наконец, нажмите кнопку Create, чтобы завершить создание нового секрета.

Установить или обновить ESO

Если вы еще не устанавливали ESO в свой кластер Kubernetes, вы можете установить его с помощью Helm:

helm repo add external-secrets https://charts.external-secrets.io
helm repo update

helm install external-secrets
external-secrets/external-secrets
-n external-secrets
--create-namespace
--set installCRDs=true

Если вы уже установили его, теперь вам следует обновить, чтобы использовать этот новый провайдер:

helm upgrade external-secrets external-secrets/external-secrets -n external-secrets

⚠️ Для использования провайдера OVHcloud необходимо иметь работающий экземпляр ESO версии 2.3.0 или выше.

$ helm list -n external-secrets

NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
external-secrets external-secrets 1 2026-04-13 13:56:29.071329 +0200 CEST deployed external-secrets-2.3.0 v2.3.0

Давайте развернем Secret в Kubernetes с помощью провайдера ESO!

Развернуть ClusterSecretStore для подключения ESO к Secret Manager

Настройте ClusterSecretStore для управления синхронизацией с Secret Manager.
Он будет использовать провайдер OVHcloud с режимом авторизации по токену и конечную точку OKMS в качестве бэкенда.

Создайте файл clustersecretstore.yaml.template со следующим содержимым:

apiVersion: external-secrets.io/v1
kind: ClusterSecretStore
metadata:
name: secret-store-ovh
spec:
provider:
ovh:
server: "$KMS_ENDPOINT" # например: "https://eu-west-rbx.okms.ovh.net"
okmsid: "$OKMS_ID" # например: "734b9b45-8b1a-469c-b140-b10bd6540017"
auth:
token:
tokenSecretRef:
name: ovh-token
namespace: external-secrets
key: token
---
apiVersion: v1
kind: Secret
metadata:
name: ovh-token
namespace: external-secrets
data:
token: $PAT_TOKEN_B64

Сгенерируйте файл clustersecretstore.yaml из определенных вами переменных окружения:

envsubst < clustersecretstore.yaml.template > clustersecretstore.yaml

Вы должны получить файл, заполненный информацией OVHcloud KMS:

apiVersion: external-secrets.io/v1
kind: ClusterSecretStore
metadata:
name: secret-store-ovh
spec:
provider:
ovh:
server: "https://eu-west-par.okms.ovh.net" # например: "https://eu-west-rbx.okms.ovh.net"
okmsid: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" # например: "734b9b45-8b1a-469c-b140-b10bd6540017"
auth:
token:
tokenSecretRef:
name: ovh-token
namespace: external-secrets
key: token
---
apiVersion: v1
kind: Secret
metadata:
name: ovh-token
namespace: external-secrets
data:
token: ZXlK...UJ3

Примените это в вашем кластере Kubernetes:

kubectl apply -f clustersecretstore.yaml

Проверьте:

$ kubectl get clustersecretstore.external-secrets.io/secret-store-ovh

NAME AGE STATUS CAPABILITIES READY
secret-store-ovh 7s Valid ReadWrite True

Создание ExternalSecret

Создайте файл externalsecret.yaml со следующим содержимым:

apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: docker-config-secret
namespace: external-secrets
spec:
refreshInterval: 30m
secretStoreRef:
name: secret-store-ovh
kind: ClusterSecretStore
target:
template:
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: "{{ .mysecret | toString }}"
name: ovhregistrycred
creationPolicy: Owner
data:
- secretKey: ovhregistrycred
remoteRef:
key: prod/eu-west-par/dockerconfigjson

Примените его:

$ kubectl apply -f externalsecret.yaml

externalsecret.external-secrets.io/docker-config-secret created

Проверьте:

$ kubectl get externalsecret.external-secrets.io/docker-config-secret -n external-secrets 

NAME STORETYPE STORE REFRESH INTERVAL STATUS READY LAST SYNC
docker-config-secret ClusterSecretStore secret-store-ovh 30m SecretSynced True 4s

После применения этой команды будет создан объект Kubernetes Secret.

$ kubectl get secret ovhregistrycred -n external-secrets

NAME TYPE DATA AGE
ovhregistrycred kubernetes.io/dockerconfigjson 1 49s

Kubernetes Secret был создан 🎉

Мы создали Secret напрямую из ключа, но провайдер OVHcloud ESO позволяет извлекать исходный секрет из различных параметров (извлекать весь секрет, извлекать вложенные значения, извлекать несколько секретов…), в зависимости от ваших потребностей.

Заключение

В этом блоге мы объяснили, как создавать секреты в OVHcloud Secret Manager и затем интегрировать их напрямую в ваши кластеры Kubernetes с помощью нового провайдера ESO OVHcloud.

С этим новым провайдером OVHcloud у вас будет более плавная интеграция между Secret Manager и вашими кластерами Kubernetes с ESO.

Discover the External Secret Operator (ESO) OVHcloud Provider to manage your Kubernetes secrets  🎉