Aller au contenu
Infrastructure as Code medium

Installer Ascender (fork AWX) sur k3s, en HTTPS

16 min de lecture

Logo AWX

Ce guide installe Ascender 25.4.0, le fork maintenu d'AWX, sur un cluster k3s mono-nœud, servi en HTTPS. L'installeur officiel monte le cluster lui-même : vous n'avez pas besoin d'un Kubernetes préexistant. Le tout tient sur une machine virtuelle.

Le chemin est balisé, mais cinq pièges bloquent l'installation, dont un dont le message d'erreur ne désigne pas la cause. Chacun est documenté ici avec son symptôme exact et son correctif. Public visé : administrateurs à l'aise avec Kubernetes et Ansible.

Vous avez déjà un cluster Kubernetes ? Passez votre chemin

Section intitulée « Vous avez déjà un cluster Kubernetes ? Passez votre chemin »

Ce guide s'adresse à qui part d'une machine virtuelle nue. L'installeur monte k3s lui-même, ce qui rend service quand on n'a rien, et devient un problème quand un cluster existe déjà : le script en déploierait un second à côté du vôtre.

L'installeur n'est d'ailleurs pas une alternative à l'operator, c'est un enrobage autour de lui. La configuration écrite plus bas porte une ligne ASCENDER_OPERATOR_VERSION, et la plateforme obtenue fait tourner le même contrôleur ascender-operator. Ce que le script apporte en plus, c'est le cluster, le secret TLS, l'entrée dans /etc/hosts et Ledger. Ce qu'il vous retire, c'est le choix des versions d'images et toute possibilité de rejouer l'installation depuis un dépôt Git.

Si votre cluster existe déjà, allez directement à Installer AWX sur Kubernetes avec l'operator : la même plateforme y est déployée en trois manifestes que vous maîtrisez.

  • Dimensionner la machine et éviter le piège du processeur virtuel
  • Configurer l'installeur sans passer par son script interactif
  • Installer Ascender, PostgreSQL et Ledger sur un k3s monté à la volée
  • Servir l'interface en HTTPS et forcer la redirection depuis HTTP
  • Diagnostiquer les cinq erreurs qui font perdre le plus de temps
  • Une machine virtuelle dédiée, avec un accès sudo.
  • Système supporté : Enterprise Linux 8 ou 9 (Rocky, Alma, RHEL, CentOS Stream, Fedora), ou Ubuntu 24. Les autres versions ne sont pas prises en charge par l'installeur.
  • 4 vCPU, 12 Go de RAM, 60 Go de disque. La documentation annonce 8 Go minimum pour Ascender et Ledger : c'est un plancher réel, pas une suggestion.
  • Un accès Internet sortant (une installation hors ligne existe, avec un bundle d'images).

L'installeur est un dépôt Git contenant des playbooks Ansible. Il installera ansible-core lui-même s'il est absent.

  1. Installez Git et clonez le dépôt :

    Fenêtre de terminal
    sudo apt-get update && sudo apt-get install -y git
    git clone https://github.com/ctrliq/ascender-install.git
    cd ascender-install
  2. Rendez le script exécutable. Il ne l'est pas dans le dépôt, et l'oubli produit une erreur déroutante :

    Fenêtre de terminal
    chmod +x setup.sh config_vars.sh

    Sans cela, le lancement échoue sur nohup: failed to run command './setup.sh': Permission denied.

Le protocole HTTPS exige un certificat et sa clé privée. Un certificat auto-signé convient pour une maquette ; en production, utilisez une autorité de certification reconnue.

Générez-le avec un SubjectAltName couvrant les deux noms d'hôte et l'adresse IP, sans quoi les navigateurs et curl refuseront le certificat même en ignorant l'autorité :

Fenêtre de terminal
openssl req -x509 -newkey rsa:2048 -nodes -days 365 \
-keyout /home/ubuntu/ascender.key -out /home/ubuntu/ascender.crt \
-subj "/C=FR/O=Lab/CN=ascender.lab.local" \
-addext "subjectAltName=DNS:ascender.lab.local,DNS:ledger.lab.local,IP:192.168.10.208"
chmod 600 /home/ubuntu/ascender.key

Le dépôt fournit config_vars.sh, un script interactif qui pose une série de questions. Pratique pour découvrir, inutilisable pour un lab reproductible ou une chaîne d'intégration. Écrivez directement custom.config.yml, qui est le fichier réellement consommé.

---
k8s_platform: k3s
k8s_lb_protocol: https
kubeapi_server_ip: "192.168.10.208"
kube_install: true
k8s_offline: false
download_kubeconfig: true
k3s_master_node_ip: "192.168.10.208"
tls_crt_path: "/home/ubuntu/ascender.crt"
tls_key_path: "/home/ubuntu/ascender.key"
use_etc_hosts: true
ASCENDER_HOSTNAME: ascender.lab.local
ASCENDER_NAMESPACE: ascender
ASCENDER_ADMIN_USER: admin
ASCENDER_ADMIN_PASSWORD: "RemplacezCeMotDePasse"
ASCENDER_IMAGE: ghcr.io/ctrliq/ascender
ASCENDER_VERSION: 25.4.0
ASCENDER_OPERATOR_VERSION: 2.19.6
ascender_garbage_collect_secrets: true
LEDGER_INSTALL: true
LEDGER_HOSTNAME: ledger.lab.local
LEDGER_NAMESPACE: ledger
LEDGER_ADMIN_PASSWORD: "RemplacezAussiCeluiCi"
LEDGER_DB_PASSWORD: "EtCeluiDeLaBase"

Quelques variables méritent une explication. kube_install: true demande à l'installeur de monter k3s lui-même sur l'hôte. use_etc_hosts: true ajoute les deux noms d'hôte dans /etc/hosts, ce qui évite de configurer un DNS pour une maquette. ascender_garbage_collect_secrets conserve les secrets de chiffrement, ce qui devient indispensable au moment des sauvegardes.

L'inventaire par défaut convient tel quel pour une installation mono-machine : il pointe déjà sur localhost en connexion locale.

Fenêtre de terminal
sudo ./setup.sh

Le script installe ansible-core, monte k3s avec Traefik, déploie l'ascender-operator, puis l'objet AWX qui provoque la création de PostgreSQL, du pod web et du pod de tâches. Comptez vingt à trente minutes, l'essentiel étant le téléchargement des images.

La réussite se lit dans le récapitulatif final :

PLAY RECAP *********************************************************
ascender_host : ok=15 changed=3 unreachable=0 failed=0
localhost : ok=79 changed=21 unreachable=0 failed=0
ASCENDER SUCCESSFULLY SETUP

Les pods doivent tous être en état Running, sur trois espaces de noms :

Fenêtre de terminal
sudo kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS
ascender ascender-app-postgres-15-0 1/1 Running 0
ascender ascender-app-task-84d7748647-zff6q 4/4 Running 0
ascender ascender-app-web-5c589b6587-46mg2 3/3 Running 0
ascender awx-operator-controller-manager-... 2/2 Running 0
ledger db-7f9cd59455-2w57c 1/1 Running 0
ledger parser-b4d9dccc8-fgjmr 1/1 Running 0
ledger web-7c669dc99b-lf668 1/1 Running 0

L'API répond ensuite sur son point d'entrée de diagnostic. Le drapeau -k est nécessaire tant que le certificat est auto-signé :

Fenêtre de terminal
curl -sk https://ascender.lab.local/api/v2/ping/
{
"ha": false,
"version": "25.4.0",
"active_node": "ascender-app-web-5c589b6587-46mg2",
"instances": [{ "node_type": "control", "capacity": 119 }]
}

Une authentification complète se vérifie en demandant un jeton, puis en lisant la configuration :

Fenêtre de terminal
curl -sk -u "admin:VotreMotDePasse" -X POST \
https://ascender.lab.local/api/v2/tokens/ -H "Content-Type: application/json" -d '{}'

Étape 6 - Accéder à l'interface depuis votre poste

Section intitulée « Étape 6 - Accéder à l'interface depuis votre poste »

C'est ici que beaucoup se retrouvent bloqués. L'installeur a bien inscrit ascender.lab.local dans le /etc/hosts de la machine virtuelle, grâce à use_etc_hosts: true. Mais votre poste de travail, lui, ne connaît pas ce nom.

  1. Déclarez les deux noms sur votre poste, en remplaçant l'adresse par celle de votre machine virtuelle.

    Fenêtre de terminal
    echo "192.168.10.208 ascender.lab.local ledger.lab.local" | sudo tee -a /etc/hosts

    Vérifiez immédiatement, sans quitter le terminal :

    Fenêtre de terminal
    curl -sk https://ascender.lab.local/api/v2/ping/

    La réponse doit contenir "version": "25.4.0".

  2. Récupérez le mot de passe administrateur. Il vaut ce que vous avez mis dans ASCENDER_ADMIN_PASSWORD, mais il est aussi stocké dans un secret Kubernetes, ce qui est la source de vérité :

    Fenêtre de terminal
    kubectl -n ascender get secret ascender-app-admin-password \
    -o jsonpath="{.data.password}" | base64 -d ; echo
  3. Ouvrez https://ascender.lab.local/ dans un navigateur. Le certificat étant auto-signé, le navigateur affiche un avertissement : acceptez l'exception. Connectez-vous avec l'utilisateur admin et le mot de passe récupéré.

  4. Ledger est accessible de la même manière, sur https://ledger.lab.local/.

Tableau de bord d'Ascender après connexion

Votre première action : changer le mot de passe administrateur

Section intitulée « Votre première action : changer le mot de passe administrateur »

L'installation est terminée, et elle vous laisse avec un problème immédiat. Le mot de passe d'admin a été écrit en clair dans custom.config.yml, il vit dans l'historique de votre shell, et il est peut-être passé par un dépôt Git. Ce compte peut tout faire sur la plateforme : lire les identifiants, modifier les playbooks exécutés, lancer n'importe quel job sur n'importe quelle machine.

Changez-le avant toute autre chose, depuis Accès > Utilisateurs (Access > Users), puis admin, onglet Détails (Details), Modifier (Edit). L'interface suit la langue de votre navigateur : les guides de ce hub donnent le libellé français, puis le terme anglais entre parenthèses. Créez dans la foulée votre propre compte administrateur nominatif, et cessez d'utiliser le compte partagé : un journal d'activité qui n'affiche que admin n'identifie personne et n'a aucune valeur d'audit.

La marche à suivre complète, avec les organisations, les équipes et la délégation des droits, est dans Les premières actions d'administration. C'est la page à ouvrir juste après celle-ci.

Une fois la plateforme sécurisée, vous pourrez lancer votre premier playbook en suivant Premiers pas avec AWX.

Positionner k8s_lb_protocol: https ne suffit pas. L'installeur crée bien le secret TLS et l'attache à l'ingress d'Ascender, mais deux trous subsistent, vérifiables immédiatement :

Fenêtre de terminal
curl -s -o /dev/null -w "%{http_code}\n" http://ascender.lab.local/ # 200, en clair
kubectl -n ledger get ingress ledger-web-ingress -o jsonpath='{.spec.tls}' # vide

Autrement dit, HTTP continue d'être servi sans redirection, et l'ingress de Ledger n'a aucun TLS, alors même que l'installeur a déjà copié le secret ascender-tls-secret dans son espace de noms. Voici le correctif, en deux temps.

  1. Créez un middleware Traefik de redirection dans chaque espace de noms :

    apiVersion: traefik.io/v1alpha1
    kind: Middleware
    metadata:
    name: redirect-https
    namespace: ascender
    spec:
    redirectScheme:
    scheme: https
    permanent: true

    Répétez l'opération avec namespace: ledger.

  2. Branchez-le sur Ascender via le CR, et non sur l'ingress. L'ingress d'Ascender est réconcilié par l'operator : un kubectl patch direct serait écrasé à la prochaine boucle.

    Fenêtre de terminal
    kubectl -n ascender patch awx ascender-app --type=merge -p \
    '{"spec":{"ingress_annotations":"traefik.ingress.kubernetes.io/router.middlewares: ascender-redirect-https@kubernetescrd"}}'
  3. Corrigez l'ingress de Ledger directement, puisqu'aucun operator ne le gère. On ajoute au passage le spec.tls manquant :

    Fenêtre de terminal
    kubectl -n ledger patch ingress ledger-web-ingress --type=merge -p \
    '{"metadata":{"annotations":{"traefik.ingress.kubernetes.io/router.middlewares":"ledger-redirect-https@kubernetescrd"}},
    "spec":{"tls":[{"hosts":["ledger.lab.local"],"secretName":"ascender-tls-secret"}]}}'

Le résultat se contrôle par le comportement, seul juge fiable :

Fenêtre de terminal
curl -s -o /dev/null -w "%{http_code} -> %{redirect_url}\n" http://ascender.lab.local/
# 301 -> https://ascender.lab.local/
curl -s -o /dev/null -w "%{http_code} -> %{redirect_url}\n" http://ledger.lab.local/
# 301 -> https://ledger.lab.local/
SymptômeCauseCorrectif
Permission denied sur ./setup.shscript non exécutable dans le dépôtchmod +x setup.sh
AnsibleLookupError: file '~/ascender.crt' not foundsetup.sh tourne sous sudo, ~ vaut /rootchemins absolus dans tls_crt_path et tls_key_path
Fatal glibc error: CPU does not support x86-64-v2, pod PostgreSQL en Init:Errorprocesseur virtuel kvm64 par défautqm set <vmid> --cpu host puis redémarrer
Le pod de tâches reste en Pending ou est tuémémoire insuffisante8 Go minimum avec Ledger, 12 Go confortable
https://<adresse-ip>/ répond 404Traefik route sur l'en-tête Host, pas sur l'IPdéclarer ascender.lab.local dans le /etc/hosts du poste client
http:// répond 200 en clairl'installeur n'active aucune redirectionmiddleware Traefik, voir la section Sécurité
L'interface de Ledger n'est pas chiffréespec.tls absent de son ingresspatch de l'ingress, voir la section Sécurité
  • L'installeur d'Ascender monte le cluster k3s lui-même : aucun Kubernetes préexistant n'est requis.
  • Le processeur virtuel doit exposer x86-64-v2. Sur Proxmox, le kvm64 par défaut fait échouer PostgreSQL avec un message qui ne désigne pas la machine virtuelle.
  • Le dépôt livre setup.sh non exécutable, et sa documentation propose un tls_crt_path en ~ qui ne fonctionne pas sous sudo.
  • Préférez écrire custom.config.yml directement plutôt que d'utiliser le script interactif : c'est la seule façon d'obtenir une installation reproductible.
  • Traefik route sur l'en-tête Host : pointer le navigateur sur l'adresse IP renvoie un 404 trompeur. Le nom doit être résolu côté poste client.
  • k8s_lb_protocol: https ne désactive pas HTTP et n'applique aucun TLS à Ledger. Deux correctifs à appliquer soi-même.
  • L'ingress d'Ascender est géré par l'operator : toute annotation doit passer par ingress_annotations sur le CR, sinon elle est écrasée.
  • 8 Go de mémoire est un plancher réel dès que Ledger est installé.
  • L'installation vous laisse un mot de passe admin écrit en clair dans custom.config.yml. Le changer est la première action d'administration, avant même le premier job.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn