Como configurar um serviço de back-end por meio da Entrada

Nesta página, mostraremos como usar um objeto do Kubernetes Ingress para configurar determinadas propriedades de um serviço de back-end do Google Cloud Platform.

Visão geral

Em um cluster do GKE, quando você cria um objeto Entrada do Kubernetes, o controlador de entrada do GKE é ativado e cria um balanceador de carga HTTP(S) do Google Cloud Platform. O controlador de entrada de dados configura o balanceador de carga e um ou mais serviços de back-end associados a esse balanceador.

A partir do GKE versão 1.11.3-gke.18, é possível usar um Ingress para configurar estas propriedades de um serviço de back-end:

As informações de configuração de um serviço de back-end são mantidas em um recurso personalizado denominado BackendConfig.

Para configurar as propriedades de um serviço de back-end:

  1. Crie um BackendConfig.
  2. Crie um serviço e associe uma das respectivas portas ao BackendConfig.
  3. Crie uma entrada e associe-a ao par (serviço, porta).

Antes de começar

Prepare-se para a tarefa tomando as seguintes medidas:

  • Verifique se você ativou a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Verifique se o SDK do Cloud está instalado.
  • Defina o código do projeto padrão:
    gcloud config set project [PROJECT_ID]
  • Se você estiver trabalhando com clusters zonais, defina a zona de computação padrão:
    gcloud config set compute/zone [COMPUTE_ZONE]
  • Se você estiver trabalhando com clusters regionais, defina a região de computação padrão:
    gcloud config set compute/region [COMPUTE_REGION]
  • Atualize a gcloud para a versão mais recente:
    gcloud components update

Como criar uma implantação

Antes de criar um BackendConfig e um serviço, você precisa criar uma implantação. Aqui está um manifesto para uma implantação:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-bsc-deployment
spec:
  selector:
    matchLabels:
      purpose: bsc-config-demo
  replicas: 2
  template:
    metadata:
      labels:
        purpose: bsc-config-demo
    spec:
      containers:
      - name: hello-app-container
        image: gcr.io/google-samples/hello-app:1.0

Copie o manifesto para um arquivo denominado my-bsc-deployment.yaml e crie a implantação:

kubectl apply -f my-bsc-deployment.yaml

Como criar um BackendConfig

Veja aqui um manifesto de um BackendConfig. O manifesto especifica:

  • um tempo limite de 40 segundos;
  • um tempo limite de drenagem de conexão de 60 segundos;
  • um valor de tempo de vida de cookie de 50 segundos para afinidade baseada em cookie.
apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
  name: my-bsc-backendconfig
spec:
  timeoutSec: 40
  connectionDraining:
    drainingTimeoutSec: 60
  sessionAffinity:
    affinityType: "GENERATED_COOKIE"
    affinityCookieTtlSec: 50

Copie o manifesto para um arquivo chamado my-bsc-backendconfig.yaml e crie o BackendConfig:

kubectl apply -f my-bsc-backendconfig.yaml

Como criar um serviço

Veja aqui um manifesto de um serviço:

apiVersion: v1
kind: Service
metadata:
  name: my-bsc-service
  labels:
    purpose: bsc-config-demo
  annotations:
    beta.cloud.google.com/backend-config: '{"ports": {"80":"my-bsc-backendconfig"}}'
spec:
  type: NodePort
  selector:
    purpose: bsc-config-demo
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080

Para os fins deste exercício, estes são os pontos mais importantes a serem observados sobre seu serviço:

  • Qualquer pod que tenha o rótulo purpose: bsc-config-demo é um membro do serviço.

  • A porta TCP 80 do serviço está associada a um BackendConfig chamado my-bsc-backendconfig. A anotação beta.cloud.google.com/backend-config especifica isso.

  • Uma solicitação enviada para a porta 80 do serviço é encaminhada para um dos pods de membro na porta 8080.

Salve o manifesto em um arquivo denominado my-bsc-service.yaml e crie o serviço:

kubectl apply -f my-bsc-service.yaml

Como criar um Ingress

Veja aqui um manifesto de uma entrada:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-bsc-ingress
spec:
  rules:
  - http:
      paths:
      - path: /*
        backend:
          serviceName: my-bsc-service
          servicePort: 80

No manifesto, é possível ver que as solicitações recebidas são roteadas para a porta 80 do serviço chamado my-bsc-service.

Copie o manifesto para um arquivo denominado my-bsc-ingress.yaml e crie o Ingress:

kubectl apply -f my-bsc-ingress.yaml

Aguarde alguns minutos para que o controlador de entrada configure um balanceador de carga HTTP(S) e um serviço de back-end associado.

Como visualizar o serviço de back-end

Veja seu serviço:

kubectl get service my-bsc-service

Anote o valor da porta do nó que aparece na saída. Por exemplo, na saída a seguir, o valor da porta do nó é 30936.

NAME             TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
my-bsc-service   NodePort   10.83.15.111   none          80:30936/TCP   2m

Listar os serviços de back-end em seu projeto do GCP.

gcloud compute backend-services list

Na saída, encontre o nome do seu serviço de back-end. É o nome que contém a porta do nó do seu serviço. Por exemplo, se a porta do seu nó for 30936, o nome do seu serviço de back-end será semelhante a este:

NAME
...
k8s-be-30936--078bc860bb6f7a2f
...

Descreva seu serviço de back-end:

gcloud compute backend-services describe [BACKEND_SERVICE_NAME] --global

[BACKEND_SERVICE_NAME] é o nome do seu serviço de back-end.

A saída mostra valores para as propriedades que você configurou:

affinityCookieTtlSec: 50
...
connectionDraining:
  drainingTimeoutSec: 60
...
sessionAffinity: GENERATED_COOKIE
...
timeoutSec: 40

Como definir a afinidade de IP do cliente

No exercício anterior, você configurou a afinidade baseada em cookie. Também é possível usar um BackendConfig para definir a afinidade de IP do cliente.

A afinidade de IP do cliente é útil somente para serviços que são apoiados por grupos de endpoints da rede.

Para definir a afinidade de IP do cliente, defina affinityType como "CLIENT_IP" no manifesto de BackendConfig.

sessionAffinity:
  affinityType: "CLIENT_IP"

Para afinidade de IP do cliente, o campo affinityCookieTtlSec é irrelevante.

No seu manifesto de serviço, inclua a anotação cloud.google.com/neg: '{"ingress": true}':

kind: Service
metadata:
  name: my-bsc-service
  labels:
    purpose: bsc-config-demo
  annotations:
    cloud.google.com/neg: '{"ingress": true}'
    beta.cloud.google.com/backend-config: '{"ports": {"80":"my-bsc-backendconfig"}}'
...

Limpeza

Depois de concluir os exercícios nesta página, siga estas etapas para remover os recursos e evitar cobranças indesejadas na conta:

Exclua os objetos do Kubernetes que você criou para este exercício:

kubectl delete ingress my-bsc-ingress
kubectl delete service my-bsc-service
kubectl delete backendconfig my-bsc-backendconfig
kubectl delete deployment my-bsc-deployment

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Kubernetes Engine