Esta página mostra como configurar o equilibrador de carga que o Google Kubernetes Engine (GKE) cria quando implementa um gateway num cluster do GKE.
Quando implementa um Gateway, a configuração GatewayClass determina que equilibrador de carga o GKE cria. Este equilibrador de carga gerido está pré-configurado com predefinições que pode modificar através de uma política.
Pode personalizar os recursos do Gateway para se adaptarem aos requisitos da sua infraestrutura ou aplicação anexando políticas a Gateways, serviços ou ServiceImports. Depois de aplicar ou modificar uma política, não precisa de eliminar nem recriar os recursos de gateway, rota ou serviço. A política é processada pelo controlador de gateway e o recurso de balanceamento de carga subjacente é (re)configurado de acordo com a (nova) política.
Antes de começar
Antes de começar, certifique-se de que realizou as seguintes tarefas:
- Ative a API Google Kubernetes Engine. Ative a API Google Kubernetes Engine
- Se quiser usar a CLI gcloud para esta tarefa,
instale-a e, em seguida,
inicialize-a. Se instalou anteriormente a CLI gcloud, execute
gcloud components update
para obter a versão mais recente.
- Certifique-se de que tem um cluster do Autopilot ou Standard existente. Para criar um novo cluster, consulte o artigo Crie um cluster do Autopilot.
Requisitos do GKE Gateway Controller
- A API Gateway é suportada apenas em clusters nativos de VPC.
- Se estiver a usar as GatewayClasses internas, tem de ativar uma sub-rede apenas de proxy.
- O seu cluster tem de ter o suplemento
HttpLoadBalancing
ativado. - Se estiver a usar o Istio, tem de atualizar o Istio para uma das seguintes versões:
- 1.15.2 ou posterior
- 1.14.5 ou posterior
- 1.13.9 ou posterior.
- Se estiver a usar a VPC partilhada, no projeto anfitrião, tem de atribuir a função
Compute Network User
à conta de serviço do GKE para o projeto de serviço.
Restrições e limitações
Além das restrições e limitações do controlador do GKE Gateway, aplicam-se as seguintes limitações especificamente às políticas aplicadas nos recursos do Gateway:
Os recursos
GCPGatewayPolicy
só podem ser anexados a umgateway.networking.k8s.io
Gateway
.Os recursos
GCPGatewayPolicy
têm de existir no mesmo espaço de nomes que o recurso de destinoGateway
.Quando usar um gateway de cluster único, os recursos
GCPBackendPolicy
eHealthCheckPolicy
têm de fazer referência a um recursoService
.Quando usar um gateway de vários clusters, os recursos
GCPBackendPolicy
eHealthCheckPolicy
têm de fazer referência a um recursoServiceImport
.Só pode anexar um
GCPBackendPolicy
a um serviço de cada vez. Quando são criadas duas políticasGCPBackendPolicy
que segmentam o mesmoService
ouServiceImport
, a política mais antiga tem precedência e a segunda não é anexada.As políticas hierárquicas não são suportadas com o GKE Gateway.
HealthCheckPolicy
eGCPBackendPolicy
têm de existir no mesmo espaço de nomes que o recursoService
ouServiceImport
de destino.Os recursos
GCPBackendPolicy
eHealthCheckPolicy
estão estruturados de forma a poderem referenciar apenas um serviço de back-end.GCPBackendPolicy
não suporta as opçõesHEADER_FIELD
nemHTTP_COOKIE
para afinidade de sessão.
Configure o acesso global para o seu gateway interno regional
Esta secção descreve uma funcionalidade disponível em clusters do GKE com a versão 1.24 ou posterior.
Para ativar o acesso global com o seu gateway interno, anexe uma política ao recurso do gateway.
O manifesto GCPGatewayPolicy
seguinte 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
Configure a região para o gateway de vários clusters
Esta secção descreve uma funcionalidade disponível em clusters do GKE com a versão 1.30.3-gke.1225000 ou posterior.
Se a sua frota tiver clusters em várias regiões, pode ter de implementar gateways regionais em diferentes regiões para vários exemplos de utilização, por exemplo, redundância entre regiões, baixa latência e soberania dos dados. No cluster de configuração do gateway de vários clusters, pode especificar a região na qual quer implementar os gateways regionais. Se não especificar uma região, a região predefinida é a da região do cluster de configuração.
Para configurar uma região para o seu gateway de vários clusters, use o campo region
no GCPGatewayPolicy
. No exemplo seguinte, 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
Configure políticas SSL para proteger o tráfego do cliente para o equilibrador de carga
Esta secção descreve uma funcionalidade disponível em clusters do GKE com a versão 1.24 ou posterior.
Para proteger o tráfego do cliente para o equilibrador de carga, configure a política SSL adicionando o nome da sua política ao GCPGatewayPolicy
. Por predefinição, o Gateway não tem nenhuma política SSL definida e anexada.
Certifique-se de que cria uma política SSL
antes de fazer referência à política no seu GCPGatewayPolicy
.
O seguinte manifesto GCPGatewayPolicy
especifica uma política de segurança denominada
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
Configure verificações de funcionamento
Esta secção descreve uma funcionalidade disponível em clusters do GKE com a versão 1.24 ou posterior.
Por predefinição, para serviços de back-end que usam os protocolos de aplicação HTTP
ou kubernetes.io/h2c
, a verificação de estado é do tipo HTTP
. Para o protocolo HTTPS
, a verificação de estado predefinida é do tipo HTTPS
. Para o protocolo HTTP2
, a verificação de estado predefinida é do tipo HTTP2
.
Pode usar um HealthCheckPolicy
para controlar as definições de verificação de funcionamento do balanceador de carga. Cada tipo de verificação de estado (http
, https
, grpc
, http2
e tcp
) tem parâmetros que pode definir. Google Cloud
cria uma verificação de estado única para cada serviço de back-end para cada serviço do GKE.
Para que o equilibrador de carga funcione normalmente, pode ter de configurar um
HealthCheckPolicy
personalizado para o equilibrador de carga se o caminho da verificação de estado não for o "/" padrão. Esta configuração também é necessária se o caminho exigir cabeçalhos especiais ou se precisar de ajustar os parâmetros da verificação de estado. Por exemplo, se o caminho do pedido predefinido for "/", mas o seu serviço não estiver acessível nesse caminho do pedido e, em alternativa, usar "/health" para comunicar o respetivo estado, tem de configurar requestPath
no seu HealthCheckPolicy
em conformidade.
O manifesto HealthCheckPolicy
seguinte mostra todos os campos disponíveis quando
configura uma política de verificação de estado:
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 o seguinte:
INTERVAL
: especifica o check-interval>, em segundos, para cada verificador de verificação de estado. Este é o tempo desde o início da verificação de um verificador até ao início da respetiva verificação seguinte. Se omitir este parâmetro, a predefinição é 15 segundos se não for especificado nenhumHealthCheckPolicy
e 5 segundos quando é especificado umHealthCheckPolicy
sem valorcheckIntervalSec
. Google Cloud Para mais informações, consulte o artigo Várias sondagens e frequência.TIMEOUT
: especifica o tempo que Google Cloud aguarda uma resposta a uma sondagem. O valor deTIMEOUT
tem de ser inferior ou igual aoINTERVAL
. As unidades são segundos. Cada teste requer um código de resposta HTTP 200 (OK) a ser enviado antes do limite de tempo do teste.HEALTHY_THRESHOLD
eUNHEALTHY_THRESHOLD
: especifica o número de tentativas de ligação sequenciais que têm de ser bem-sucedidas ou falhar, para, pelo menos, uma sonda, para alterar o estado de saúde de saudável para não saudável ou de não saudável para saudável. Se omitir um destes parâmetros, a Google Cloud predefinição é 2.PROTOCOL
: especifica um protocolo usado pelos sistemas de sondagem para a verificação do estado. Para mais informações, consulte os 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 o registo está ativado ou desativado.PORT_SPECIFICATION
: especifica se a verificação de estado usa uma porta fixa (USE_FIXED_PORT
), uma porta com nome (USE_NAMED_PORT
) ou uma porta de serviço (USE_SERVING_PORT
). Se não for especificado, a verificação de estado segue o comportamento especificado no campoport
. Seport
não for especificado, este campo tem a predefiniçãoUSE_SERVING_PORT
.PORT
: Uma HealthCheckPolicy só suporta a especificação da porta de verificação de estado do equilibrador de carga através de um número de porta. Se omitir este parâmetro, a Google Cloud predefinição é 80. Uma vez que o balanceador de carga envia sondagens diretamente para o endereço IP do pod, deve selecionar uma porta que corresponda a umcontainerPort
de um pod de serviço, mesmo que ocontainerPort
seja referenciado por umtargetPort
do serviço. Não está limitado aocontainerPorts
referenciado pelotargetPort
de um serviço.HOST
: o valor do cabeçalho do anfitrião no pedido de verificação do estado. Este valor usa a definição da RFC 1123 de um nome de anfitrião, exceto que não são permitidos endereços IP numéricos. Se não for especificado ou for deixado em branco, este valor é predefinido como o endereço IP da verificação de estado.REQUEST
: especifica os dados da aplicação a enviar após o estabelecimento da ligação TCP. Se não for especificado, o valor é predefinido como vazio. Se o pedido e a resposta estiverem vazios, a ligação estabelecida, por si só, indica o estado de funcionamento. Os dados do pedido só podem estar no formato ASCII.REQUEST_PATH
: especifica o request-path do pedido de verificação de estado. Se não for especificado ou for deixado vazio, o fuso horário predefinido é/
.RESPONSE
: especifica os bytes a comparar com o início dos dados de resposta. Se não for especificado ou for deixado em branco, o GKE interpreta qualquer resposta como saudável. Os dados de resposta só podem ser ASCII.PROXY_HEADER
: especifica o tipo de cabeçalho proxy. Pode usar oNONE
ou oPROXY_V1
. A predefinição éNONE
.GRPC_SERVICE_NAME
: um nome opcional do serviço gRPC. Omita este campo para especificar todos os serviços.
Para mais informações sobre os campos HealthCheckPolicy, consulte a healthChecks
referência.
Configure a política de segurança do back-end do Cloud Armor para proteger os seus serviços de back-end
Esta secção descreve uma funcionalidade disponível em clusters do GKE com a versão 1.24 ou posterior.
Configure a política de segurança do back-end do Cloud Armor adicionando o nome da
sua política de segurança ao GCPBackendPolicy
para proteger os serviços de back-end.
Por predefinição, a gateway não tem nenhuma política de segurança de back-end do Cloud Armor definida e anexada.
Certifique-se de que cria uma política de segurança de back-end do Cloud Armor antes de fazer referência à política no seu GCPBackendPolicy
. Se estiver a ativar um gateway regional, tem de criar uma política de segurança de back-end do Cloud Armor regional.
O manifesto GCPBackendPolicy
seguinte especifica uma política de segurança do back-end
denominada 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
Configure o IAP
Esta secção descreve uma funcionalidade disponível em clusters do GKE com a versão 1.24 ou posterior.
O Identity-Aware Proxy (IAP) aplica políticas de controlo de acesso aos serviços de back-end associados a uma HTTPRoute. Com esta aplicação, apenas os utilizadores autenticados ou as aplicações com a função de gestão de identidade e de acesso (IAM) correta atribuída podem aceder a estes serviços de back-end.
Por predefinição, não existe nenhuma IAP aplicada aos seus serviços de back-end. Tem de configurar explicitamente a IAP num GCPBackendPolicy
.
Para configurar o IAP com o Gateway, faça o seguinte:
Ative o IAP para o GKE Não configure o back-end (Configurar BackendConfig) porque
BackendConfig
só é válido no caso de uma implementação do Ingress.Crie um segredo para a sua IAP:
Na Google Cloud consola, aceda à página Credenciais:
Clique no nome do cliente e transfira o ficheiro do cliente OAuth.
No ficheiro do cliente OAuth, copie o segredo OAuth para a área de transferência.
Cria um ficheiro denominado
iap-secret.txt
.Cole o segredo OAuth no ficheiro
iap-secret.txt
através do 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 de IAP que faz referência a um segredo:
Crie o seguinte
GCPBackendPolicy
manifesto, substitua osSECRET_NAME
eCLIENT_ID
, respetivamente. Guarde o manifesto comobackend-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
Valide a configuração:
Confirme que a política foi aplicada após criar o seu
GCPBackendPolicy
com compras na app:kubectl get gcpbackendpolicy
O resultado é semelhante ao seguinte:
NAME AGE backend-policy 45m
Para ver mais detalhes, use o comando describe:
kubectl describe gcpbackendpolicy
O resultado é semelhante ao seguinte:
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
Configure o limite de tempo do serviço de back-end
Esta secção descreve uma funcionalidade disponível em clusters do GKE com a versão 1.24 ou posterior.
O manifesto seguinte especifica um período de tempo limite do serviço de back-end de 40 segundos.GCPBackendPolicy
O campo timeoutSec
tem como predefiniçã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
Configure a seleção de back-end com GCPBackendPolicy
O CUSTOM_METRICS
modo de equilíbrioGCPBackendPolicy
permite-lhe configurar métricas personalizadas específicas que influenciam a forma como os serviços de back-end dos balanceadores de carga distribuem o tráfego. Este modo de equilíbrio permite o equilíbrio de carga com base em métricas personalizadas que define e que são comunicadas pelos back-ends da aplicação.
Para mais informações, consulte o artigo Gestão de tráfego com equilíbrio de carga baseado em métricas personalizadas.
A matriz customMetrics[]
, no campo backends[]
, contém os seguintes campos:
name
: especifica o nome definido pelo utilizador da métrica personalizada.maxUtilization
: define a utilização alvo ou máxima para esta métrica. O intervalo válido é [0, 100].dryRun
: um campo booleano. Quando é verdadeiro, os dados das métricas são comunicados ao Cloud Monitoring, mas não influenciam as decisões de equilíbrio de carga.
Exemplo
O exemplo seguinte mostra um manifesto GCPBackendPolicy
que configura métricas personalizadas para a seleção de back-end e o encaminhamento ao nível do ponto final.
Guarde 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 RATE
modo de balanceamento
e na métrica gpu-load
personalizada.
Configure o encaminhamento ao nível do ponto final com a GCPTrafficDistributionPolicy
O GCPTrafficDistributionPolicy
configura o algoritmo de balanceamento de carga para a seleção de pontos finais num back-end. Quando seleciona WEIGHTED_ROUND_ROBIN
, o balanceador de carga usa ponderações derivadas de métricas comunicadas (incluindo métricas personalizadas) para distribuir o tráfego por instâncias ou pontos finais individuais.
O campo WEIGHTED_ROUND_ROBIN localityLbPolicy
do recurso GCPTrafficDistributionPolicy
especifica um algoritmo de equilíbrio de carga para selecionar instâncias ou pontos finais individuais num back-end. Quando usa este algoritmo, a política usa 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 utilizador da métrica personalizada.dryRun
: um campo booleano. Quando é verdadeiro, os dados de métricas são comunicados ao Cloud Monitoring, mas não influenciam o equilíbrio de carga.
Para mais informações, consulte o artigo Gestão de tráfego com equilíbrio de carga baseado em métricas personalizadas.
Exemplo
O exemplo seguinte mostra um manifesto GCPTrafficDistributionPolicy
que
configura o encaminhamento ao nível do ponto final usando o algoritmo de
equilíbrio de carga WEIGHTED_ROUND_ROBIN
e métricas personalizadas.
Guarde o seguinte manifesto de exemplo 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 os pontos finais com base no
WEIGHTED_ROUND_ROBIN
algoritmo e usando as métricas personalizadas fornecidas.
Configure a afinidade de sessão
Esta secção descreve uma funcionalidade disponível em clusters do GKE com a versão 1.24 ou posterior.
Pode configurar a afinidade de sessão com base nos seguintes critérios:
- Endereço IP do cliente
- Cookie gerado
Quando configura a afinidade de sessão para o seu serviço, a definição localityLbPolicy
do gateway é definida como MAGLEV
.
Quando remove uma configuração de afinidade de sessão de GCPBackendPolicy
, o gateway reverte a definição localityLbPolicy
para o valor predefinido, ROUND_ROBIN
.
O manifesto GCPBackendPolicy
seguinte 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
seguinte especifica uma afinidade de sessão baseada num
cookie gerado
e configura o TTL dos cookies para 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
Pode usar os seguintes valores para o campo sessionAffinity.type
:
CLIENT_IP
GENERATED_COOKIE
NONE
Configure o limite de tempo da drenagem da ligação
Esta secção descreve uma funcionalidade disponível em clusters do GKE com a versão 1.24 ou posterior.
Pode configurar o
tempo limite de esgotamento da ligação
através de GCPBackendPolicy
. O limite de tempo de drenagem da ligação é o tempo, em segundos, de espera pela drenagem das ligações. A duração do limite de tempo pode ser de 0 a 3600 segundos.
O valor predefinido é 0, o que também desativa a drenagem de ligações.
O manifesto seguinte GCPBackendPolicy
especifica um limite de tempo de esgotamento da ligaçã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 a duração especificada do tempo limite, o GKE aguarda a conclusão dos pedidos existentes ao back-end removido. O balanceador de carga não envia novos pedidos ao back-end removido. Quando a duração do limite de tempo é atingida, o GKE fecha todas as ligações restantes ao back-end.
Registo de acesso HTTP
Esta secção descreve uma funcionalidade disponível em clusters do GKE com a versão 1.24 ou posterior.
Por predefinição:
- O controlador do gateway regista todos os pedidos HTTP dos clientes no Cloud Logging.
- A taxa de amostragem é de 1 000 000, o que significa que todos os pedidos são registados.
- Nenhum campo opcional é registado.
Pode desativar o registo de acesso no seu gateway através de um GCPBackendPolicy
de três formas:
- Pode deixar a secção
GCPBackendPolicy
semlogging
- Pode definir
logging.enabled
comofalse
- Pode definir
logging.enabled
comotrue
elogging.sampleRate
como0
Também pode configurar a taxa de amostragem do registo de acesso e uma lista de campos opcionais, por exemplo, "tls.cipher" ou "orca_load_report".
Para ativar o registo dos campos opcionais:
- Defina
logging.OptionalMode
comoCUSTOM
. - Indique a lista de campos opcionais a registar em
logging.optionalFields
. Consulte o artigo sobre registo e monitorização para ver a lista de campos suportados.
Pode desativar o registo dos campos opcionais de duas formas:
- Pode remover todas as entradas de
logging.optionalFields
. - Pode definir
logging.OptionalMode
comoEXCLUDE_ALL_OPTIONAL
.
O seguinte manifesto GCPBackendPolicy
modifica a taxa de amostragem predefinida do registo de acesso e define-a como 50% dos pedidos HTTP. O manifesto também permite o registo de dois campos opcionais para um determinado recurso Service:
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
Este manifesto tem os seguintes campos:
enable: true
: ativa explicitamente o registo de acesso. Os registos estão disponíveis em Registo.sampleRate: 500000
: especifica que 50% dos pacotes são registados. Pode usar um valor entre 0 e 1 000 000. O GKE converte este valor num valor de vírgula flutuante no intervalo [0, 1] dividindo por 1 000 000. Este campo só é relevante seenable
estiver definido comotrue
.sampleRate
é um campo opcional, mas, se estiver configurado,enable: true
também tem de ser definido. Seenable
estiver definido comotrue
esampleRate
não for fornecido, o GKE defineenable
comofalse
.optionalMode: CUSTOM
: especifica que um conjunto deoptionalFields
deve ser incluído nas entradas do registo.optionalFields: tls.cipher, orca_load_report.cpu_utilization
: especifica que as entradas de registo devem incluir o nome da cifra usada para a negociação TLS e a utilização da CPU do serviço, sempre que estes estiverem disponíveis.
Configure a escala automática baseada no tráfego para o gateway de cluster único
Certifique-se de que o cluster do GKE está a executar a versão 1.31.1-gke.2008000 ou posterior.
Para ativar a escala automática baseada no tráfego e o equilíbrio de carga baseado na capacidade num gateway de cluster único, pode configurar 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 de os pods serem dimensionados automaticamente ou o tráfego transbordar para 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 pedidos por segundo (RPS) por
agrupamento num serviço. O manifesto GCPBackendPolicy
seguinte 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 ajuste de escala automático baseado no tráfego, consulte o artigo Ajuste de escala automático baseado no tráfego do equilibrador de carga.
Resolução de problemas
Vários GCPBackendPolicy
anexados ao mesmo Service
Sintoma:
A seguinte condição de estado pode ocorrer quando anexa um GCPBackendPolicy
a um Service
ou a 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:
Esta condição de estado indica que está a tentar aplicar um segundo GCPBackendPolicy
a um Service
ou ServiceImport
que já tem um GCPBackendPolicy
anexado.
Não é suportado ter vários GCPBackendPolicy
anexados ao mesmo Service
ou ServiceImport
com o GKE Gateway. Consulte a secção Restrições e limitações
para ver mais detalhes.
Solução alternativa:
Configure um único GCPBackendPolicy
que inclua todas as configurações personalizadas e
anexe-o ao seu Service
ou ServiceImport
.
Não foi encontrada a política de segurança do Cloud Armor
Sintoma:
A seguinte mensagem de erro pode aparecer quando ativa o Cloud Armor no 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 do Cloud Armor regional especificada não existe no seu Google Cloud projeto.
Solução alternativa:
Crie uma política de segurança do Cloud Armor regional no seu projeto e faça referência a esta política no seu GCPBackendPolicy
.
O que se segue?
- Saiba como implementar um gateway.
- Saiba mais sobre o controlador de gateway.
- Saiba como fazer referência a um Gateway a partir de um recurso.
- Veja a referência da API Policy Types.
- Veja as definições do tipo de API.