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

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 e netcat entre pods

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

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 interface eth0.

  • 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.

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"

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

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

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.

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

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

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