Création d'Ingress avec traefik/k3s
Publié le :
Certaines des applications de mon Home Lab Devops sont installées sur le
cluster k3s mono-noeud et nécessitent donc de créer des Ingress pour y
accéder. Nous allons voir comment les créer avec les certificats autosignés
créés avec mkcert.
Nous allons prendre comme exemple celui permettant d’accéder à AWX.
Création du certificat wildcard avec mkcert
Plutôt que de créer autant de certificats que d’applications je vais utiliser un certificat wildcard, c’est-à-dire avec une ’*’. L’astuce, c’est de mettre le nom de domaine entre quote :
mkcert "*.robert.local"Created a new certificate valid for the following names 📜 - "*.robert.local"
Reminder: X.509 wildcards only go one level deep, so this won't match a.b.robert.local ℹ️
The certificate is at "./_wildcard.robert.local.pem" and the key at "./_wildcard.robert.local-key.pem" ✅Création du secret sur le cluster k3s.
Maintenant passons à la création du secret qui sera utilisé par les ingress.
kubectl config set-context --current --namespace=awxkubectl create secret tls wildcard-tls-cert --key=_wildcard.robert.local+3-key.pem --cert=_wildcard.robert.local+3.pemCréation de l’ingress pour AWX
Passage du service en type ClusterIP
Dans ma première version d’installation j’utilisais des services avec un type
NodePort, mais il faut les passer en type ClusterIP. Si AWX est déjà
installé il suffit d’éditer l’opérateur et de modifier le service_type :
kubectl config set-context --current --namespace=awxkubectl edit awxs.awx.ansible.com
route_tls_termination_mechanism: Edge service_type: clusterip task_privileged: falseAu bout de quelques secondes le service devrait être modifié avec le bon type :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEawx-service ClusterIP 10.43.242.167 <none> 80/TCP 11dCréation de l’ingress
Créer un fichier awx-ingress.yml et déposez ce contenu :
apiVersion: networking.k8s.io/v1kind: Ingressmetadata: annotations: kubernetes.io/ingress.class: traefik traefik.ingress.kubernetes.io/frontend-entry-points: http,https traefik.ingress.kubernetes.io/redirect-entry-point: https traefik.ingress.kubernetes.io/redirect-permanent: "true" name: awx-ingress namespace: awxspec: rules: - host: awx.robert.local http: paths: - path: / pathType: Prefix backend: service: name: awx-service port: number: 80 tls: - hosts: - awx.robert.local secretName: wildcard-tls-certChanger le nom de domaine avec le vôtre. On applique :
kubectl apply -f awx-ingress.yml
ingress.networking.k8s.io/awx-ingress configuredTest dans un navigateur
Avant :
-
il faut ajouter le nom de domaine qui pointe sur l’adresse IP ou tourne k3s :
- sur votre serveur DNS
- dans le fichier hosts de la machine
-
il faut ajouter le certificat sur le poste pour cela allez dans le billet sur mkcert
Allez sur l’adresse https://aws.robert.local et vérifiez le certificat.

Cool ça fonctionne.