Loading search data...

HomeLab - Création des Ingress avec traefik/k3s

Publié le : 9 mars 2022 | Mis à jour le : 22 janvier 2023

logo

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.

mkcert certificat ingress k3

Cool ça fonctionne.

Mots clés :

devops tutorials homelab

Si vous avez apprécié cet article de blog, vous pouvez m'encourager à produire plus de contenu en m'offrant un café sur  Ko-Fi. Vous pouvez aussi passer votre prochaine commande sur amazon, sans que cela ne vous coûte plus cher, via  ce lien . Vous pouvez aussi partager le lien sur twitter ou Linkedin via les boutons ci-dessous. Je vous remercie pour votre soutien.

Autres Articles


Commentaires: