Este é o terceiro e último artigo que explica e detalha o modelo de rede do Kubernetes com uma abordagem prática. No primeiro artigo, falei sobre a comunicação de Pod para Pod e no segundo artigo sobre a comunicação de Pod para Serviço.
Neste aqui, vou discutir sobre Ingress / Ingress Controllers.
Estes artigos são baseados em um repositório que criei e que contém mais exemplos e conteúdo. Convido você a revisar o repositório em https://github.com/rafaelmnatali/kubernetes.
Ingress/Ingress Controllers
O que é Ingress?
Ingress expõe rotas HTTP e HTTPS de fora do cluster para Serviços dentro do cluster. O roteamento de tráfego é controlado por regras definidas no recurso Ingress.
Um Ingress pode ser configurado para fornecer URLs externamente acessíveis para Serviços, balancear o tráfego, encerrar SSL/TLS e oferecer hospedagem virtual baseada em nome.
O que é um Controlador de Ingress?
Um Ingress controller é responsável por cumprir o Ingress, geralmente com um balanceador de carga, embora também possa configurar seu roteador de borda ou front-ends adicionais para ajudar a lidar com o tráfego.
Você deve ter um Ingress controller para satisfazer um Ingress. Apenas criar um recurso Ingress não tem efeito.
Ingress na prática
1. Para habilitar o NGINX Ingress controller, execute o seguinte comando:
minikube addons enable ingress
2. Verifique que o controller está funcionando:
kubectl get pods -n ingress-nginx
A saída deve ser similar a esta:
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-6hbld 0/1 Completed 0 41s
ingress-nginx-admission-patch-bnrsb 0/1 Completed 1 41s
ingress-nginx-controller-77669ff58-x55s2 1/1 Running 0 41s
3. Crie um Deployment usando o seguinte comando:
kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0
4. Exponha o Deployment:
kubectl expose deployment web --type=NodePort --port=8080
5. Veja se o Serviço foi criado e está disponível como NodePort:
kubectl get service web
6. Crie o objeto Ingress com a seguinte configuração:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
namespace: default
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host: hello-world.info
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web
port:
number: 8080
7. Verifique o endereço IP:
kubectl get ingress
8. Verifique se o Ingress controller está direcionando o tráfego:
curl --resolve "hello-world.info:80:$( minikube ip )" -i http://hello-world.info
Se você não consegue se comunicar com o endereço IP do Minikube, execute minikube tunnel em outro terminal e use 127.0.0.1 em vez de $(minikube ip).
Você deverá ver:
Hello, world!
Version: 1.0.0
Hostname: web-68487bc957-57rb7
Resumo
Este artigo forneceu um guia sobre como usar Ingress no Kubernetes para tornar aplicações acessíveis a usuários externos. Ingress e Ingress Controller são dois componentes vitais que trabalham juntos para oferecer uma solução confiável para cenários em que usuários externos precisam acessar aplicações dentro do cluster K8s.
Conforme concluímos nossa série de blogs sobre networking do Kubernetes, gostaria de agradecer por acompanhar esta jornada. Ao longo desta série, nosso objetivo foi desmistificar a rede do Kubernetes, simplificando conceitos complexos em partes digestíveis. Cobrimos como os Pods se comunicam dentro de um cluster, como os Services permitem a comunicação entre Pods e como o Ingress permite acesso externo às suas aplicações.
Quais tópicos você gostaria de ver abordados em futuros artigos? Existem conceitos que ainda não estão claros ou áreas onde você gostaria de mais esclarecimentos? Vamos continuar essa conversa e continuar aprendendo juntos.
Kommentarer