Skip to content

Latest commit

 

History

History
63 lines (46 loc) · 2.28 KB

File metadata and controls

63 lines (46 loc) · 2.28 KB

Rodando um Service

Um service expõe um conjunto de Pods ou deployment como um serviço único, seja para o Cluster ou para o mundo exterior.

A criação de Services é feita utilizando-se arquivos YAML, como o que está listado a seguir:

apiVersion: v1 # Obrigatorio, versão da API do Kubernetes que contém esse recursos
kind: Service # Tipo de objeto a ser criado
metadata:
  name: pod-info-service  # Nome do service
spec:
  type: ClusterIP # Tipo de Serviço. Os mais comuns são ClusterIP e LoadBalancer
  selector: # Indica quais pods serão roteadas por este service
    app: pod-info
  ports: # Portas que o serviço irá expor
    - protocol: TCP # Protocolo (TCP ou UDP)
      port: 80 # Porta que será exposta para o mundo
      targetPort: 9898 # Porta da pod que será roteada

Para aplicar esse arquivo no cluster, deve-se usar o comando apply, passando-se o arquivo e o nome do namespace onde será rodado.

kubectl apply -f pod-info-service.yaml --namespace=my-namespace

Para listar os serviços, deve-se rodar o comando:

kubectl get service --namespace=my-namespace

Por ter o tipo ClusterIP, o serviço só está exposto para dentro do cluster:

NAME               TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
pod-info-service   ClusterIP   10.0.45.23   <none>        80/TCP    19s

O serviço está expondo a porta 80, porém para acessá-la de fora é necessário criar um port-forward, utilizando-se o comando:

kubectl port-forward service/pod-info-service 3004:80 --namespace=my-namespace

Assim, expomos a porta 80 do service como a porta 3004 do computador local.

Podemos também alterar o Service para que ele crie um Load Balancer em um IP Externo, assim não temos que fazer o port forward. Para isso, modificamos o Type para "LoadBalancer" e rodamos o commando apply:

kubectl apply -f pod-info-service-load-balancer.yaml --namespace=my-namespace

Listando novamente o serviço com o comando kubectl get service --namespace=my-namespace, obtemos o IP Externo:

NAME               TYPE           CLUSTER-IP   EXTERNAL-IP      PORT(S)        AGE
pod-info-service   LoadBalancer   10.0.45.23   52.224.196.160   80:31710/TCP   12m

Podemos acessar pelo IP na porta 80.