Files
k8s-configs/README.md
Rustam Tagaev 90155cad0b [DO-1477] create k8s struct and move openresty (#2)
Co-authored-by: Rustam Tagaev <rustam.tagaev@avroid.tech>
Co-authored-by: Denis Patrakeev <denis.patrakeev@avroid.team>
Reviewed-on: https://git.avroid.tech/K8s/k8s-configs/pulls/2
Reviewed-by: Denis Patrakeev <denis.patrakeev@avroid.team>
Co-authored-by: Rustam Tagaev <rustam.tagaev@avroid.team>
Co-committed-by: Rustam Tagaev <rustam.tagaev@avroid.team>
2025-01-17 15:50:41 +03:00

97 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 ./<your_namespace>
# далее меняем в файле имя на свой 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
template:
metadata:
labels:
app.kubernetes.io/name: vault
annotations:
vault.security.banzaicloud.io/vault-addr: "https://vault.avroid.tech" # внешний адрес vault
vault.security.banzaicloud.io/vault-role: "vault-k8s-role" # роль из под которой будем ходить в 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"]
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
```