Création d'Ingress avec traefik/k3s
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.pem
Cré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: false
Au 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 11d
Cré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-cert
Changer le nom de domaine avec le vôtre. On applique :
kubectl apply -f awx-ingress.yml
ingress.networking.k8s.io/awx-ingress configured
Test 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.