Déploiement#
Note
Cette documentation ne s'applique qu'à NGOT à partir de la version Comet.
Informations requises#
Pour le déploiement de ce composant, le client doit nous fournir les informations suivantes :
- le nom du domaine FE ;
- le nom du projet ;
- la région ;
- les identifiants (nom/mot de passe) d'un compte de service spécialement créé avec des droits limités. La section qui suit explique comment le créer ;
- la liste des métriques disponibles que vous souhaitez collecter ;
- les labels supplémentaires que vous souhaitez positionner sur ces métriques.
Pour faciliter cet échange nous avons mis en place une stack Terraform pour la création du compte de service. Un repository a été créé afin de suivre les changements. Le client doit nous faire parvenir ces informations sous forme de token à l'aide de la fonctionnalité Wrap de Vault.
Unwrap du token Vault et sauvegardes des données#
La fonctionnalité Wrap/Unwrap de Vault est utilisé pour nous faire parvenir les données sensibles du client de manières sécurisé, un accès au Vault interne OAB est donc nécessaire https://vault-oab.si.fr.intraorange.
Après le déchiffrage du token, nous allons sauvegarder le mot de passe dans le Vault infra et le reste des données dans NGOT-Zone.
Warning
Le token est configuré avec un TTL de 24h.
Warning
Le token peut être déchiffré qu'une seule fois.
Authentification au Vault interne OAB#
export VAULT_ADDR="https://vault-oab.si.fr.intraorange"
vault login -method oidc -path=sso
Unwrap du token#
TOKEN=""
vault unwrap -format=json ${TOKEN} | jq '.data' > data-cloudeye.json
Vérification du contenu du fichier data-cloudeye.json
Warning
Ne pas avoir de doublons sur la liste des namespaces, exemple de doublons:[SYS.ECS, SYS.RDS, SYS.ECS].
Validation des informations du fichier data-cloudeye.json
OS_AUTH_URL=$(jq -r '.auth_url' data-cloudeye.json)
OS_USERNAME=$(jq -r '.user_name' data-cloudeye.json)
OS_PASSWORD=$(jq -r '.password' data-cloudeye.json)
OS_DOMAIN_NAME=$(jq -r '.domain_name' data-cloudeye.json)
OS_TENANT_NAME=$(jq -r '.project_name' data-cloudeye.json)
curl -is -X POST ${OS_AUTH_URL}/auth/tokens -H "Content-Type: application/json" -d ' { "auth": { "identity": { "methods": ["password"], "password": { "user": { "name": "'$OS_USERNAME'", "domain": { "name": "'$OS_DOMAIN_NAME'" }, "password": "'$OS_PASSWORD'" } } }, "scope": { "project": { "name": "'$OS_TENANT_NAME'" } } } }'
Vous devez recevoir un token, cela valide les différentes informations pour l'authentification.
Si par contre vous avez une erreur 401 unauthorized, vous pouvez arreter et voir avec le client.
Authentification au Vault infra#
INFRA_ZONE_NAME="" # infra-stg | infra-prd
export VAULT_ADDR="https://vault.${INFRA_ZONE_NAME}.caascad.com"
vault login -method oidc
Vérification à effectuer avant d'ajouter le mot de passe dans le Vault d'infrastructure#
Si le caractère "&" ou "/" n'apparaît pas dans votre mot de passe Vault, cette étape n'est pas nécessaire.
Cela est dû au fait que le caractère "&" est remplacé par la chaîne de caractères capturée.Il est donc nécessaire d'échapper le caractère "&". Il est possible qu'il y ait d'autres caractères à échapper, comme "/".
PASSWORD=$(cat /etc/creds/passwordfile | sed 's/&/\\&/g')
Ajout du mot de passe dans Vault infra#
CLOUDEYE_PW=$(jq -r '.password' data-cloudeye.json)
CLOUDEYE_DOMAIN=$(jq -r '.domain_name' data-cloudeye.json)
CLOUDEYE_PROJECT=$(jq -r '.project_name' data-cloudeye.json)
CLIENT="XXX" # Le nom du client, par exemple `demo`)
vault write "secret/zones/fe/svc-monitoring-stack-client-${CLIENT}/cloudeye-exporter-client/${CLOUDEYE_DOMAIN}-${CLOUDEYE_PROJECT}" password=${CLOUDEYE_PW}
Ajout des données non sensibles dans Ngot-Zone#
Conversion du fichier json en cue et suppression du password#
cue import -f data-cloudeye.json -o non-sensitive-data-cloudeye.cue && sed -i '/^password/d' non-sensitive-data-cloudeye.cue
Modification du fichier ~/git/caascad/terraform/envs-ng/zones/ngot_zones/values.cue#
Création d'une branche dans le repository envs-ng.
Ajout du contenu du fichier non-sensitive-data-cloudeye.cue dans la clé .svc-monitoring-stack-client-${CLIENT}.parameters.monitoring-stack.prometheus.exporters.cloudeyeExporter (où ${CLIENT} est le nom du client, par exemple demo).
Génération des fichiers de zones :
cd ~/git/caascad/terraform/envs-ng
nix-shell
generate-static-zones-files
Trackbone plan avant le CAASCHR#
Après toutes ces modifications, le déploiement de Cloudeye-Exporter-Client est possible.
Plan du déploiement :
cd ~/git/caascad/terraform/envs-ng/contexts/ngot
trackbone plan -z "svc-monitoring-stack-client-${CLIENT}" -c cloudeye-exporter-client -c prometheus-rules
Si tout est OK, vous pouvez demander la review de votre MR et préparer votre CAASCHR.