Nesta página, mostramos como configurar o balanceador de carga que o Google Kubernetes Engine (GKE) cria quando você implanta um gateway em um cluster do GKE.
Quando você implanta um gateway, a configuração GatewayClass determina qual balanceador de carga o GKE cria. Esse balanceador de carga gerenciado é pré-configurado com configurações padrão que podem ser modificadas por uma política.
Para personalizar os recursos de gateway de acordo com os requisitos da sua infraestrutura ou aplicativo, anexe políticas a gateways, serviços ou ServiceImports. Depois de aplicar ou modificar uma política, não é preciso excluir ou recriar os recursos de gateway, rota ou serviço. A política é processada pelo controlador de gateway, e o recurso do balanceador de carga subjacente é (re)configurada de acordo com a (nova) política.
Antes de começar
Antes de começar, verifique se você realizou as tarefas a seguir:
- Ativar a API Google Kubernetes Engine. Ativar a API Google Kubernetes Engine
- Se você quiser usar a CLI do Google Cloud para essa tarefa,
    instale e inicialize a
    gcloud CLI. Se você instalou a CLI gcloud anteriormente, instale a versão
    mais recente executando o comando gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.
- Verifique se você tem um cluster do Autopilot ou Standard. Para criar um novo cluster, consulte Criar um cluster do Autopilot.
Requisitos do GKE Gateway Controller
- A API Gateway é compatível apenas com clusters nativos da VPC.
- Se você estiver usando o GatewayClasses regional ou entre regiões, ative uma sub-rede somente proxy.
- O cluster precisa ter o complemento HttpLoadBalancingativado.
- Se você estiver usando o Istio, será necessário fazer upgrade do Istio para uma das seguintes versões:
- 1.15.2 ou mais recente
- 1.14.5 ou mais recente
- 1.13.9 ou mais recente
 
- Se você estiver usando a VPC compartilhada, será necessário atribuir o papel Compute Network Userà conta de serviço do GKE referente ao projeto de serviço no projeto host.
Restrições e limitações
Além das restrições e limitações do controlador de gateway do GKE, as seguintes limitações se aplicam especificamente às políticas aplicadas aos recursos de gateway:
- Os recursos - GCPGatewayPolicysó podem ser anexados a um- gateway.networking.k8s.io- Gateway.
- Os recursos - GCPGatewayPolicyprecisam existir no mesmo namespace que o- Gatewayde destino.
- Ao usar um único gateway de cluster, os recursos - GCPBackendPolicye- HealthCheckPolicyprecisam se referir a um recurso- Service.
- Ao usar um gateway de vários clusters, os recursos - GCPBackendPolicye- HealthCheckPolicydevem se referir a um recurso- ServiceImport.
- Apenas um - GCPBackendPolicypode ser anexado a um serviço por vez. Quando duas políticas- GCPBackendPolicysão criadas e segmentam a mesma- Serviceou- ServiceImport, a política mais antiga tem precedência e a segunda falha ao ser anexada.
- As políticas hierárquicas não são compatíveis com o gateway do GKE. 
- Os recursos - HealthCheckPolicye- GCPBackendPolicyprecisam estar no mesmo namespace que o recurso de destino- Serviceou- ServiceImport.
- Os recursos - GCPBackendPolicye- HealthCheckPolicysão estruturados para referenciar apenas um serviço de back-end.
- O - GCPBackendPolicynão é compatível com as opções- HEADER_FIELDou- HTTP_COOKIEpara afinidade da sessão.
Configurar o acesso global para seu gateway interno regional
Nesta seção, descrevemos uma funcionalidade disponível nos clusters do GKE que executam a versão 1.24 ou posterior.
Para permitir o acesso global com seu gateway interno, anexe uma política ao recurso de gateway.
O manifesto GCPGatewayPolicy a seguir ativa o gateway interno regional para
acesso global:
apiVersion: networking.gke.io/v1
kind: GCPGatewayPolicy
metadata:
  name: my-gateway-policy
  namespace: default
spec:
  default:
    # Enable global access for the regional internal Application Load Balancer.
    allowGlobalAccess: true
  targetRef:
    group: gateway.networking.k8s.io
    kind: Gateway
    name: my-gateway
Configurar a região para o gateway de vários clusters
Nesta seção, descrevemos uma funcionalidade disponível nos clusters do GKE que executam a versão 1.30.3-gke.1225000 ou mais recente.
Se a frota tiver clusters em várias regiões, talvez seja necessário implantar gateways regionais em regiões diferentes para vários casos de uso, como redundância entre regiões, baixa latência e soberania de dados. No cluster de configuração do gateway de vários clusters, é possível especificar a região em que você quer implantar os gateways regionais. Se você não especificar uma região, a região padrão será a do cluster de configuração.
Para configurar uma região para seu gateway de vários clusters, use o campo region na GCPGatewayPolicy. No exemplo a seguir, o gateway está configurado na região us-central1:
apiVersion: networking.gke.io/v1
kind: GCPGatewayPolicy
metadata:
  name: my-gateway-policy
  namespace: default
spec:
  default:
    region: us-central1
  targetRef:
    group: gateway.networking.k8s.io
    kind: Gateway
    name: my-regional-gateway
Configurar políticas de SSL para proteger o tráfego do cliente para o balanceador de carga
Nesta seção, descrevemos uma funcionalidade disponível nos clusters do GKE que executam a versão 1.24 ou posterior.
Para proteger o tráfego do cliente para o balanceador de carga, configure a política de SSL adicionando
o nome da política a GCPGatewayPolicy. Por padrão, o gateway não
tem nenhuma política de SSL definida e anexada.
Crie uma política de SSL
antes de referenciar a política em GCPGatewayPolicy.
O manifesto GCPGatewayPolicy a seguir especifica uma política de segurança chamada
gke-gateway-ssl-policy:
apiVersion: networking.gke.io/v1
kind: GCPGatewayPolicy
metadata:
  name: my-gateway-policy
  namespace: team1
spec:
  default:
    sslPolicy: gke-gateway-ssl-policy
  targetRef:
    group: gateway.networking.k8s.io
    kind: Gateway
    name: my-gateway
Configurar verificações de integridade
Nesta seção, descrevemos uma funcionalidade disponível nos clusters do GKE que executam a versão 1.24 ou posterior.
Por padrão, para serviços de back-end que usam os protocolos de aplicativo HTTP ou kubernetes.io/h2c, o HealthCheck é do tipo HTTP. Para o protocolo HTTPS, o HealthCheck padrão é do tipo HTTPS. Para o protocolo HTTP2, o HealthCheck padrão é do tipo HTTP2.
É possível usar uma HealthCheckPolicy para controlar as configurações de verificação de integridade
do balanceador de carga. Cada tipo de verificação de integridade (http, https, grpc, http2 e tcp) tem
parâmetros que podem ser definidos. Google Cloud
cria uma verificação de integridade exclusiva para cada serviço de back-end de cada
serviço do GKE.
Para que o balanceador de carga funcione normalmente, talvez seja necessário configurar um HealthCheckPolicy personalizado se o caminho da verificação de integridade não for o padrão "/". Essa configuração também é necessária se o caminho exigir cabeçalhos especiais ou se você precisar ajustar os parâmetros da verificação de integridade. Por exemplo, se o caminho de solicitação padrão for "/", mas seu serviço não puder ser acessado nesse caminho e usar "/health" para informar a integridade, configure requestPath no HealthCheckPolicy de acordo.
O manifesto HealthCheckPolicy a seguir mostra todos os campos disponíveis ao
configurar uma política de verificação de integridade:
Serviço
# Health check configuration for the load balancer. For more information
# about these fields, see https://cloud.google.com/compute/docs/reference/rest/v1/healthChecks.
apiVersion: networking.gke.io/v1
kind: HealthCheckPolicy
metadata:
  name: lb-healthcheck
  namespace: lb-service-namespace
spec:
  default:
    checkIntervalSec: INTERVAL  # The default value is 15 seconds.
    timeoutSec: TIMEOUT
    healthyThreshold: HEALTHY_THRESHOLD
    unhealthyThreshold: UNHEALTHY_THRESHOLD
    logConfig:
      enabled: ENABLED
    config:
      type: PROTOCOL
      httpHealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
      httpsHealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
      grpcHealthCheck:
        grpcServiceName: GRPC_SERVICE_NAME
        portSpecification: PORT_SPECIFICATION
        port: PORT
      http2HealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
      tcpHealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
        request: REQUEST
        response: RESPONSE
        proxyHeader: PROXY_HEADER
  # Attach to a Service in the cluster.
  targetRef:
    group: ""
    kind: Service
    name: lb-service
Serviço em vários clusters
apiVersion: networking.gke.io/v1
kind: HealthCheckPolicy
metadata:
  name: lb-healthcheck
  namespace: lb-service-namespace
spec:
  # The default and config fields control the health check configuration for the
  # load balancer. For more information about these fields, see
  # https://cloud.google.com/compute/docs/reference/rest/v1/healthChecks.
  default:
    checkIntervalSec: INTERVAL
    timeoutSec: TIMEOUT
    healthyThreshold: HEALTHY_THRESHOLD
    unhealthyThreshold: UNHEALTHY_THRESHOLD
    logConfig:
      enabled: ENABLED
    config:
      type: PROTOCOL
      httpHealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
      httpsHealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
      grpcHealthCheck:
        grpcServiceName: GRPC_SERVICE_NAME
        portSpecification: PORT_SPECIFICATION
        port: PORT
      http2HealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        host: HOST
        requestPath: REQUEST_PATH
        response: RESPONSE
        proxyHeader: PROXY_HEADER
      tcpHealthCheck:
        portSpecification: PORT_SPECIFICATION
        port: PORT
        portName: PORT_NAME
        request: REQUEST
        response: RESPONSE
        proxyHeader: PROXY_HEADER
  # Attach to a multi-cluster Service by referencing the ServiceImport.
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service
Substitua:
- INTERVAL: especifica o intervalo de verificação, em segundos, para cada sondagem de verificação de integridade. Esse é o momento entre o início da verificação de uma sondagem e o começo da próxima verificação. Se você omitir esse parâmetro, o padrão Google Cloud será de 15 segundos se nenhum- HealthCheckPolicyfor especificado e de 5 segundos quando um- HealthCheckPolicyfor especificado sem um valor- checkIntervalSec. Para mais informações, consulte Várias sondagens e frequências.
- TIMEOUT: especifica o tempo que Google Cloud aguarda uma resposta para uma sondagem. O valor de- TIMEOUTprecisa ser menor ou igual ao- INTERVAL. As unidades são informadas em segundos. Cada sondagem exige que um código de resposta HTTP 200 (OK) seja entregue antes do tempo limite da sondagem.
- HEALTHY_THRESHOLDe- UNHEALTHY_THRESHOLD: especifica o número de tentativas de conexão sequenciais que precisam ser realizadas ou falhar, para pelo menos uma sondagem, para alterar o estado de integridade de íntegro para não íntegro ou de não íntegro para íntegro. Se você omitir um desses parâmetros, o padrão do Google Cloud será 2.
- PROTOCOL: especifica um protocolo usado pelos sistemas de sondagem para verificação de integridade. Para mais informações, consulte Critérios de sucesso para HTTP, HTTPS e HTTP/2, Critérios de sucesso para gRPC e Critérios de sucesso para TCP. Este parâmetro é obrigatório.
- ENABLED: especifica se a geração de registros está ativada ou desativada.
- PORT_SPECIFICATION: especifica se a verificação de integridade usa uma porta fixa (- USE_FIXED_PORT), uma porta nomeada (- USE_NAMED_PORT) ou uma porta de serviço (- USE_SERVING_PORT). Se não for especificada, a verificação de integridade seguirá o comportamento especificado no campo- port. Se- portnão for especificado, o padrão desse campo será- USE_SERVING_PORT.
- PORT: uma HealthCheckPolicy só permite a especificação da porta de verificação de integridade do balanceador de carga usando um número de porta. Se você omitir esse parâmetro, o padrão Google Cloud será 80. Como o balanceador de carga envia sondagens para o endereço IP do pod diretamente, selecione uma porta que corresponda a um- containerPortde pods de exibição, mesmo que o- containerPortseja indicado por um- targetPortdo serviço. Você não fica limitado ao- containerPortsindicado pelo- targetPortde um serviço.
- HOST: o valor do cabeçalho do host na solicitação de verificação de integridade. Esse valor usa a definição RFC 1123 de um nome de host, exceto endereços IP numéricos não permitidos. Se não for especificado ou deixado em branco, esse valor será o padrão para o endereço IP da verificação de integridade.
- REQUEST: especifica os dados do aplicativo a serem enviados depois que a conexão TCP for estabelecida. Se não for especificado, o valor será vazio. Se a solicitação e a resposta estiverem vazias, a conexão estabelecida por si só indicará integridade. Os dados da solicitação só podem estar no formato ASCII.
- REQUEST_PATH: especifica o caminho da solicitação de verificação de integridade. Se não for especificado ou ficar em branco, o padrão será- /.
- RESPONSE: especifica os bytes que serão comparados com o início dos dados da resposta. Se não for especificado ou deixado em branco, o GKE interpretará qualquer resposta como íntegra. Os dados de resposta só podem ser ASCII.
- PROXY_HEADER: especifica o tipo de cabeçalho do proxy. É possível usar- NONEou- PROXY_V1. O padrão é- NONE.
- GRPC_SERVICE_NAME: um nome opcional do serviço gRPC. Omita esse campo para especificar todos os Serviços.
Para mais informações sobre os campos de HealthCheckPolicy, consulte a
referência de healthChecks.
Configurar a política de segurança do back-end do Cloud Armor para proteger seus serviços de back-end
Nesta seção, descrevemos uma funcionalidade disponível nos clusters do GKE que executam a versão 1.24 ou posterior.
Configure a política de segurança do back-end do Cloud Armor adicionando o nome da política
de segurança a GCPBackendPolicy para proteger os serviços de back-end.
Por padrão, o gateway não tem nenhuma política de segurança de back-end do Cloud Armor definida e anexada.
Crie uma política de segurança de back-end do Cloud Armor antes de referenciar a política em GCPBackendPolicy. Se você estiver ativando um gateway regional, crie uma política de segurança de back-end do Cloud Armor regional.
O manifesto GCPBackendPolicy a seguir especifica uma política de segurança de back-end
chamada example-security-policy:
Serviço
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    # Apply a Cloud Armor security policy.
    securityPolicy: example-security-policy
  # Attach to a Service in the cluster.
  targetRef:
    group: ""
    kind: Service
    name: lb-service
Serviço em vários clusters
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    # Apply a Cloud Armor security policy.
    securityPolicy: example-security-policy
  # Attach to a multi-cluster Service by referencing the ServiceImport.
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service
Configurar o IAP
Nesta seção, descrevemos uma funcionalidade disponível nos clusters do GKE que executam a versão 1.24 ou posterior.
O Identity-Aware Proxy (IAP) impõe políticas de controle de acesso a serviços de back-end associados a uma HTTPRoute. Com essa aplicação, somente usuários ou aplicativos autenticados com o papel correto do Identity and Access Management (IAM) atribuído podem acessar esses serviços de back-end.
Por padrão, não há IAP aplicado aos serviços de back-end. Você
precisa configurar explicitamente o IAP em GCPBackendPolicy.
Para configurar o IAP com o gateway, faça o seguinte:
- Ative o IAP para GKE Não configure o back-end (Como configurar o BackendConfig) porque - BackendConfigsó é válido no caso de uma implantação do Ingress.
- Crie um secret para o IAP: - No console Google Cloud , acesse a página Credenciais: 
- Clique no nome do cliente e faça o download do arquivo do cliente OAuth. 
- No arquivo do cliente OAuth, copie a chave secreta OAuth na área de transferência. 
- Crie um arquivo chamado - iap-secret.txt.
- Cole a chave secreta OAuth no arquivo - iap-secret.txtusando o seguinte comando:- echo -n CLIENT_SECRET > iap-secret.txt kubectl create secret generic SECRET_NAME --from-file=key=iap-secret.txt
 
- Para especificar a política do IAP que faz referência a um secret: - Crie o manifesto - GCPBackendPolicya seguir, substituindo- SECRET_NAMEe- CLIENT_ID, respectivamente. Salve o manifesto como- backend-policy.yaml:- Serviço- apiVersion: networking.gke.io/v1 kind: GCPBackendPolicy metadata: name: backend-policy spec: default: # IAP OAuth2 settings. For more information about these fields, # see https://cloud.google.com/iap/docs/reference/rest/v1/IapSettings#oauth2. iap: enabled: true oauth2ClientSecret: name: SECRET_NAME clientID: CLIENT_ID # Attach to a Service in the cluster. targetRef: group: "" kind: Service name: lb-service- Serviço em vários clusters- apiVersion: networking.gke.io/v1 kind: GCPBackendPolicy metadata: name: backend-policy spec: default: # IAP OAuth2 settings. For more information about these fields, # see https://cloud.google.com/iap/docs/reference/rest/v1/IapSettings#oauth2. iap: enabled: true oauth2ClientSecret: name: SECRET_NAME clientID: CLIENT_ID # Attach to a multi-cluster Service by referencing the ServiceImport. targetRef: group: net.gke.io kind: ServiceImport name: lb-service
- Aplique o manifesto - backend-policy.yaml:- kubectl apply -f backend-policy.yaml
 
- Verifique a configuração: - Confirme se a política foi aplicada depois de criar - GCPBackendPolicycom o IAP:- kubectl get gcpbackendpolicy- O resultado será assim: - NAME AGE backend-policy 45m
- Para ver mais detalhes, use o comando "describe": - kubectl describe gcpbackendpolicy- O resultado será assim: - Name: backend-policy Namespace: default Labels: <none> Annotations: <none> API Version: networking.gke.io/v1 Kind: GCPBackendPolicy Metadata: Creation Timestamp: 2023-05-27T06:45:32Z Generation: 2 Resource Version: 19780077 UID: f4f60a3b-4bb2-4e12-8748-d3b310d9c8e5 Spec: Default: Iap: Client ID: 441323991697-luotsrnpboij65ebfr13hlcpm5a4heke.apps.googleusercontent.com Enabled: true oauth2ClientSecret: Name: my-iap-secret Target Ref: Group: Kind: Service Name: lb-service Status: Conditions: Last Transition Time: 2023-05-27T06:48:25Z Message: Reason: Attached Status: True Type: Attached Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ADD 46m sc-gateway-controller default/backend-policy Normal SYNC 44s (x15 over 43m) sc-gateway-controller Application of GCPBackendPolicy "default/backend-policy" was a success
 
Configurar o tempo limite do serviço de back-end
Nesta seção, descrevemos uma funcionalidade disponível nos clusters do GKE que executam a versão 1.24 ou posterior.
O manifesto GCPBackendPolicy a seguir especifica um
tempo limite do serviço de back-end
de 40 segundos. O campo timeoutSec tem como padrão 30 segundos.
Serviço
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    # Backend service timeout, in seconds, for the load balancer. The default
    # value is 30.
    timeoutSec: 40
  # Attach to a Service in the cluster.
  targetRef:
    group: ""
    kind: Service
    name: lb-service
Serviço em vários clusters
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    timeoutSec: 40
  # Attach to a multi-cluster Service by referencing the ServiceImport.
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service
Configurar a seleção de back-end usando GCPBackendPolicy
O modo de balanceamento CUSTOM_METRICS no GCPBackendPolicy permite configurar métricas personalizadas específicas que influenciam como os serviços de back-end dos balanceadores de carga distribuem o tráfego. Esse modo permite o balanceamento de carga com base em métricas personalizadas definidas e informadas pelos back-ends de aplicativos.
Para mais informações, consulte Gerenciamento de tráfego com balanceamento de carga personalizado baseado em métricas.
A matriz customMetrics[], no campo backends[], contém os seguintes campos:
- name: especifica o nome definido pelo usuário da métrica personalizada.
- maxUtilization: define a meta ou a utilização máxima para essa métrica. O intervalo válido é [0, 100].
- dryRun: um campo booleano. Quando verdadeiro, os relatórios de dados de métricas são enviados ao Cloud Monitoring, mas não influenciam as decisões de balanceamento de carga.
Exemplo
O exemplo a seguir mostra um manifesto GCPBackendPolicy que configura métricas personalizadas para seleção de back-end e roteamento no nível do endpoint.
- Salve o seguinte manifesto como - my-backend-policy.yaml:- kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy namespace: team-awesome spec: # Attach to the super-service Service. targetRef: kind: Service name: super-service default: backends: # Configuration for all locations. - location: "*" # Use the rate balancing mode for the load balancer. balancingMode: RATE # Maximum number of requests per second for each endpoint. maxRatePerEndpoint: 9000 # Configuration for us-central1-a - location: us-central1-a # maxRatePerEndpoint: 9000 inherited from the * configuration. # Use the custom metrics balancing mode for the load balancer. balancingMode: CUSTOM_METRICS # Configure the custom metrics for the load balancer to use. customMetrics: - name: gpu-load maxUtilization: 100 # value ranges from 0 to 100 and maps to the floating pointrange [0.0, 1.0] dryRun: false
- Aplique o manifesto ao cluster: - kubectl apply -f my-backend-policy.yaml
O balanceador de carga distribui o tráfego com base no modo de balanceamento RATE
e na métrica personalizada gpu-load.
Configurar o roteamento no nível do endpoint com GCPTrafficDistributionPolicy
A configuração GCPTrafficDistributionPolicy configura o algoritmo de balanceamento de carga para
escolha de endpoints em um back-end. Quando você seleciona WEIGHTED_ROUND_ROBIN, o balanceador de carga usa pesos derivados de métricas informadas (incluindo métricas personalizadas) para distribuir o tráfego a instâncias ou endpoints individuais.
O campo WEIGHTED_ROUND_ROBIN localityLbPolicy do recurso GCPTrafficDistributionPolicy especifica um algoritmo de balanceamento de carga para selecionar instâncias ou endpoints individuais em um back-end. Quando você usa esse algoritmo, a política utiliza métricas personalizadas para calcular ponderações para a atribuição de carga.
A matriz customMetrics[] na configuração GCPTrafficDistributionPolicy contém os seguintes campos:
- name: especifica o nome definido pelo usuário da métrica personalizada.
- dryRun: um campo booleano. Quando é "true", os dados de métricas são enviados ao Cloud Monitoring, mas não influenciam o balanceamento de carga.
Para mais informações, consulte Gerenciamento de tráfego com balanceamento de carga personalizado baseado em métricas.
Exemplo
O exemplo a seguir mostra um manifesto GCPTrafficDistributionPolicy que
configura o roteamento no nível do endpoint usando o algoritmo de balanceamento de carga WEIGHTED_ROUND_ROBIN
e métricas personalizadas.
- Salve o seguinte manifesto de amostra como - GCPTrafficDistributionPolicy.yaml:- apiVersion: networking.gke.io/v1 kind: GCPTrafficDistributionPolicy metadata: name: echoserver-v2 namespace: team1 spec: targetRefs: # Attach to the echoserver-v2 Service in the cluster. - kind: Service group: "" name: echoserver-v2 default: # Use custom metrics to distribute traffic across endpoints. localityLbAlgorithm: WEIGHTED_ROUND_ROBIN # Configure metrics from an ORCA load report to use for traffic # distribution. customMetrics: - name: orca.named_metrics.bescm11 dryRun: false - name: orca.named_metrics.bescm12 dryRun: true
- Aplique o manifesto ao cluster: - kubectl apply -f GCPTrafficDistributionPolicy.yaml
O balanceador de carga distribui o tráfego para endpoints com base no algoritmo WEIGHTED_ROUND_ROBIN e usando as métricas personalizadas fornecidas.
Configurar a afinidade da sessão
Nesta seção, descrevemos uma funcionalidade disponível nos clusters do GKE que executam a versão 1.24 ou posterior.
É possível configurar a afinidade da sessão com base nos seguintes critérios:
- Endereço IP do cliente
- Cookie gerado
Quando você define a afinidade da sessão
para o serviço, a configuração localityLbPolicy do gateway é definida como MAGLEV.
Quando você remove uma configuração de afinidade da sessão de GCPBackendPolicy,
o gateway reverte a configuração localityLbPolicy para o valor padrão, ROUND_ROBIN.
O manifesto GCPBackendPolicy a seguir especifica uma afinidade de sessão com base no
endereço IP do cliente:
Serviço
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    # On a best-effort basis, send requests from a specific client IP address
    # to the same backend. This field also sets the load balancer locality
    # policy to MAGLEV. For more information, see
    # https://cloud.google.com/load-balancing/docs/backend-service#lb-locality-policy
    sessionAffinity:
      type: CLIENT_IP
  targetRef:
    group: ""
    kind: Service
    name: lb-service
Serviço em vários clusters
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    # On a best-effort basis, send requests from a specific client IP address
    # to the same backend. This field also sets the load balancer locality
    # policy to MAGLEV. For more information, see
    # https://cloud.google.com/load-balancing/docs/backend-service#lb-locality-policy
    sessionAffinity:
      type: CLIENT_IP
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service
O manifesto GCPBackendPolicy a seguir especifica uma afinidade de sessão com base em um
cookie gerado
e configura o TTL de cookies como 50 segundos:
Serviço
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    # Include an HTTP cookie in the Set-Cookie header of the response.
    # This field also sets the load balancer locality policy to MAGLEV. For more
    # information, see
    # https://cloud.google.com/load-balancing/docs/l7-internal#generated_cookie_affinity.
    sessionAffinity:
      type: GENERATED_COOKIE
      cookieTtlSec: 50  # The cookie expires in 50 seconds.
  targetRef:
    group: ""
    kind: Service
    name: lb-service
Serviço em vários clusters
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    # Include an HTTP cookie in the Set-Cookie header of the response.
    # This field also sets the load balancer locality policy to MAGLEV. For more
    # information, see
    # https://cloud.google.com/load-balancing/docs/l7-internal#generated_cookie_affinity.
    sessionAffinity:
      type: GENERATED_COOKIE
      cookieTtlSec: 50  # The cookie expires in 50 seconds.
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service
É possível usar os seguintes valores para o campo sessionAffinity.type:
- CLIENT_IP
- GENERATED_COOKIE
- NONE
Configurar o tempo limite de diminuição da conexão
Nesta seção, descrevemos uma funcionalidade disponível nos clusters do GKE que executam a versão 1.24 ou posterior.
É possível configurar o
tempo limite de diminuição da conexão
usando GCPBackendPolicy. O tempo limite de diminuição da conexão é o tempo, em segundos, de
espera pela redução das conexões. A duração do tempo limite pode ser de 0 a 3.600 segundos.
O valor padrão é 0, o que também desativa a diminuição da conexão.
O manifesto GCPBackendPolicy a seguir especifica um tempo limite de diminuição da conexão
de 60 segundos:
Serviço
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    connectionDraining:
      drainingTimeoutSec: 60
  targetRef:
    group: ""
    kind: Service
    name: lb-service
Serviço em vários clusters
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    connectionDraining:
      drainingTimeoutSec: 60
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service
Durante o tempo limite especificado, o GKE aguarda a conclusão das solicitações existentes para o back-end removido. O balanceador de carga não envia novas solicitações para o back-end removido. Depois que o tempo limite é alcançado, o GKE fecha todas as conexões restantes com o back-end.
Geração de registros de acesso HTTP
Nesta seção, descrevemos uma funcionalidade disponível nos clusters do GKE que executam a versão 1.24 ou posterior.
Por padrão:
- O controlador de gateway registra todas as solicitações HTTP de clientes para o Cloud Logging.
- A taxa de amostragem é 1.000.000, o que significa que todas as solicitações são registradas.
- Nenhum campo opcional é registrado.
É possível desativar a geração de registros de acesso no gateway usando um GCPBackendPolicy de três maneiras:
- Você pode deixar a seção GCPBackendPolicysemlogging.
- Você também pode definir logging.enabledcomofalse.
- Você pode definir logging.enabledcomotrueelogging.sampleRatecomo0
Também é possível configurar a taxa de amostragem da geração de registros de acesso e uma lista de campos opcionais, por exemplo, "tls.cipher" ou "orca_load_report".
Para ativar a geração de registros dos campos opcionais:
- Defina logging.OptionalModecomoCUSTOM.
- Forneça a lista de campos opcionais a serem registrados em logging.optionalFields. Consulte Logging e Monitoring para ver a lista de campos compatíveis.
É possível desativar o registro dos campos opcionais de duas maneiras:
- Você pode remover todas as entradas de logging.optionalFields.
- Você pode definir logging.OptionalModecomoEXCLUDE_ALL_OPTIONAL.
O manifesto GCPBackendPolicy a seguir modifica a taxa de amostragem padrão da geração de registros de acesso e a define como 50% das solicitações HTTP. O manifesto também ativa o registro de dois campos opcionais para um determinado recurso de serviço:
Serviço
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    # Access logging configuration for the load balancer.
    logging:
      enabled: true
      # Log 50% of the requests. The value must be an integer between 0 and
      # 1000000. To get the proportion of requests to log, GKE
      # divides this value by 1000000.
      sampleRate: 500000
      # Log specific optional fields.
      optionalMode: CUSTOM
      optionalFields:
      - tls.cipher
      - orca_load_report.cpu_utilization
  targetRef:
    group: ""
    kind: Service
    name: lb-service
Serviço em vários clusters
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: my-backend-policy
  namespace: lb-service-namespace
spec:
  default:
    # Access logging configuration for the load balancer.
    logging:
      enabled: true
      # Log 50% of the requests. The value must be an integer between 0 and
      # 1000000. To get the proportion of requests to log, GKE
      # divides this value by 1000000.
      sampleRate: 500000
      # Log specific optional fields.
      optionalMode: CUSTOM
      optionalFields:
      - tls.cipher
      - orca_load_report.cpu_utilization
  targetRef:
    group: net.gke.io
    kind: ServiceImport
    name: lb-service
Esse manifesto tem os seguintes campos:
- enable: true: ativa explicitamente a geração de registros de acesso. Os registros ficam disponíveis no Logging.
- sampleRate: 500000: especifica que 50% dos pacotes são registrados. É possível usar um valor entre 0 e 1.000.000. O GKE converte esse valor em um valor com ponto flutuante no intervalo [0, 1] ao dividir por 1.000.000. Esse campo só é relevante se- enableestiver definido como- true.- sampleRateé um campo opcional, mas, se configurado,- enable: truetambém precisa ser definido. Se- enableestiver definido como- truee- sampleRatenão for informado, o GKE define- enablecomo- false.
- optionalMode: CUSTOM: especifica que um conjunto de- optionalFieldsdeve ser incluído nas entradas de registro.
- optionalFields: tls.cipher, orca_load_report.cpu_utilization: especifica que as entradas de registro precisam incluir o nome da criptografia usada para o handshake de TLS e a utilização da CPU do serviço, sempre que estiverem disponíveis.
Configurar o escalonamento automático baseado em tráfego para seu gateway de cluster único
Verifique se o cluster do GKE está executando a versão 1.31.1-gke.2008000 ou mais recente.
Para ativar o escalonamento automático baseado em tráfego e o balanceamento de carga baseado em capacidade em um gateway de cluster único, configure a capacidade do serviço. A capacidade de serviço é a capacidade de especificar a quantidade de capacidade de tráfego que um serviço pode receber antes que os pods sejam escalonados automaticamente ou que o tráfego ultrapasse outros clusters disponíveis.
Para configurar a capacidade do serviço, crie um serviço e um
GCPBackendPolicy associado. O manifesto GCPBackendPolicy usa o campo maxRatePerEndpoint, que define um valor máximo de solicitações por segundo (RPS) por pod em um serviço. O manifesto GCPBackendPolicy a seguir define um RPS máximo de 10:
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
  name: store
spec:
  default:
    maxRatePerEndpoint: 10
  targetRef:
    group: ""
    kind: Service
    name: store
Para saber mais sobre o escalonamento automático baseado em tráfego, consulte Escalonamento automático baseado no tráfego do balanceador de carga.
Solução de problemas
Vários GCPBackendPolicy anexados ao mesmo Service
Sintoma:
A condição de status a seguir pode ocorrer quando você anexa um GCPBackendPolicy
a um Service ou um ServiceImport:
status:
  conditions:
    - lastTransitionTime: "2023-09-26T20:18:03Z"
      message: conflicted with GCPBackendPolicy "[POLICY_NAME]" of higher precedence, hence not applied
      reason: Conflicted
      status: "False"
      type: Attached
Motivo:
Essa condição de status indica que você está tentando aplicar um segundo GCPBackendPolicy
a um Service ou ServiceImport que já tem um GCPBackendPolicy anexado.
Vários GCPBackendPolicy anexados ao mesmo Service ou ServiceImport não são compatíveis com o gateway do GKE. Consulte Restrições e limitações para mais detalhes.
Alternativa:
Defina um único GCPBackendPolicy que inclua todas as configurações personalizadas e
anexe-o ao seu Service ou ServiceImport.
Política de segurança do Cloud Armor não encontrada
Sintoma:
A seguinte mensagem de erro pode aparecer quando você ativa o Cloud Armor em um gateway regional:
Invalid value for field 'resource': '{
"securityPolicy":"projects/123456789/regions/us-central1/securityPolicies/<policy_name>"}'.
The given security policy does not exist.
Motivo:
A mensagem de erro indica que a política de segurança regional especificada do Cloud Armor não existe no seu projeto Google Cloud .
Alternativa:
Crie uma política de segurança do Cloud Armor regional no projeto e faça referência a ela no GCPBackendPolicy.
A seguir
- Saiba como implantar um gateway.
- Saiba mais sobre o controlador de gateway.
- Saiba como fazer referência a um gateway em um recurso.
- Consulte a referência da API Policy Types.
- Consulte as definições de tipo de API.