Включение модуля

Для использования модуля operator-argo в Deckhouse Kubernetes Platform, его необходимо включить. Это можно сделать одним из способов, описанных далее.

Способ 1: Включение с применением ModuleConfig

Для включения модуля создайте ресурс ModuleConfig:

apiVersion: deckhouse.io/v1beta1
kind: ModuleConfig
metadata:
  name: operator-argo
spec:
  enabled: true

Способ 2: Включение с использованием deckhouse-controller

Для включения модуля выполните команду:

kubectl -n d8-system exec deploy/deckhouse -c deckhouse -it -- deckhouse-controller module enable operator-argo

Выключение модуля

При отключении модуля будет удалён оператор ArgoCD (все ресурсы из пространства имен d8-operator-argo). Развёрнутые инсталляции ArgoCD и приложения останутся нетронутыми.

Если вам необходимо отключить модуль operator-argo, вы можете сделать это одним из способов, описанных далее.

Способ 1: Выключение с применением ModuleConfig

Для выключения модуля установите значение enabled в false в конфигурации ModuleConfig:

apiVersion: deckhouse.io/v1beta1
kind: ModuleConfig
metadata:
  name: operator-argo
spec:
  enabled: false

Способ 2: Выключение с использованием deckhouse-controller

Для выключения модуля выполните следующую команду:

kubectl -n d8-system exec deploy/deckhouse -c deckhouse -it -- deckhouse-controller module disable operator-argo

Установка ArgoCD и развертывание ArgoCD Application

Разверните ArgoCD, который будет доступен через Ingress:

---
apiVersion: v1
kind: Namespace
metadata:
  name: argocd
---
apiVersion: argoproj.io/v1beta1
kind: ArgoCD
metadata:
  name: argocd
  namespace: argocd
spec:
  server:
    host: <argocd-domain>
    ingress:
      enabled: true
      tls:
      - hosts:
        - <argocd-domain>
        secretName: argocd-ingress-tls
    # To avoid internal redirection loops from HTTP to HTTPS, the API server should be run with TLS disabled.
    # https://argo-cd.readthedocs.io/en/stable/operator-manual/ingress/#disable-internal-tls
    insecure: true
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: argocd-ingress
  namespace: argocd
spec:
  dnsNames:
  - <argocd-domain>
  issuerRef:
    kind: ClusterIssuer
    name: letsencrypt
  secretName: argocd-ingress-tls

Создайте пространство имен для приложения:

apiVersion: v1
kind: Namespace
metadata:
  name: demo
  labels:
    argocd.argoproj.io/managed-by: argocd

Разверните ArgoCD Application:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: demo
  namespace: argocd
spec:
  destination:
    namespace: demo
    server: https://kubernetes.default.svc
  project: default
  source:
    path: helm-guestbook
    repoURL: https://github.com/argoproj/argocd-example-apps
    targetRevision: HEAD
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

Использование единой системы аутентификации Deckhouse Kubernetes Platform для аутентификации в ArgoCD

Создайте OAuth2-клиента для аутентификации в ArgoCD:

apiVersion: deckhouse.io/v1
kind: DexClient
metadata:
  name: argocd
  namespace: argocd
spec:
  redirectURIs:
    - https://<argocd-domain>/api/dex/callback
    - https://<argocd-domain>/api/dex/callback-reserve
  allowedGroups:
    - Everyone
    - admins
  trustedPeers:
    - opendistro-sibling

После создания ресурса DexClient, DKP зарегистрирует клиента с идентификатором (clientID) dex-client-argocd@argocd (используя шаблон dex-client-<name>@<namespace>).

Дождитесь, пока Deckhouse Kunernetes Platform создаст Secret с секретным ключом для клиента:

kubectl -n argocd get secret/dex-client-argocd 

Настройте ArgoCD для использования системы аутентификации DKP:

apiVersion: argoproj.io/v1beta1
kind: ArgoCD
metadata:
  name: argocd
  namespace: argocd
spec:
  sso:
    dex:
      config: |
        connectors:
          - type: oidc
            id: deckhouse
            name: deckhouse
            config:
              issuer: "https://dex.<cluster-domain>/"
              clientID: "dex-client-argocd@argocd"
              clientSecret: "$dex-client-argocd:clientSecret"        
    provider: dex
  server:
    host: <argocd-domain>
    ingress:
      enabled: true
      tls:
        - hosts:
            - <argocd-domain>
          secretName: argocd-ingress-tls
    # To avoid internal redirection loops from HTTP to HTTPS, the API server should be run with TLS disabled.
    # https://argo-cd.readthedocs.io/en/stable/operator-manual/ingress/#disable-internal-tls
    insecure: true

Перезапустите сервер ArgoCD:

kubectl -n argocd rollout restart deploy/argocd-server

Если не перезапустить сервер ArgoCD, то попытка входа не удастся, а в логе сервера ArgoCD появится сообщение об ошибке (issue о проблеме).

Пример сообщения об ошибке... time="2024-10-16T14:12:59Z" level=warning msg="Failed to verify token: failed to verify token: token verification failed for all audiences: error for aud "argo-cd": Failed to query provider "https://argocd./api/dex": Get "https://argocd./api/dex/.well-known/openid-configuration": tls: failed to verify certificate: x509: certificate is valid for ingress.local, not argocd., error for aud "argo-cd-cli": Failed to query provider "https://argocd./api/dex": Get "https://argocd./api/dex/.well-known/openid-configuration": tls: failed to verify certificate: x509: certificate is valid for ingress.local, not argocd."