Управление Секретами В Argocd С Помощью Плагина Argocd-Vault С Аутентификацией Kubernetes



Теоретическая часть Для начала стоит отметить, что по умолчанию ArgoCD не имеет возможности скрытно управлять учетными данными (логинами, паролями, токенами и т. д.).

Документация ArgoCD предоставляет список возможных решений для управления учетными данными .

На мой взгляд, наиболее близким к нативному является вариант работы с секретами с помощью argocd-хранилище-плагин (AVP) с использованием аутентификации Kubernetes в Vault. Схема следующая: argocd-репо-сервер входит в Vault с помощью токена сервисной учетной записи, подставляет необходимое значение в секретный манифест в <.

> , и создает секрет.

Управление секретами в ArgoCD с помощью плагина argocd-vault с аутентификацией Kubernetes



Практическая часть



Настройка Арго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

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.