Effectivement la version présente nativement est encore la 1.7. Ce n'est pas réellement un soucis mais tout de même, cette version commence à dater et nous utilisons depuis un petit moment maintenant des configurations en version 2. Autant être à jour !
Nous allons donc revoir dans ce tutoriel, l'installation de K3S mais cette fois avec l'utilisation de Traefik et de son contrôleur Ingress en 2.1 !
Installation de K3S
Je ne vais pas revenir en détail sur l'installation de K3S, je vous laisserai éventuellement revenir sur le tutoriel dédié à cela.
Installons rapidement K3S :
curl -sfL https://get.k3s.io | sh -s - --no-deploy=traefik
On vérifie son installation :
kubectl get nodes
Installation de Traefik
Pour déployer notre service Traefik, il va être nécessaire de réaliser les étapes suivantes :
- Déployer un service Traefik,
- Créer des CustomRessources,
- Déclarer les rôles et ClusterRole,
- Configurer Traefik.
Pour réaliser ce déploiement, je vais me baser sur la documentation officielle présente sur le site : https://docs.traefik.io/providers/kubernetes-ingress/
Je ne vais pas vous mettre ici les configurations en détail de chaque éléments à configurer. Cela allongerait fortement le contenu de l'article et nuirait complètement à la lisibilité des explications.
Voici un lien github pour récupérer l'intégralité des configurations :
Occupons nous d'abord du dossier "Traefik" qui contient la déclaration nécessaire à son utilisation. Voici les fichiers contenus dans ce dossier :
Traefik.yml : C'est la déclaration même de votre service et de son déploiement.
CustomResourceDefinition.yml : Ce sont les ressources "Custom" utilisées par Traefik.
ConfigMap.yml : Il s'agit du fichier qui contient la configuration de Traefik. Notre traefik.yml que nous utilisons habituellement pour configurer Traefik, il s'agit de la configuration statique du logiciel.
RBAC.yml : Ce fichier contient les éléments d'autorisation de l'application Traefik dans notre cluster.
Je ne vais pas m'attarder dans ce tutoriel sur la gestion des droits afin de nous concentrer sur la déclaration du déploiement, du service et de la configuration mise en place.
Quelques explications ! Commençons par le fichier ConfigMap.yml
, ce fichier sert à déclarer la configuration de Traefik. Comme à mon habitude, j'utilise un fichier de type YAML
.
Regardons rapidement la déclaration de la configuration :
data:
traefik.yml: |
# Global settings
entryPoints:
http:
address: :80
https:
address: :443
api:
insecure: true
providers:
kubernetesCRD: {}
Rien d'exceptionnel, vous remarquerez juste la déclaration du providers
qui est dans notre cas une ressource custom Kubernetes ( abrégé CRD : Custom Ressource Definition ).
Continuons justement avec la déclaration des CRD, je supprime volontairement quelques lignes afin de faciliter la lecture :
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
spec:
names:
kind: IngressRoute
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
spec:
names:
kind: IngressRouteTCP
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
names:
kind: Middleware
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
spec:
names:
kind: TLSOption
---
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
spec:
names:
kind: TraefikService
Il est important de comprendre qu'ici nous déclarons 5 ressources :
- IngressRoute ( Pour la gestion du HTTP/S )
- IngressRouteTCP ( Pour la gestion du flux TCP )
- Middleware ( Vous connaissez ? 😃 )
- Les options TLS
- Le service Traefik.
Enfin le dernier fichier Traefik.yml
vous permettra de déclarer le service Traefik et de le déployer ! Nous allons juste nous attarder sur la déclaration du déploiement :
kind: Deployment
apiVersion: apps/v1
metadata:
namespace: kube-system
name: traefik
labels:
app: traefik
spec:
replicas: 1
selector:
matchLabels:
app: traefik
template:
metadata:
labels:
app: traefik
spec:
serviceAccountName: traefik-ingress-controller
containers:
- name: traefik
image: traefik:2.1
volumeMounts:
- name: traefik-config
mountPath: /etc/traefik/
ports:
- name: http
containerPort: 80
- name: traefik
containerPort: 8080
volumes:
- name: traefik-config
configMap:
name: traefik-config
Vous pouvez remarquer ici que l'on charge la configuration présente dans ConfigMap
afin de l'utiliser.
Maintenant que tout est prêt, nous allons pouvoir appliquer nos modifications !
kubectl apply -f traefik/
Vous pouvez vérifier que tout fonctionne correctement avec la commande suivante :
kubectl get po --all-namespaces
Si votre instance de Traefik ne démarre pas, vous pouvez consulter le log du container en question :
sudo kubectl logs -f MONCONTAINER -n kube-system
Si vous avez récupéré le dossier sur GitHub, il ne devrait y avoir aucun soucis !
Vérifions cela en nous connectant directement au Dashboard :
http://MONIP:8080
Et vous devriez obtenir le résultat suivant :
Ok Traefik fonctionne mais avec un exemple c'est mieux non ?
Déploiement d'une instance Whoami
Nous allons pouvoir déployer une instance de whoami
sur notre cluster kubernetes.
Pour cela créeons un fichier whoami.yml
:
kind: Namespace
apiVersion: v1
metadata:
name: whoami
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: whoami
namespace: whoami
spec:
replicas: 1
template:
metadata:
spec:
containers:
- name: whoami
image: containous/whoami
ports:
- name: web
containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: whoami
namespace: whoami
spec:
ports:
- protocol: TCP
name: web
port: 80
selector:
app: whoami
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: whoami-http
namespace: whoami
spec:
entryPoints:
- http
routes:
- match: Host(`test.mondomain.com`)
kind: Rule
services:
- name: whoami
port: 80
Il ne reste plus qu'à appliquer la configuration que nous venons de créer :
kubectl apply -f whoami.yml
Il ne nous reste plus qu'à vérifier que tout fonctionne correctement à l'adresse : http://test.domaine.com/
Vous pouvez bien sûr envisager de déployer d'autres services que whoami
à partir de cette configuration !
Dans ce tutoriel, nous avons pu installer K3S et Traefik en version 2.1. Nous avons également pu tester notre installation avec le déploiement d'une instance whoami
.
Mais pour le moment, nous n'avons pas mis en place de SSL, ou même de restriction par IP sur notre dashboard, ce qui est potentiellement dangeureux. C'est pourquoi, dans un prochain article, nous aurons l'occasion d'aller encore plus loin avec notre installation.
En mettant en place le HTTPS et quelques règles de middlewares.
J'espère en tout cas que cet article vous aura apporté une aide dans l'installation de K3S avec Traefik en version 2.1 !
En tout cas n'hésitez pas à m'apporter des remarques ou des commentaires sur Twitter