Service
O que é um Service?
Um Service é um objeto do Kubernetes que define um conjunto de Pods e uma política de acesso a esses Pods. Os Services permitem que um conjunto de Pods seja acessado através de um único IP e DNS name. Eles também permitem que os Pods sejam escalados e movidos sem que o cliente perceba.
Tipos de Services
Existem 4 tipos de Services no Kubernetes:
- ClusterIP: Expõe o Service em um IP interno no cluster. Este tipo torna o Service acessível apenas dentro do cluster.
- NodePort: Expõe o Service na mesma porta de cada Node selecionado no cluster usando NAT. Torna o Service acessível de fora do cluster usando {NodeIP}:{NodePort}.
- LoadBalancer: Cria um balanceador de carga externo no ambiente de nuvem atual (se suportado) e atribui um IP fixo, externo ao cluster, ao Service. Tornando o Service acessível de fora do cluster.
- ExternalName: O Service é acessível através de um DNS name externo. Esse tipo de Service é utilizado para acessar recursos externos ao cluster.
Criando um Service do tipo ClusterIP, NodePort, LoadBalancer
Para criarmos um service precisamos de um Deployment ou um StatefulSet rodando. Vamos usar no exemplo o Nginx.
Para termos um serviço do tipo LoadBalancer funcionando, precisamos de um provedor de nuvem que suporte esse tipo de serviço ou podemos usar um Ingress Controller, como por exemplo o MetalLB. Caso contrário, o serviço será criado, mas não terá um IP externo atribuído.
Criando um Service do tipo ExternalName
Criando um Service expondo outro Service
Podemos criar um Service que exponha outro Service. Isso é útil quando queremos expor um Service que não é acessível de fora do cluster, como por exemplo um Service do tipo ClusterIP.
O que são os Endpoints?
Os Endpoints são objetos do Kubernetes que armazenam informações sobre os Pods que fazem parte de um Service. Eles são criados automaticamente pelo Kubernetes quando um Service é criado. Os Endpoints são utilizados para descoberta de Pods através de DNS.