Redes no Kubernetes com Base no Tanenbaum

Um guia bem prático de como começar a estudar Kubernetes baseado no livro de redes do Tanenbaum
1. Fundamentos de Redes e Como Isso Impacta o K8s
Tanenbaum: Capítulos sobre Camadas de Rede e Modelo OSI/TCP-IP
No Kubernetes: Entenda como pods, nodes e serviços interagem via redes virtuais.
O que estudar?
- Comunicação entre pods e nodes (CNI – Container Network Interface)
- Namespace de rede e isolamento no Linux
- Como o tráfego de rede é roteado dentro do cluster
Mão na Massa
- Use
kubectl exec
e ip a para explorar namespaces de rede em pods - Teste conectividade com
ping
enetcat
entre pods
2. Endereçamento, NAT e Balanceamento de Carga
Tanenbaum: Capítulos sobre Endereçamento IP, NAT e Sub-redes
No Kubernetes: Compreenda como endereços IP são alocados e como NAT impacta serviços.
O que estudar?
- Como o K8s gerencia IPs para pods (CIDR, Subnets)
- O papel do kube-proxy na comunicação entre serviços
- Load Balancers, NodePort e ClusterIP
Mão na Massa
- Liste os IPs do cluster:
kubectl get pods -o wide
- Analise regras iptables/ipvs:
iptables -L -t nat
- Exponha um serviço como NodePort e teste acessibilidade
3. Protocolos de Transporte: TCP, UDP e Performance
Tanenbaum: Capítulos sobre Camada de Transporte e Controle de Congestionamento
No K8S: Escolha TCP vs UDP corretamente para suas aplicações.
O que estudar?
- Comunicação HTTP/gRPC em microserviços
- Como os Ingress Controllers gerenciam tráfego TCP
- O impacto de latência e retransmissão em redes internas do cluster
Mão na Massa
- Crie um deployment e dois serviços, com UDP e outro TCP e veja as diferenças: No Yaml abaixo, temos um POD com netcat, expondo UDP na porta 30000 e TCP 30001
apiVersion: apps/v1
kind: Deployment
metadata:
name: udp-tcp-server
spec:
replicas: 2
selector:
matchLabels:
app: udp-tcp-server
template:
metadata:
labels:
app: udp-tcp-server
spec:
containers:
- name: udp-tcp-container
image: busybox
command: ["sh", "-c", "nc -lk -p 30000 -u & nc -lk -p 30001"]
ports:
- containerPort: 30000
protocol: UDP
- containerPort: 30001
protocol: TCP
apiVersion: v1
kind: Service
metadata:
name: udp-service
spec:
selector:
app: udp-tcp-server
ports:
- protocol: UDP
port: 30000
targetPort: 30000
type: NodePort
---
apiVersion: v1
kind: Service
metadata:
name: tcp-service
spec:
selector:
app: udp-tcp-server
ports:
- protocol: TCP
port: 30001
targetPort: 30001
type: NodePort
Após aplicar os manifests no cluster com kubectl apply -f arquivo.yaml
, você pode testar os serviços:
echo "Teste UDP" | nc -u <NODE_IP> 30000
echo "Teste TCP" | nc <NODE_IP> 30001
- Simule perda de pacotes com tc e observe impacto na aplicação:
- Modifique o deployment para usar o TC:
apiVersion: apps/v1
kind: Deployment
metadata:
name: udp-tcp-server
spec:
replicas: 2
selector:
matchLabels:
app: udp-tcp-server
template:
metadata:
labels:
app: udp-tcp-server
spec:
containers:
- name: udp-tcp-container
image: busybox
command: ["/bin/sh", "-c"]
args:
- |
ip link set dev eth0 up;
tc qdisc add dev eth0 root netem loss 30%;
nc -lk -p 30000 -u & nc -lk -p 30001
securityContext:
capabilities:
add: ["NET_ADMIN"]
ports:
- containerPort: 30000
protocol: UDP
- containerPort: 30001
protocol: TCP
tc qdisc add dev eth0 root netem loss 30%
→ Simula 30% de perda de pacotes na interfaceeth0
.- O
securityContext.capabilities.add: ["NET_ADMIN"]
permite modificar a rede dentro do container - Teste UDP com perda de pacote.
for i in {1..10}; do echo "Teste UDP $i" | nc -u <NODE_IP> 30000; sleep 1; done
A saída terá algumas mensagens que não serão recebidas por conta da perda simulada.
Remover a perda de pacotes
Se quiser remover a simulação, basta executar dentro do pod:
kubectl exec -it <POD_NAME> -- sh -c "tc qdisc del dev eth0 root netem"
4. Segurança: Firewall, Network Policies e TLS
Tanenbaum: Capítulos sobre Segurança em Redes e Firewall
No Kube: Controle tráfego entre pods e proteja comunicação.
O que estudar?
- Como criar e aplicar NetworkPolicies
- TLS Termination em Ingress Controllers
- O impacto de DNS Spoofing e ataques MITM no cluster
Mão na Massa
- Bloqueie o tráfego entre namespaces com NetworkPolicies
- Configure um Ingress com cert-manager para TLS automático
5. Monitoramento e Debug de Redes
Tanenbaum: Capítulos sobre Gerenciamento de Redes
No Kubernetes: Ferramentas para entender latência, logs e erros de rede.
O que estudar?
- Logging e tracing com ELK, Prometheus e Jaeger
- Inspeção de tráfego com tcpdump, Wireshark e eBPF
Mão na Massa
- Capture tráfego de um pod: kubectl debug + tcpdump
- Analise conexões abertas: netstat -tulnp dentro do pod
6. Load Balancing no Kubernetes
Tanenbaum: Capítulos sobre Balanceamento de Carga, Algoritmos de Escalonamento e Qualidade de Serviço (QoS)
No Kubernetes: Como balanceadores de carga (Ingress, kube-proxy e External Load Balancers) impactam escalabilidade e desempenho.
6.1. Algoritmos de Balanceamento de Carga
O que estudar?
- Round-Robin, Least Connections, IP Hash, Consistent Hashing
- Load Balancing na camada L4 (TCP/UDP) vs L7 (HTTP/gRPC)
Mão na Massa
- Teste diferentes algoritmos configurando um NGINX Ingress Controller
6.2 Load Balancer no Kubernetes: Interno vs Externo
O que estudar?
- Como kube-proxy usa iptables/ipvs para distribuir tráfego
- Load Balancers de provedores (AWS ELB, GCP LB, MetalLB para Bare Metal)
Mão na Massa
- Analise regras iptables: iptables -L -t nat
- Configure um MetalLB para Kubernetes Bare Metal
6.3 Performance e Debugging de Load Balancers
O que estudar?
- Impacto de latência, tráfego sticky sessions e TLS offloading
- Debugging com tcpdump, nginx -T, kubectl proxy
Mão na Massa
- Use
tcpdump
para capturar tráfego entre o balanceador e os pods - Habilite logs detalhados no kube-proxy e no Ingress Controller