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=awx
kubectl 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=awx
kubectl 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) AGE
awx-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/v1
kind: Ingress
metadata:
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: awx
spec:
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.