Lab 8.4 - Multi-domaines et Virtual Hosts
Objectifs du Lab
À la fin de ce lab, vous serez capable de:
- Configurer plusieurs domaines dans un seul Ingress.
- Router le trafic vers différentes applications selon le domaine.
- Comprendre les virtual hosts.
- Configurer TLS pour plusieurs domaines.
- Tester l'accès à plusieurs domaines.
Durée Estimée
45-60 minutes
Prérequis
- kubectl installé et configuré.
- Cluster Kubernetes avec Ingress Controller.
- Connaissances sur Ingress (Labs précédents).
Partie 1: Déploiement de Plusieurs Applications
Déployons trois applications différentes pour trois domaines.
Étape 1.1: Application pour Domain1
Créez app1-deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app1
spec:
replicas: 2
selector:
matchLabels:
app: app1
template:
metadata:
labels:
app: app1
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: app1-service
spec:
selector:
app: app1
ports:
- port: 80
targetPort: 80
Étape 1.2: Application pour Domain2
Créez app2-deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app2
spec:
replicas: 2
selector:
matchLabels:
app: app2
template:
metadata:
labels:
app: app2
spec:
containers:
- name: httpd
image: httpd:2.4
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: app2-service
spec:
selector:
app: app2
ports:
- port: 80
targetPort: 80
Étape 1.3: Application pour Domain3
Créez app3-deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: app3
spec:
replicas: 2
selector:
matchLabels:
app: app3
template:
metadata:
labels:
app: app3
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: app3-service
spec:
selector:
app: app3
ports:
- port: 80
targetPort: 80
Appliquez tous les déploiements:
kubectl apply -f app1-deployment.yaml
kubectl apply -f app2-deployment.yaml
kubectl apply -f app3-deployment.yaml
Partie 2: Configuration Ingress Multi-domaines
Étape 2.1: Créer l'Ingress avec Plusieurs Domaines
Créez ingress-multi-domain.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: multi-domain-ingress
spec:
ingressClassName: nginx
rules:
# Premier domaine
- host: app1.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app1-service
port:
number: 80
# Deuxième domaine
- host: app2.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app2-service
port:
number: 80
# Troisième domaine
- host: app3.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app3-service
port:
number: 80
Appliquez l'Ingress:
kubectl apply -f ingress-multi-domain.yaml
Partie 3: Configuration des Hostnames
Étape 3.1: Ajouter les Entrées dans /etc/hosts
Ajoutez les trois domaines dans votre fichier /etc/hosts (ou équivalent Windows):
<INGRESS_IP> app1.local
<INGRESS_IP> app2.local
<INGRESS_IP> app3.local
Remplacez <INGRESS_IP> par l'IP de votre Ingress Controller.
Partie 4: Test des Domaines
Étape 4.1: Tester Chaque Domaine
Testez l'accès à chaque domaine:
# Test app1.local
curl http://app1.local
# Test app2.local
curl http://app2.local
# Test app3.local
curl http://app3.local
Vous devriez voir différentes réponses selon le domaine.
Étape 4.2: Vérifier avec le Header Host
Vous pouvez aussi tester avec le header Host:
curl -H "Host: app1.local" http://<INGRESS_IP>
curl -H "Host: app2.local" http://<INGRESS_IP>
curl -H "Host: app3.local" http://<INGRESS_IP>
Partie 5: TLS pour Plusieurs Domaines
Étape 5.1: Créer des Certificats pour Chaque Domaine
Si vous utilisez cert-manager, créez des certificats pour chaque domaine:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: app1-tls-cert
spec:
secretName: app1-tls-secret
issuerRef:
name: selfsigned-issuer
kind: ClusterIssuer
dnsNames:
- app1.local
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: app2-tls-cert
spec:
secretName: app2-tls-secret
issuerRef:
name: selfsigned-issuer
kind: ClusterIssuer
dnsNames:
- app2.local
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: app3-tls-cert
spec:
secretName: app3-tls-secret
issuerRef:
name: selfsigned-issuer
kind: ClusterIssuer
dnsNames:
- app3.local
Étape 5.2: Configurer TLS dans l'Ingress
Modifiez l'Ingress pour inclure TLS:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: multi-domain-ingress-tls
spec:
ingressClassName: nginx
tls:
- hosts:
- app1.local
secretName: app1-tls-secret
- hosts:
- app2.local
secretName: app2-tls-secret
- hosts:
- app3.local
secretName: app3-tls-secret
rules:
- host: app1.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app1-service
port:
number: 80
- host: app2.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app2-service
port:
number: 80
- host: app3.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app3-service
port:
number: 80
Partie 6: Nettoyage
Supprimez les ressources:
kubectl delete ingress multi-domain-ingress
kubectl delete -f app1-deployment.yaml
kubectl delete -f app2-deployment.yaml
kubectl delete -f app3-deployment.yaml
Résumé du Lab
Dans ce lab, vous avez configuré un Ingress avec plusieurs domaines (virtual hosts). Vous avez appris à router le trafic vers différentes applications selon le domaine, à configurer TLS pour plusieurs domaines, et à tester l'accès à chaque domaine.
Prochaines Étapes
Ce module sur Ingress et Load Balancing est maintenant complet. Vous pouvez passer au Module 9 sur la Sécurité et RBAC.
Module 9: Sécurité et RBAC
Lab créé le: Décembre 2024