Введение

Это руководство покажет вам, что KCL решает проблему управления секретами путем интеграции Vault и Vals.

Предпосылки

Как

1. Получить пример

Мы помещаем исходный код приложения и код развертывания инфраструктуры в разные репозитории, которые могут поддерживаться разными ролями для достижения разделения задач.

  • Получить код приложения
git clone https://github.com/kcl-lang/kcl-lang.io.git/
cd ./kcl-lang.io/examples/secret-management/vault
  • Показать конфиг
cat main.k

Выход

# Secret Management using Vault and Vals

apiVersion = "apps/v1"
kind = "Deployment"
metadata = {
    name = "nginx"
    labels.app = "nginx"
    annotations: {
        "secret-store": "vault"
        # Valid format:
        #  "ref+vault://PATH/TO/KV_BACKEND#/KEY"
        "foo": "ref+vault://secret/foo#/foo"
        "bar": "ref+vault://secret/bar#/bar"
    }
}
spec = {
    replicas = 3
    selector.matchLabels = metadata.labels
    template.metadata.labels = metadata.labels
    template.spec.containers = [
        {
            name = metadata.name
            image = "${metadata.name}:1.14.2"
            ports = [{ containerPort = 80 }]
        }
    ]
}

Файл main.k расширяет конфигурацию приложения Nginx и настраивает аннотации. Среди них значение аннотации foo и bar соответствует формату секретной ссылки (ref+vault://PATH/TO/KV_BACKEND#/KEY):

  • ref+vault: указывает, что это секретная ссылка, а служба внешнего хранилища — Vault.
  • PATH/TO/KV_BACKEND: указывает путь, где хранится секрет.
  • KEY: указывает ключ для чтения секрета.

Полный формат объединяется с использованием стиля, аналогичного выражениям URI, которые могут извлекать секрет, хранящийся извне.

2. Секреты перед магазином

Запустите сервер хранилища

vault server -dev
export VAULT_ADDR='http://127.0.0.1:8200'
# Note: Replace with your token 
export VAULT_TOKEN=yourtoken

После запуска Vault в режиме разработки и распаковки секреты предварительно сохраняются, а путь и ключи соответствуют main.k:

vault kv put secret/foo foo=foo
vault kv put secret/bar bar=bar

3. Развернуть конфигурацию

Используйте следующую команду, чтобы применить манифест развертывания.

kcl main.k | vals eval -f - | kubectl apply -f -

Ожидаемый результат

deployment.apps/nginx created

4. Проверка секретов

Далее проверяем, что секреты были извлечены из Vault и заменяем значения аннотаций Nginx:

  • Проверьте аннотацию foo
kubectl get deploy nginx -o yaml | grep 'foo:'

Выход

foo: foo
  • Проверьте аннотацию bar
kubectl get deploy nginx -o yaml | grep 'bar:'

Выход

bar: bar

На данный момент мы получили секреты, хранящиеся в Vault, и использовали их.

Резюме

В этом руководстве рассказывается, как KCL решает проблему управления секретами путем интеграции Vault и Vals. Следуя этим шагам, мы можем получить секреты, размещенные в Vault, и использовать их.