Service
- É um componente utilizado para fazer com que os pods sejam acessíveis ao mundo externo, ou mesmo dentro do cluster;
- Aplica o load balancing round-robin, direcionando para os pods
- As requisições são "mais ou menos" divididas entre os pods
- Cada Service recebe um nome acessível em
NOMEDASERVICE.NAMESPACE.svc
Tipos de service
Existem 4 tipos de services:
-
service.spec.type = ClusterIP
: Torna o serviço acessível apenas dentro do cluster. É oserviceType
padrão. - Existe uma faixa de ips para os pods e outra para os serviços - É criado um ip virtual para que o serviço seja acessível dentro do CLuster -
service.spec.type = NodePort
: Torna o serviço acessível ao mundo externo, colocando uma porta anexada a um nóNodeIP:NodePort
. Também possui umClusterIp
. - A porta, se não setada, é automaticamente preenchida. - A porta deve estar entre 30000 e 32767 - Qualquer nó responderá pela porta - Quando há multiplas portas sendo expostas, é necessário informar o name -
service.spec.type = LoadBalancer
: - É necessário um agente externo para seu funcionamento. Possui umNodePort
e umClusterIp
-
service.spec.type = ExternalName
- Cria umCNAME
dns registry para algo que está fora do cluster -
HEADLESS SERVICE
service.spec.type = ClusterIP
eservice.spec.ClusterIP = None
- Vai usar os IPS dos pods e não o IP a service... Já que ela nem tem - PESQUISAR MAIs -
Endpoints são para quantos pods o trafego está sendo direcionado com determinado serviço
-
Quando um serviço é criado, um registro
A/AAAA
e umSRV
é gerado no coredns
As informações da service utilizada pelo pod podem ser visualizadas também pelas variáveis de ambiente definidas. Só serão disponibilizadas em pods que estejam rodando no mesmo namespace
export # executar commando
#### SAIDA
### SERVICENAME_SERVICE_HOST
export TESTE_SERVICE_HOST='10.109.105.76'
export TESTE_SERVICE_PORT='80'
Vai mostrar
[!NOTE]- Criação de uma
Secret
filePath: "@/Attachments/Kubernetes/service/deploy-service-nodeip.yaml"
[!NOTE]- Service para um Pod utilizando
spec.type.ClusterIP
filePath: "@/Attachments/Kubernetes/service/service-clusterip.yaml"
[!NOTE]- Service para um Pod utilizando
spec.type.NodePort
filePath: "@/Attachments/Kubernetes/service/service-nodeport.yaml"
Comandos úteis
kubectl cluster-info dump | grep service-cluster-ip-range
kubectl cluster-info dump | grep cluster-cidr
kubectl expose pod service-test-nodeport --port 8080 --target-port 80 --selector svcType=NodePort
Cria service
kubectl create -f service-file-definition.yml
Recupera informações sobre o service
kubectl get svc
Deleta service
kubectl delete svc name-service
kubectl run -ti --rm testpod --image nginx -- cat /etc/resolv.conf