Introdução aos Conceitos Básicos de Ingress e Exemplo Simples em YAML
Nesta etapa, você aprenderá sobre Kubernetes Ingress, uma forma poderosa de gerenciar o acesso externo a serviços em um cluster Kubernetes.
O que é Ingress?
Ingress é um objeto API que gerencia o acesso externo a serviços em um cluster Kubernetes, tipicamente HTTP. Ingress fornece:
- Balanceamento de carga (Load balancing): Distribui o tráfego para múltiplos serviços de backend
- Terminação SSL/TLS: Lida com conexões seguras
- Hospedagem virtual baseada em nome (Name-based virtual hosting): Roteia as requisições para diferentes serviços com base no nome do host
- Roteamento baseado em caminho (Path-based routing): Roteia as requisições para diferentes serviços com base no caminho da URL
Ingress consiste em dois componentes:
- Recurso Ingress (Ingress Resource): Um objeto API Kubernetes que define as regras de roteamento
- Controlador Ingress (Ingress Controller): A implementação que aplica as regras definidas no Recurso Ingress
Nota: Este laboratório fornece apenas uma introdução básica ao Ingress. Em ambientes de produção, as configurações de Ingress podem ser muito mais complexas, incluindo roteamento avançado, autenticação, limitação de taxa e muito mais.
Vamos habilitar o addon Ingress no Minikube:
minikube addons enable ingress
Exemplo de saída:
💡 ingress is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
🔉 ingress was successfully enabled
Crie uma implantação para duas aplicações de exemplo:
kubectl create deployment web1 --image=nginx:alpine
kubectl create deployment web2 --image=httpd:alpine
Exponha essas implantações como serviços:
kubectl expose deployment web1 --port=80 --type=ClusterIP --name=web1-service
kubectl expose deployment web2 --port=80 --type=ClusterIP --name=web2-service
Crie um arquivo YAML Ingress:
nano ingress-example.yaml
Adicione a seguinte configuração Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /web1
pathType: Prefix
backend:
service:
name: web1-service
port:
number: 80
- path: /web2
pathType: Prefix
backend:
service:
name: web2-service
port:
number: 80
Componentes-chave desta configuração Ingress:
- metadata.annotations: Configurações específicas para o controlador Ingress
- spec.rules: Define como o tráfego é roteado para os serviços
- path: Caminho da URL que será correspondido
- pathType: Como o caminho deve ser correspondido (Prefix, Exact, ou ImplementationSpecific)
- backend.service: O serviço e a porta para rotear o tráfego
Aplique a configuração Ingress:
kubectl apply -f ingress-example.yaml
Verifique o recurso Ingress:
kubectl get ingress
Exemplo de saída:
NAME CLASS HOSTS ADDRESS PORTS AGE
example-ingress nginx * 192.168.49.2 80 1m
Verifique os detalhes do Ingress:
kubectl describe ingress example-ingress
O exemplo de saída mostrará as regras de roteamento e os serviços de backend.
Testando o Ingress:
## Get the Minikube IP
minikube ip
## Test access to the services through Ingress
curl $(minikube ip)/web1
curl $(minikube ip)/web2
Cada comando deve retornar a página padrão do respectivo servidor web.
Em ambientes de produção, o Ingress pode ser configurado com:
- Múltiplas regras baseadas em nome de host
- Certificados TLS para HTTPS
- Mecanismos de autenticação
- Limitação de taxa
- Configurações de tempo limite personalizadas
- Afinidade de sessão
- E muitos mais recursos avançados
Para uma cobertura mais abrangente do Ingress, consulte a documentação do Kubernetes e considere explorar a documentação dedicada do controlador Ingress, como NGINX Ingress ou Traefik.