Sobes.tech
Junior

Qual é a diferença entre um serviço headless e outros tipos de serviços?

sobes.tech IA

Resposta da IA

O serviço sem cabeça não possui um endereço IP de cluster e não realiza balanceamento de carga. Em vez disso, o DNS retorna diretamente os endereços IP de todos os pods que correspondem ao seletor do serviço. Isso permite que o cliente escolha por si próprio qual o pod conectar ou use seu próprio algoritmo de balanceamento.

Opções típicas de uso:

  • StatefulSets: Para aplicações que requerem uma identificação de rede única e armazenamento de dados estável.
  • Discovery: Os clientes podem descobrir diretamente os pods e gerenciar as conexões.
  • Balanceamento de carga próprio: As aplicações podem implementar algoritmos de balanceamento personalizados.

Comparação com serviços ClusterIP e NodePort:

Tipo de serviço IP de cluster Balanceamento de carga DNS
ClusterIP Sim Kubernetes Retorna o IP do serviço
NodePort Sim Kubernetes Retorna o IP do serviço
Sem cabeça Não Não (cliente) Retorna os endereços IP dos pods

Definição do serviço sem cabeça em YAML:

apiVersion: v1
kind: Service
metadata:
  name: meu-servico-sem-cabeca
spec:
  selector:
    app: minha-aplicacao # Seletor para os pods
  clusterIP: None # A diferença chave - ausência de IP de cluster
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

Em vez de acessar meu-servico-sem-cabeca por um IP único, o cliente receberá uma lista de endereços IP dos pods:

$ kubectl get pods -l app=minha-aplicacao -o custom-columns=NAME:.metadata.name,IP:.status.podIP
NAME            IP
minha-aplicacao-abcde    10.42.0.10
minha-aplicacao-fghij    10.42.0.11
minha-aplicacao-klmno    10.42.0.12

Depois, o cliente pode escolher qualquer um desses IPs para estabelecer a conexão.