Outil d'automatisation pour la gestion de projets Kubernetes avec Argo CD et Vault sur Kubic
Kubic CLI simplifie la création et la gestion de projets Kubernetes en automatisant la configuration de :
- đïž GitOps : Arborescence de manifests pour Argo CD
- đ Vault : Policies, AppRoles et secrets
- âžïž Kubernetes : Namespaces, ServiceAccounts et RoleBindings
- đ AccĂšs dĂ©veloppeurs : GĂ©nĂ©ration automatique de tokens et kubeconfigs
- Docker â„ 20.x
- Git â„ 2.x
- AccĂšs Ă un cluster Kubernetes
- (Optionnel) AccĂšs Ă une instance Vault
git clone https://github.com/votre-org/kubic-cli.git
cd kubic-climkdir -p secretsCréer secrets/.env avec vos variables d'environnement :
# Vault (optionnel)
VAULT_ADDR=https://vault.example.com
VAULT_TOKEN=your-vault-token
# Kubernetes API
KUBE_API=https://kubernetes.example.com:6443
KUBE_API_TOKEN=your-k8s-admin-token
# Argo CD (optionnel)
ARGOCD_URL=https://argocd.example.com
ARGOCD_TOKEN=your-argocd-tokenCréer secrets/ca.crt avec le certificat CA de votre cluster Kubernetes.
Par défaut, l'outil cherche la structure GitOps dans shared-k8s-prd/. Vous pouvez :
Option A : Créer un dossier local
mkdir -p shared-k8s-prd/apps
mkdir -p shared-k8s-prd/helm/argocd/templates/{k8s-accounts,repository,vault}Option B : Utiliser un submodule Git
git submodule add [email protected]:votre-org/gitops-repo.git shared-k8s-prdOption C : Spécifier un autre chemin
export KUBIC_CLI_GITOPS_PATH=/path/to/your/gitopsshared-k8s-prd/
âââ apps/
â âââ <project-name>/
â âââ dev.json
â âââ prod.json
âââ helm/
âââ argocd/
âââ templates/
âââ argocd-cm.yaml
âââ argocd-rbac-cm.yaml
âââ k8s-accounts/
âââ repository/
âââ vault/
./kubic-cli create-project myapp \
--repo-url [email protected]:org/myapp-chart.git \
--envs dev,staging,prod \
--devs alice,bobCe qui est créé :
- â
Fichiers JSON dans
apps/myapp/pour chaque environnement - â
Namespaces Kubernetes (
myapp-dev,myapp-staging,myapp-prod) - â Secrets Vault (Repository, credentials Argo CD)
- â ServiceAccounts et RoleBindings pour alice et bob
- â Configuration Argo CD (comptes, RBAC)
- â Vault policies et userpass pour les dĂ©veloppeurs
./kubic-cli add-environment myapp --envs preprod./kubic-cli add-dev myapp --devs charlieAprĂšs avoir dĂ©ployĂ© via GitOps (commit â push â ArgoCD sync) :
./kubic-cli setup-devs myapp \
--devs alice,bob,charlie \
--cluster-ca secrets/ca.crt \
--write-kubeconfig ./configs/ \
--duration 2160hRésultat :
- đ« Tokens Kubernetes gĂ©nĂ©rĂ©s (valides 90 jours)
- đ Kubeconfigs multi-environnements créés dans
./configs/ - đ Liens Password Pusher pour partager les credentials de maniĂšre sĂ©curisĂ©e
| Commande | Description |
|---|---|
create-project |
Crée un nouveau projet avec environnements et développeurs |
add-environment |
Ajoute des environnements Ă un projet existant |
add-dev |
Ajoute des développeurs à un projet existant |
setup-devs |
GénÚre tokens K8s et kubeconfigs pour développeurs existants |
Toutes les commandes sont idempotentes et peuvent ĂȘtre relancĂ©es sans risque.
./kubic-cli --help
./kubic-cli create-project --help
./kubic-cli add-dev --help# 1. Créer le projet
./kubic-cli create-project myapp \
--repo-url [email protected]:org/myapp.git \
--envs dev,prod \
--devs alice,bob
# 2. Déployer via GitOps
cd shared-k8s-prd
git add .
git commit -m "Add myapp project"
git push
# â Attendre ArgoCD sync
# 3. Générer les accÚs développeurs
./kubic-cli setup-devs myapp \
--devs alice,bob \
--cluster-ca secrets/ca.crt \
--write-kubeconfig ./configs/
# 4. Distribuer les kubeconfigs
# Les fichiers sont dans ./configs/alice.kubeconfig et ./configs/bob.kubeconfig# 1. Ajouter l'environnement
./kubic-cli add-environment myapp --envs staging
# 2. Déployer
cd shared-k8s-prd && git add . && git commit -m "Add staging" && git push
# 3. Régénérer les kubeconfigs (auto-détection du nouvel environnement)
./kubic-cli setup-devs myapp --devs alice,bob --cluster-ca secrets/ca.crt --write-kubeconfig ./configs/# 1. Ajouter le développeur
./kubic-cli add-dev myapp --devs charlie
# 2. Déployer
cd shared-k8s-prd && git add . && git commit -m "Add charlie" && git push
# 3. Générer ses accÚs
./kubic-cli setup-devs myapp --devs charlie --cluster-ca secrets/ca.crt --write-kubeconfig ./configs/Toutes les options peuvent ĂȘtre dĂ©finies via variables d'environnement :
| Variable | Description |
|---|---|
VAULT_ADDR |
URL de Vault |
VAULT_TOKEN |
Token admin Vault |
KUBE_API |
URL du serveur API Kubernetes |
KUBE_API_TOKEN |
Token Bearer pour l'API Kubernetes |
ARGOCD_URL |
URL du serveur Argo CD |
ARGOCD_TOKEN |
Token Bearer admin Argo CD |
KUBIC_CLI_GITOPS_PATH |
Chemin du dépÎt GitOps (défaut: shared-k8s-prd) |
KUBIC_CLI_YAML_HEADER |
Header ajouté aux fichiers YAML générés |
Créer secrets/config.toml (optionnel) :
yaml_header = "# Generated by kubic-cli\n"
gitops_path = "my-gitops-repo"
pw_push_url = "https://pwpush.com/p.json"Les kubeconfigs générés contiennent des contextes pour tous les environnements :
# Lister les contextes disponibles
kubectl config get-contexts --kubeconfig configs/alice.kubeconfig
# Changer de contexte
kubectl config use-context alice-dev@kubic --kubeconfig configs/alice.kubeconfig
kubectl config use-context alice-prod@kubic --kubeconfig configs/alice.kubeconfigCommandes de création/modification (écrivent dans GitOps + Vault) :
create-project: Création initialeadd-environment: Ajout d'environnementsadd-dev: Ajout de développeurs
Commande de génération (readonly pour GitOps) :
setup-devs: Génération des tokens et kubeconfigs
â Ne commitez jamais :
- Les fichiers dans
secrets/ - Les kubeconfigs générés
- Les tokens ou mots de passe
â Utilisez git-crypt pour chiffrer les secrets si vous devez les versionner
â
Rotation des tokens : Les tokens K8s ont une durée limitée (configurée via --duration)
â Password Pusher : Partagez les credentials via les liens auto-expirables gĂ©nĂ©rĂ©s
Si vous n'utilisez pas Vault :
./kubic-cli create-project myapp \
--repo-url git@... \
--envs dev,prod \
--skip-vault./kubic-cli setup-devs myapp \
--devs alice \
--cluster-name production-cluster \
--cluster-ca secrets/ca.crt \
--write-kubeconfig ./configs/# Token valide 30 jours (720 heures)
./kubic-cli setup-devs myapp \
--devs alice \
--duration 720h \
--cluster-ca secrets/ca.crt \
--write-kubeconfig ./configs/./kubic-cli setup-devs myapp \
--devs alice \
--cluster-ca secrets/ca.crt \
--write-kubeconfig -Le ServiceAccount n'a pas encore été créé dans le cluster. Assurez-vous que :
- Les fichiers GitOps ont été committés et pushés
- Argo CD a synchronisé l'application
- Le ServiceAccount existe :
kubectl get sa -n default
La commande setup-devs n'a pas trouvé de RoleBindings. Vérifiez que :
- Le développeur a été ajouté avec
create-projectouadd-dev - Les fichiers GitOps ont été déployés
- Le fichier
user-{dev}.yamlexiste dansk8s-accounts/
Le certificat CA est nécessaire pour générer des tokens. Assurez-vous que secrets/ca.crt existe ou utilisez --cluster-ca /path/to/ca.crt.
docker build -t kubic-cli:local .
docker run --rm kubic-cli:local pytestkubic-cli/
âââ kubic_cli/ # Code source Python
â âââ main.py # Commandes CLI (Typer)
â âââ vault.py # IntĂ©gration Vault
â âââ gitops.py # Gestion fichiers GitOps
â âââ utils.py # Fonctions utilitaires
â âââ config.py # Configuration
â âââ cred.py # Gestion credentials
â âââ templates/ # Templates Jinja2
âââ tests/ # Tests unitaires
âââ Dockerfile # Image Docker
âââ kubic-cli # Wrapper shell
Les contributions sont les bienvenues ! Merci de :
- Fork le projet
- Créer une branche pour votre feature (
git checkout -b feature/amazing) - Commiter vos changements (
git commit -m 'Add amazing feature') - Pousser vers la branche (
git push origin feature/amazing) - Ouvrir une Pull Request
MIT
- đ Documentation : Consultez
./kubic-cli <command> --help - đ Issues : GitHub Issues
- đŹ Discussions : GitHub Discussions
Fait avec â€ïž pour simplifier la gestion de projet Kubic