Entrada para balanceamento de carga HTTP(S) externo

Nesta página, explicamos como a Entrada para balanceamento de carga HTTP(S) externo funciona no Google Kubernetes Engine (GKE). Também é possível aprender como configurar e usar a Entrada para balanceamento de carga externo.

Para mais informações gerais sobre o uso do balanceamento de carga no GKE, consulte Entrada para balanceamento de carga HTTP(S).

Visão geral

O balanceador de carga HTTP(S) externo do Google Cloud é distribuído globalmente para a exposição pública de aplicativos na Internet. Ele é implantado em todos os pontos de presença (PoPs, na sigla em inglês) do Google que oferecem conexões HTTP(S) de baixa latência para os usuários. O roteamento Anycast é usado para IPs do balanceador de carga, permitindo que o roteamento da Internet determine o caminho de custo mais baixo para o balanceador de carga do Google mais próximo.

A Entrada do GKE implanta o balanceador de carga HTTP(S) externo para fornecer nativamente balanceamento de carga global para pods como back-ends.

Suporte para recursos do Google Cloud

É possível usar um BackendConfig para configurar um balanceador de carga HTTP(S) externo e usar recursos como:

O BackendConfig é um recurso personalizado que contém informações de configuração dos recursos do Google Cloud. Para saber mais sobre os recursos compatíveis, consulte Recursos do Ingress.

Suporte para WebSocket

Com o balanceamento de carga HTTP(S) externo, o protocolo WebSocket funciona sem qualquer configuração.

Se você pretende usar o protocolo WebSocket, use um valor de tempo limite maior que o padrão de 30 segundos. Para o tráfego WebSocket enviado por um balanceador de carga HTTP(S) externo do Google Cloud, o tempo limite do serviço de back-end é interpretado como o tempo máximo em que uma conexão WebSocket pode permanecer aberta, seja ela ociosa ou não.

Para definir o valor de tempo limite para um serviço de back-end configurado por meio da Entrada, crie um objeto BackendConfig e use a anotação beta.cloud.google.com/backend-config no manifesto do serviço.

Para informações de configuração, consulte Tempo limite de resposta do back-end.

Endereços IP estáticos para balanceadores de carga HTTP(S)

Ao criar um objeto Entrada, você recebe um endereço IP externo estável que os clientes podem usar para acessar seus serviços e, por sua vez, os contêineres em execução. O endereço IP é estável porque ele dura por toda a vida útil do objeto Entrada. Se você excluir a Entrada e criar uma nova no mesmo arquivo de manifesto, pode ser que não receba o mesmo endereço IP externo.

Caso queira um endereço IP permanente que se mantenha estável depois de excluir sua Entrada e criar uma nova, reserve um endereço IP externo estático global. Em seguida, no manifesto da entrada, inclua uma anotação que forneça o nome do endereço IP estático reservado.

Por exemplo, suponha que você tenha reservado um endereço IP externo estático global chamado my-static-address. No manifesto da Entrada, inclua uma anotação kubernetes.io/ingress.global-static-ip-name, conforme mostrado aqui:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: my-static-address

Como configurar o HTTPS (TLS) entre o cliente e o balanceador de carga

Um balanceador de carga HTTP(S) atua como um proxy entre seus clientes e o aplicativo. Se você quiser aceitar solicitações HTTPS dos seus clientes, o balanceador de carga precisará ter um certificado para provar sua identidade a eles. Além disso, ele precisa ter uma chave privada para concluir o handshake HTTPS.

Quando o balanceador de carga aceita uma solicitação HTTPS de um cliente, o tráfego entre o cliente e o balanceador de carga é criptografado usando TLS. No entanto, o balanceador de carga encerra a criptografia TLS e encaminha a solicitação sem criptografia para o aplicativo. Para informações sobre como criptografar o tráfego entre o balanceador de carga e o aplicativo, consulte HTTPS entre o balanceador de carga e seu aplicativo.

É possível usar certificados SSL gerenciados pelo Google ou certificados gerenciados por você. Para mais informações sobre como criar uma entrada que use certificados gerenciados pelo Google, consulte Como usar certificados SSL gerenciados pelo Google.

Para fornecer um balanceador de carga HTTP(S) com um certificado e uma chave que você mesmo gerou, crie um objeto secret do Kubernetes. O secret contém o certificado e a chave. Adicione o secret ao campo tls do seu manifesto Ingress, como no exemplo a seguir:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress-2
spec:
  tls:
  - secretName: SECRET_NAME
  rules:
  - http:
      paths:
      - path: /*
        pathType: ImplementationSpecific
        backend:
          service:
            name: SERVICE_NAME
            port:
              number: 60000

Este manifesto inclui os seguintes valores:

  • SECRET_NAME: o nome do secret que você criou.
  • SERVICE_NAME: o nome do seu serviço de back-end.

As alterações nos secrets são coletadas periodicamente. Por isso, se você modificar os dados do secret, levará no máximo 10 minutos para que essas alterações sejam aplicadas ao balanceador de carga.

Para mais informações, consulte Como usar vários certificados SSL no balanceamento de carga HTTPS com a Entrada.

Como desativar o HTTP

Se quiser que todo o tráfego entre o cliente e o balanceador de carga HTTP(S) use HTTPS, é possível desativar o HTTP incluindo a anotação kubernetes.io/ingress.allow-http no seu manifesto da entrada. Defina o valor da anotação como "false".

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress-2
  annotations:
    kubernetes.io/ingress.allow-http: "false"
spec:
  tls:
  - secretName: SECRET_NAME
  ...

Esse manifesto inclui o SECRET_NAME, que é o nome do secret que você criou.

Certificados pré-compartilhados para balanceadores de carga

Como alternativa ao uso do Kubernetes Secrets no fornecimento de certificados ao balanceador de carga para a terminação HTTP, é possível usar os certificados enviados anteriormente ao projeto do Google Cloud. Para mais informações, consulte Como usar certificados pré-compartilhados e Como usar vários certificados SSL no balanceamento de carga HTTPS com a Entrada.

HTTPS (TLS) entre o balanceador de carga e o aplicativo

Um balanceador de carga HTTP(S) atua como um proxy entre seus clientes e o aplicativo. Os clientes podem usar HTTP ou HTTPS para a comunicação com o proxy do balanceador de carga. A conexão entre o proxy do balanceador de carga e seu aplicativo usa HTTP por padrão. No entanto, se o aplicativo em execução em um pod do GKE for capaz de receber solicitações HTTPS você pode configurar o balanceador de carga para usar HTTPS ao encaminhar solicitações para seu aplicativo.

Para configurar o protocolo usado entre o balanceador de carga e o aplicativo, use a anotação cloud.google.com/app-protocols no manifesto de serviço.

O manifesto do serviço a seguir especifica duas portas. A anotação diz que quando um balanceador de carga HTTP(S) segmenta a porta 80 do Serviço, ele deve usar HTTP. E quando o balanceador de carga segmenta a porta 443 do serviço, ele deve usar HTTPS.

As portas só precisam ser especificadas usando name, e não outros campos de porta, como targetPort.

apiVersion: v1
kind: Service
metadata:
  name: my-service-3
  annotations:
    cloud.google.com/app-protocols: '{"my-https-port":"HTTPS","my-http-port":"HTTP"}'
spec:
  type: NodePort
  selector:
    app: metrics
    department: sales
  ports:
  - name: my-https-port
    port: 443
    targetPort: 8443
  - name: my-http-port
    port: 80
    targetPort: 50001

A seguir