Pular para o conteúdo principal

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