Включение модуля
Для использования модуля 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."