Saltar al contenido principal

Lab 8.4 - Multi-dominios y Virtual Hosts

Objetivos del Lab​

Al finalizar este laboratorio, usted será capaz de:

  • Configurar múltiples dominios en un solo Ingress.
  • Enrutar el tráfico hacia diferentes aplicaciones según el dominio.
  • Comprender los virtual hosts.
  • Configurar TLS para múltiples dominios.
  • Probar el acceso a varios dominios.

Duración Estimada​

45-60 minutos

Requisitos Previos​

  • kubectl instalado y configurado.
  • Cluster de Kubernetes con Ingress Controller.
  • Conocimientos sobre Ingress (laboratorios anteriores).

Parte 1: Despliegue de Múltiples Aplicaciones​

Despleguemos tres aplicaciones diferentes para tres dominios.

Paso 1.1: Aplicación para Domain1​

Cree 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

Paso 1.2: Aplicación para Domain2​

Cree 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

Paso 1.3: Aplicación para Domain3​

Cree 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

Aplique todos los despliegues:

kubectl apply -f app1-deployment.yaml
kubectl apply -f app2-deployment.yaml
kubectl apply -f app3-deployment.yaml

Parte 2: Configuración Ingress Multi-dominios​

Paso 2.1: Crear el Ingress con Múltiples Dominios​

Cree ingress-multi-domain.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: multi-domain-ingress
spec:
ingressClassName: nginx
rules:
# Primer dominio
- host: app1.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app1-service
port:
number: 80
# Segundo dominio
- host: app2.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app2-service
port:
number: 80
# Tercer dominio
- host: app3.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app3-service
port:
number: 80

Aplique el Ingress:

kubectl apply -f ingress-multi-domain.yaml

Parte 3: Configuración de Hostnames​

Paso 3.1: Agregar las Entradas en /etc/hosts​

Agregue los tres dominios en su archivo /etc/hosts (o equivalente en Windows):

<INGRESS_IP> app1.local
<INGRESS_IP> app2.local
<INGRESS_IP> app3.local

Reemplace <INGRESS_IP> por la IP de su Ingress Controller.


Parte 4: Prueba de los Dominios​

Paso 4.1: Probar Cada Dominio​

Pruebe el acceso a cada dominio:

# Test app1.local
curl http://app1.local

# Test app2.local
curl http://app2.local

# Test app3.local
curl http://app3.local

Debería ver diferentes respuestas según el dominio.

Paso 4.2: Verificar con el Header Host​

También puede probar usando el 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>

Parte 5: TLS para Múltiples Dominios​

Paso 5.1: Crear Certificados para Cada Dominio​

Si utiliza cert-manager, cree certificados para cada dominio:

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

Paso 5.2: Configurar TLS en el Ingress​

Modifique el Ingress para incluir 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

Parte 6: Limpieza​

Elimine los recursos:

kubectl delete ingress multi-domain-ingress
kubectl delete -f app1-deployment.yaml
kubectl delete -f app2-deployment.yaml
kubectl delete -f app3-deployment.yaml

Resumen del Lab​

En este laboratorio, usted ha configurado un Ingress con múltiples dominios (virtual hosts). Ha aprendido a enrutar el tráfico hacia diferentes aplicaciones según el dominio, a configurar TLS para varios dominios y a probar el acceso a cada dominio.


Próximos Pasos​

Este módulo sobre Ingress y Load Balancing está ahora completo. Puede continuar con el Módulo 9 sobre Seguridad y RBAC.

Módulo 9: Seguridad y RBAC


Lab creado el: Diciembre 2024