Введение
Это руководство покажет вам, что KCL решает проблему управления секретами путем интеграции Vault и Vals.
Предпосылки
- Установить ККЛ
- Подготовьте Кластер Kubernetes
- Установить Хранилище
- Установить Вальс
Как
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, и использовать их.