TP optionnel - Configurer un user et un projet dans ArgoCD
ArgoCD est donc un opérateur GitOps ou encore un operateur / superviseur d’applications qui peut s’étendre à plusieurs équipes et cluster.
La question des identités et droits est centrale dans un environnement “multi-tenant” comme une cohabitation de plusieurs équipes.
Nous allons définir pour gérer cette situation un projet ArgoCD et un utilisateur ArgoCD ayant le droit d’intervention sur ce projet. L’entité projet peut être gérée via l’interface, via la CLI, ou mieux via les CRDs intallés par l’opérateur.
Créer un utilisateur
Section titled “Créer un utilisateur”L’utilisateur par contre n’est pas une entité unique dans ArgoCD (donc il n’a pas de CRD). On peut le configurer via diverses integrations/SSO notamment via OIDC ou plus simplement en mode local user: Un local user est ajouté en modifiant une ConfigMap.
Créez un user en editant la configmap argocd-cm (kubectl edit cm argocd-cm ou via lens) pour ajouter:
...data: ... accounts.<votreusername>: apiKey, login accounts.<votreusername>.enabled: "false"Puis définir un mot de passe:
- login en tant qu’admin avec la CLI -> utiliser le compte admin avec initial admin passwd:
argocd login --port-forward --port-forward-namespace argocd --plaintext - Lister les users:
argocd account list --port-forward --port-forward-namespace argocd --plaintext - Définir le mot de passe de votre user:
argocd account update-password --account <votreusername> --current-password <initialadminpassword> --new-password <votrepasswd> --port-forward --port-forward-namespace argocd --plaintext
Pour aller plus loin:
- https://argo-cd.readthedocs.io/en/stable/operator-manual/user-management/#create-new-user
- https://faun.pub/create-argo-cd-local-users-9e830db3763f*
- https://www.reddit.com/r/ArgoCD/comments/15nlbs9/is_it_possible_to_create_argocd_accounts_for_the/
Créer un projet via CRD
Section titled “Créer un projet via CRD”Dans Open-lens, cliquer sur + > créer resource pour définir le project nommé dev-<votreprenom> (ou autre) avec le code suivant:
apiVersion: argoproj.io/v1alpha1kind: AppProjectmetadata: name: dev-<votreprenom> namespace: argocdspec: sourceRepos: - '*' # tous les dépots - '!https://github.com/**' # sauf github (juste pour l'exemple). Nous utiliserons gitlab par la suite destinations: - namespace: '<votrenamespace>' server: 'https://kubernetes.default.svc' # Dans le cluster par défaut clusterResourceWhitelist: # toutes les resources peuvent être crées - group: '*' kind: '*' # policies: # # p, elie, applications, get, my-project/*, allow # p, <votreusername>, applications, *, dev-<votreusername>/*, allowTODO: fix policies syntax !!
(pour plus d’info la doc: https://argo-cd.readthedocs.io/en/stable/user-guide/projects/)
Déployer une application depuis Github
Section titled “Déployer une application depuis Github”Créez (via Lens ou un fichier avec kubectl apply) la resource suivante pour déployer en GitOps notre projet de code monsterstack:
apiVersion: argoproj.io/v1alpha1kind: Applicationmetadata: name: monsterstack-<votrenom> namespace: argocdspec: project: dev-elie source: repoURL: https://github.com/<yourusername>/<yourmonsterrepo> targetRevision: tp_monsterstack_final ## ou autre branche path: k8s-deploy-dev/ directory: recurse: true destination: server: https://kubernetes.default.svc namespace: <yournamespace> syncPolicy: automated: prune: true selfHeal: trueLorsque vous déployer cette application via git, argocd poll/vérifie le dépot toutes les 3 minutes pour se mettre a jour éventuellement avec les modifications.
Pour éviter le poll inutile et diminuer la réactivité des déploiements quand le code change on configure généralement un webhook sur la forge git (ici github). Vous pouvez suivre cette documentation pour ajouter un webhook pour votre application : https://argo-cd.readthedocs.io/en/stable/operator-manual/webhook/