K8s em Exemplos: Services (LoadBalancer)

LoadBalancer provisiona um load balancer externo do seu provedor cloud (AWS ELB, GCP LB, Azure LB). O tráfego é roteado para seus Pods. Funciona apenas em ambientes suportados.

service-loadbalancer.yaml

Defina type: LoadBalancer para provisionar um load balancer cloud. O cloud controller cria e configura o LB automaticamente.

apiVersion: v1
kind: Service
metadata:
  name: my-app
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 8080
  selector:
    app: my-app
terminal

O IP externo aparece no status do Service uma vez provisionado. Isso pode levar alguns minutos dependendo do provedor cloud.

$ kubectl get svc my-app -w
NAME     TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
my-app   LoadBalancer   10.96.0.100   <pending>     80:31234/TCP   10s
my-app   LoadBalancer   10.96.0.100   34.123.45.67  80:31234/TCP   45s

$ curl http://34.123.45.67
Hello from my-app!
service-lb-aws.yaml

Annotations específicas de cloud configuram o load balancer. Cada provedor tem opções diferentes para LBs internos, NLB vs ALB, etc.

apiVersion: v1
kind: Service
metadata:
  name: my-app
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: nlb
    service.beta.kubernetes.io/aws-load-balancer-internal: "true"
spec:
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 8080
  selector:
    app: my-app
terminal

Cada Service LoadBalancer cria um recurso cloud separado (deletado quando o Service é deletado). Para múltiplos services, use Ingress para compartilhar um único load balancer.

$ kubectl delete svc my-app
service "my-app" deleted

Índice | GitHub | Use as setas do teclado para navegar |