Lab 8.4 - Multi-domínios e Virtual Hosts
Objetivos do Lab
Ao final deste lab, você será capaz de:
- Configurar múltiplos domínios em um único Ingress.
- Roteamento de tráfego para diferentes aplicações conforme o domínio.
- Compreender virtual hosts.
- Configurar TLS para múltiplos domínios.
- Testar o acesso a múltiplos domínios.
Duração Estimada
45-60 minutos
Pré-requisitos
- kubectl instalado e configurado.
- Cluster Kubernetes com Ingress Controller.
- Conhecimentos sobre Ingress (Labs anteriores).
Parte 1: Deploy de Múltiplas Aplicações
Vamos fazer o deploy de três aplicações diferentes para três domínios.
Etapa 1.1: Aplicação para Domain1
Crie 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
Etapa 1.2: Aplicação para Domain2
Crie 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
Etapa 1.3: Aplicação para Domain3
Crie 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 os deployments:
kubectl apply -f app1-deployment.yaml
kubectl apply -f app2-deployment.yaml
kubectl apply -f app3-deployment.yaml
Parte 2: Configuração Ingress Multi-domínios
Etapa 2.1: Criar o Ingress com Múltiplos Domínios
Crie ingress-multi-domain.yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: multi-domain-ingress
spec:
ingressClassName: nginx
rules:
# Primeiro domínio
- host: app1.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app1-service
port:
number: 80
# Segundo domínio
- host: app2.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app2-service
port:
number: 80
# Terceiro domínio
- host: app3.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app3-service
port:
number: 80
Aplique o Ingress:
kubectl apply -f ingress-multi-domain.yaml
Parte 3: Configuração dos Hostnames
Etapa 3.1: Adicionar as Entradas no /etc/hosts
Adicione os três domínios no seu arquivo /etc/hosts (ou equivalente no Windows):
<INGRESS_IP> app1.local
<INGRESS_IP> app2.local
<INGRESS_IP> app3.local
Substitua <INGRESS_IP> pelo IP do seu Ingress Controller.
Parte 4: Teste dos Domínios
Etapa 4.1: Testar Cada Domínio
Teste o acesso a cada domínio:
# Teste app1.local
curl http://app1.local
# Teste app2.local
curl http://app2.local
# Teste app3.local
curl http://app3.local
Você deve ver respostas diferentes para cada domínio.
Etapa 4.2: Verificar com o Header Host
Você também pode testar usando o 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últiplos Domínios
Etapa 5.1: Criar Certificados para Cada Domínio
Se você estiver usando cert-manager, crie certificados para cada domínio:
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
Etapa 5.2: Configurar TLS no Ingress
Altere o 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: Limpeza
Remova os 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
Resumo do Lab
Neste lab, você configurou um Ingress com múltiplos domínios (virtual hosts). Você aprendeu a rotear tráfego para diferentes aplicações conforme o domínio, configurar TLS para múltiplos domínios e testar o acesso a cada domínio.
Próximos Passos
Este módulo sobre Ingress e Load Balancing está agora completo. Você pode avançar para o Módulo 9 sobre Segurança e RBAC.
Módulo 9: Segurança e RBAC
Lab criado em: Dezembro 2024