Теоретическая часть Для начала стоит отметить, что по умолчанию ArgoCD не имеет возможности скрытно управлять учетными данными (логинами, паролями, токенами и т. д.).
Документация ArgoCD предоставляет список возможных решений для управления учетными данными .
На мой взгляд, наиболее близким к нативному является вариант работы с секретами с помощью argocd-хранилище-плагин (AVP) с использованием аутентификации Kubernetes в Vault. Схема следующая: argocd-репо-сервер входит в Vault с помощью токена сервисной учетной записи, подставляет необходимое значение в секретный манифест в <.
> , и создает секрет.
Практическая часть
Настройка АргоCD
Ниже приведены примеры необходимых дополнительных настроек для установки ArgoCD с использованием официальной схемы управления.
Настройка argocd-сервера
Настройка конфигурации приложения argocd-сервер для подключения плагина:Создание приложения основной , которые будут приложение из приложения , и создадим остальную часть приложения:# -- [General Argo CD configuration] # @default -- See [values.yaml] config: configManagementPlugins: | - name: argocd-vault-plugin generate: command: ["argocd-vault-plugin"] args: ["generate", ".
/"]
# -- Deploy ArgoCD Applications within this helm release
# @default -- `[]` (See [values.yaml])
## Ref: https://github.com/argoproj/argo-cd/blob/master/docs/operator-manual/
additionalApplications:
- name: main
namespace: argocd
additionalLabels: {}
additionalAnnotations: {}
project: default
source:
repoURL: https://github.com/dmitrii-dmnk/argocd-vault-plugin-demo.git
targetRevision: master
path: apps
helm:
valueFiles:
- values.yaml
destination:
server: https://kubernetes.default.svc
namespace: argocd
syncPolicy:
automated:
prune: true
selfHeal: true
Настройка argocd-repo-сервера
Подключить AVP можно несколькими способами, но самый простой и наименее трудоемкий вариант — использование initContainer. Схема следующая: при старте приложения argocd-repo-server initContainer загружает необходимый плагин.
Используя тип тома пустойDir, монтируем скачанный плагин в argocd-repo-server. Настройка тома и томаMounts в argocd-repo-server: # -- Additional volumeMounts to the repo server main container
volumeMounts:
- name: custom-tools
mountPath: /usr/local/bin/argocd-vault-plugin
subPath: argocd-vault-plugin
# -- Additional volumes to the repo server pod
volumes:
- name: custom-tools
emptyDir: {}
Ранее упоминалось, что запросы секретов из Vault будут осуществляться приложением.
argocd-репо-сервер, поэтому ему нужно настроить serviceAccount: ## Repo server service account
## If create is set to true, make sure to uncomment the name and update the rbac section below
serviceAccount:
# -- Create repo server service account
create: true
# -- Repo server service account name
name: argocd-repo-server
Настройка initContainer для загрузки плагина: # -- Init containers to add to the repo server pods
initContainers:
- name: download-tools
image: alpine:3.8
command: [ sh, -c ]
args:
- wget -O argocd-vault-plugin
https://github.com/argoproj-labs/argocd-vault-plugin/releases/download/v1.6.0/argocd-vault-plugin_1.6.0_linux_amd64 &&
chmod +x argocd-vault-plugin && mv argocd-vault-plugin /custom-tools
volumeMounts:
- mountPath: /custom-tools
name: custom-tools
Вышеуказанные настройки собраны в один файл.
argrocd-values.yaml и доступны на github.
Применение вышеуказанных настроек в ArgoCD
В демонстрационных целях можно использовать готовую конфигурацию argocd-values.yaml и развернуть ArgoCD, например, в миникубе.
Клонируем репозиторий с настройками: git clone [email protected]:dmitrii-dmnk/argocd-vault-plugin-demo.git;
cd argocd-vault-plugin-demo/helpers
Примените параметры с помощью helm: helm upgrade -i argocd argo/argo-cd \
--atomic \
--create-namespace -n argocd \
-f argocd-values.yaml \
--version=3.29.5
На этом настройка ArgoCD завершена.
Настройка хранилища
Если аутентификация Kubernetes еще не включена в Vault, вы можете включить ее с помощью следующей команды: vault auth enable kubernetes
Если аутентификация Kubernetes была только что включена с помощью приведенной выше команды, вам необходимо настроить дополнительные параметры с помощью следующей команды:
vault write auth/kubernetes/config \
issuer=" https://kubernetes.default.svc.cluster.local " \
token_reviewer_jwt="$(cat /var/run/secrets/ kubernetes.io/serviceaccount/token )" \
kubernetes_host=" https://$KUBERNETES_PORT_443_TCP_ADDR:443 " \
kubernetes_ca_cert=@/var/run/secrets/ kubernetes.io/serviceaccount/ca.crt
Стоит обратить внимание на параметр эмитент=" https://kubernetes.default.svc.cluster.local " , который необходим для Vault 1.9.0 и Kubernetes 1.20 и более поздних версий.
Настоятельно рекомендуется ознакомиться с официальной документацией Vault подробнее в разделе Метод аутентификации Kubernetes .
Для демонстрации добавим дополнительное КВ хранилище 2-й версии и разместим его в тест секрет: vault secrets enable -path=avp -version=2 kv
vault kv put avp/test sample=secret
Создайте и используйте файл с политика в отношении argocd-репо-сервер: cat << EOF > /tmp/policy.hcl
path "avp/data/test" { capabilities = ["read"] }
EOF
vault policy write argocd-repo-server /tmp/policy.hcl
Создаем авторизацию в Kubernetes роль для argocd-repo-сервера: vault write auth/kubernetes/role/argocd-repo-server \
Теги: #Kubernetes #хранилище #gitops #argocd #argocd
-
Управление Командой: Простые Истины
19 Oct, 24 -
Ржавчина Включена В Индекс Tiobe
19 Oct, 24 -
Javapocalypse В Единой Системе
19 Oct, 24 -
Праздник На Красной Площади В Second Life
19 Oct, 24 -
Конференция Dump-2015: Секция «Тестирование»
19 Oct, 24