# k8s-configs ## Настройка внешних секретов [Ссылка на офф. доку](https://bank-vaults.dev) Для создания vault injector нужно установить helm ```bash helm upgrade -n vault-infra --install --wait vault-secrets-webhook oci://ghcr.io/bank-vaults/helm-charts/vault-secrets-webhook ``` Далее создать роль секрет и рольбиндинг ```bash kubectl apply -f clusters/k8s-avroid-office.prod.local/namespaces/vault-infra/vault-secrets-webhook/vault-service-account.yaml kubectl apply -f clusters/k8s-avroid-office.prod.local/namespaces/vault-infra/vault-secrets-webhook/vault-cluster_role_binding.yaml kubectl apply -f clusters/k8s-avroid-office.prod.local/namespaces/vault-infra/vault-secrets-webhook/vault-secret.yaml ``` Настройка со стороны vault ```bash vault auth enable -path=avroid-office kubernetes TOKEN=$(kubectl get secret vault -n vault-infra -o jsonpath="{.data.token}" | base64 --decode) CA_CERT=$(kubectl get secret vault -n vault-infra -o jsonpath="{.data['ca\.crt']}" | base64 --decode) ISSUER=$(kubectl get --raw /.well-known/openid-configuration | jq '.issuer') K8S_CLUSTER=$(kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}') vault write auth/avroid-office/config \ kubernetes_host="${K8S_CLUSTER}" \ token_reviewer_jwt="${TOKEN}" \ kubernetes_ca_cert="${CA_CERT}" \ issuer="${ISSUER}" \ disable_local_ca_jwt="true" ``` Далее создаем app роль - на каждый namespace нужно создавать свою роль с одноименным названием. ```bash vault write auth/avroid-office/role/tavro-cloud-dev \ bound_service_account_names="*" \ bound_service_account_namespaces="tavro-cloud-dev" \ policies="prj-tavro-cloud-backend" \ ttl="24h" ``` policies - содержит список vault полиси, если нужно добавить новый, то просто добавляем и выполняем эту команду ВНИМАНИЕ: для нормальной работы должен быть создан service-account в каждом namespace для этого просто нужно выполнить ```bash # не забудь поменять в файле namespace свой cp clusters/k8s-avroid-office.prod.local/namespaces/vault-infra/vault-secrets-webhook/vault-service-account.yaml ./ # далее меняем в файле имя на свой namespace и запускаем kubectl apply -f vault-service-account.yaml ``` Простой пример для тестирования - в логах вы увидите свой секрет ```yaml kubectl apply -n sandbox -f - <<"EOF" apiVersion: apps/v1 kind: Deployment metadata: name: vault-test spec: replicas: 1 selector: matchLabels: app.kubernetes.io/name: vault-test template: metadata: labels: app.kubernetes.io/name: vault-test annotations: vault.security.banzaicloud.io/vault-addr: "https://vault.avroid.tech" # внешний адрес vault vault.security.banzaicloud.io/vault-role: "sandbox" # роль из под которой будем ходить в vault vault.security.banzaicloud.io/vault-skip-verify: "false" # проверять сертификат или нет на стороне vault # vault.security.banzaicloud.io/vault-tls-secret: "vault-tls" # сертификат для vault если он самоподписанный # vault.security.banzaicloud.io/vault-agent: "false" # запускать акента который будет отслеживать изменения секрета vault.security.banzaicloud.io/vault-path: "avroid-office" # название kubernetes аутентификации в vault spec: serviceAccountName: vault # имя сервиса аккаунта - должен быть в каждом namespace containers: - name: alpine image: alpine command: ["sh", "-c", "echo $POSTGRES_DSN && echo going to sleep... && sleep 10000"] resources: requests: cpu: 50m memory: 32Mi limits: cpu: 100m memory: 64Mi env: - name: POSTGRES_DSN # переменная окружения куда попадет секрет value: vault:prj-tavro-cloud-backend/data/k8s/avroid.local/ns-tarvo-cloud-dev/svc-messenger-core-api#POSTGRES_DSN # путь до секрета EOF ```