Aller au contenu principal

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