Cette page explique comment configurer l'équilibreur de charge créé par Google Kubernetes Engine (GKE) lorsque vous déployez une ressource Gateway dans un cluster GKE.
Lorsque vous déployez une ressource Gateway, la configuration de GatewayClass détermine l'équilibreur de charge créé par GKE. Cet équilibreur de charge géré est préconfiguré avec des paramètres par défaut que vous pouvez modifier à l'aide d'une règle.
Vous pouvez personnaliser les ressources Gateway pour les adapter aux contraintes de votre infrastructure ou de votre application, en associant des règles à des ressources Gateway, Service ou ServiceImport. Une fois que vous avez appliqué ou modifié une règle, vous n'avez pas besoin de supprimer ni de recréer vos ressources Gateway, Route ou Service. La règle est traitée par le contrôleur Gateway et la ressource d'équilibreur de charge sous-jacente est (re)configurée conformément à la (nouvelle) règle.
Avant de commencer
Avant de commencer, effectuez les tâches suivantes :
- Activez l'API Google Kubernetes Engine. Activer l'API Google Kubernetes Engine
- Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de la dernière version en exécutant la commande
gcloud components update
.
Conditions requises pour le contrôleur GKE Gateway
- Pour l'environnement standard, GKE version 1.24 ou ultérieure.
- Pour Autopilot, la version 1.26 de GKE ou une version ultérieure.
- Google Cloud CLI version 407.0.0 ou ultérieure.
- L'API Gateway n'est compatible qu'avec les clusters de VPC natif.
- Si vous utilisez les GatewayClasses internes, vous devez activer un sous-réseau proxy réservé.
- Le module complémentaire
HttpLoadBalancing
doit être activé sur votre cluster. - Si vous utilisez Istio, vous devez mettre à niveau Istio vers l'une des versions suivantes :
- 1.15.2 ou ultérieure
- 1.14.5 ou ultérieure
- 1.13.9 ou ultérieure
- Si vous utilisez un VPC partagé, vous devez attribuer le rôle
Compute Network User
au compte de service GKE du projet de service dans le projet hôte.
Restrictions et limitations
Outre les restrictions et limitations de GKE Gateway Controller, les limites suivantes concernent spécifiquement les règles appliquées à des ressources Gateway :
Les ressources
GCPGatewayPolicy
ne peuvent être associées qu'à ungateway.networking.k8s.io
Gateway
.Les ressources
GCPGatewayPolicy
doivent exister dans le même espace de noms que la cibleGateway
.Lorsque vous utilisez une seule ressource Gateway de cluster, les ressources
GCPBackendPolicy
etHealthCheckPolicy
doivent faire référence à une ressourceService
.Lorsque vous utilisez une ressource Gateway multicluster, les ressources
GCPBackendPolicy
etHealthCheckPolicy
doivent faire référence à une ressourceServiceImport
.Un seul
GCPBackendPolicy
peut être associé à un service à la fois. Lorsque deux règlesGCPBackendPolicy
sont créées et ciblent la même règleService
ouServiceImport
, la règle la plus ancienne est prioritaire et la deuxième ne peut pas être associée.Les règles hiérarchiques ne sont pas compatibles avec GKE Gateway.
Les ressources
HealthCheckPolicy
etGCPBackendPolicy
doivent exister dans le même espace de noms que la ressource cibleService
ouServiceImport
.Les ressources
GCPBackendPolicy
etHealthCheckPolicy
sont structurées de manière à ne pouvoir référencer qu'un seul service de backend.GCPBackendPolicy
n'est pas compatible avec les optionsHEADER_FIELD
ouHTTP_COOKIE
pour l'affinité de session.
Configurer l'accès mondial pour votre ressource Gateway interne régionale
Cette section décrit une fonctionnalité disponible sur les clusters GKE exécutant la version 1.24 ou ultérieure.
Pour activer l'accès mondial avec votre ressource Gateway interne, associez une règle à la ressource Gateway.
Le fichier manifeste GCPGatewayPolicy
suivant active la ressource Gateway interne régionale pour un accès mondial :
apiVersion: networking.gke.io/v1
kind: GCPGatewayPolicy
metadata:
name: my-gateway-policy
namespace: default
spec:
default:
allowGlobalAccess: true
targetRef:
group: gateway.networking.k8s.io
kind: Gateway
name: my-gateway
Configurer la région de votre passerelle multicluster
Cette section décrit une fonctionnalité disponible sur les clusters GKE exécutant la version 1.30.3-gke.1225000 ou ultérieure.
Si votre flotte comporte des clusters dans plusieurs régions, vous devrez peut-être déployer des passerelles régionales dans différentes régions pour différents cas d'utilisation, par exemple la redondance interrégionale, la faible latence et la souveraineté des données. Dans votre cluster de configuration de passerelle multicluster, vous pouvez spécifier la région dans laquelle vous souhaitez déployer les passerelles régionales. Si vous ne spécifiez pas de région, la région par défaut est celle du cluster de configuration.
Pour configurer une région pour votre passerelle multicluster, utilisez le champ region
dans GCPGatewayPolicy
. Dans l'exemple suivant, la passerelle est configurée dans la région 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
Configurer des règles SSL pour sécuriser le trafic client vers équilibreur de charge
Cette section décrit une fonctionnalité disponible sur les clusters GKE exécutant la version 1.24 ou ultérieure.
Pour sécuriser le trafic client vers équilibreur de charge, configurez la règle SSL en ajoutant son nom à GCPGatewayPolicy
. Par défaut, aucune règle SSL n'est définie ni associée à la ressource Gateway.
Assurez-vous de créer une règle SSL avant de référencer la règle dans GCPGatewayPolicy
.
Le fichier manifeste GCPGatewayPolicy
suivant spécifie une règle de sécurité nommée 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
Configurer les vérifications d'état
Cette section décrit une fonctionnalité disponible sur les clusters GKE exécutant la version 1.24 ou ultérieure.
Vous pouvez utiliser une règle HealthCheckPolicy
pour contrôler les paramètres de vérification de l'état de l'équilibreur de charge. Chaque type de vérification de l'état'état (http
, https
, grpc
et http2
) possède des paramètres que vous pouvez définir. Google Cloud crée une vérification de l'état unique pour chaque service de backend pour chaque service GKE.
Pour que votre équilibreur de charge fonctionne normalement, vous devrez peut-être configurer une HealthCheckPolicy
personnalisée si le chemin d'accès de la vérification d'état n'est pas le chemin standard "/". Cette configuration est également nécessaire si le chemin d'accès nécessite des en-têtes spéciaux ou si vous devez ajuster les paramètres de vérification d'état. Par exemple, si le chemin de requête par défaut est "/", mais que votre service n'est pas accessible via ce chemin de requête et utilise plutôt "/health" pour signaler son état, vous devez configurer requestPath
dans votre HealthCheckPolicy
en conséquence.
Le fichier manifeste HealthCheckPolicy
suivant affiche tous les champs disponibles lors de la configuration d'une règle de vérification de l'état :
Service
apiVersion: networking.gke.io/v1
kind: HealthCheckPolicy
metadata:
name: lb-healthcheck
namespace: lb-service-namespace
spec:
default:
checkIntervalSec: INTERVAL
timeoutSec: TIMEOUT
healthyThreshold: HEALTHY_THRESHOLD
unhealthyThreshold: UNHEALTHY_THRESHOLD
logConfig:
enabled: ENABLED
config:
type: PROTOCOL
httpHealthCheck:
portSpecification: PORT_SPECIFICATION
port: PORT
portName: PORT_NAME
host: HOST
requestPath: REQUEST_PATH
response: RESPONSE
proxyHeader: PROXY_HEADER
httpsHealthCheck:
portSpecification: PORT_SPECIFICATION
port: PORT
portName: PORT_NAME
host: HOST
requestPath: REQUEST_PATH
response: RESPONSE
proxyHeader: PROXY_HEADER
grpcHealthCheck:
grpcServiceName: GRPC_SERVICE_NAME
portSpecification: PORT_SPECIFICATION
port: PORT
portName: PORT_NAME
http2HealthCheck:
portSpecification: PORT_SPECIFICATION
port: PORT
portName: PORT_NAME
host: HOST
requestPath: REQUEST_PATH
response: RESPONSE
proxyHeader: PROXY_HEADER
targetRef:
group: ""
kind: Service
name: lb-service
Service multicluster
apiVersion: networking.gke.io/v1
kind: HealthCheckPolicy
metadata:
name: lb-healthcheck
namespace: lb-service-namespace
spec:
default:
checkIntervalSec: INTERVAL
timeoutSec: TIMEOUT
healthyThreshold: HEALTHY_THRESHOLD
unhealthyThreshold: UNHEALTHY_THRESHOLD
logConfig:
enabled: ENABLED
config:
type: PROTOCOL
httpHealthCheck:
portSpecification: PORT_SPECIFICATION
port: PORT
portName: PORT_NAME
host: HOST
requestPath: REQUEST_PATH
response: RESPONSE
proxyHeader: PROXY_HEADER
httpsHealthCheck:
portSpecification: PORT_SPECIFICATION
port: PORT
portName: PORT_NAME
host: HOST
requestPath: REQUEST_PATH
response: RESPONSE
proxyHeader: PROXY_HEADER
grpcHealthCheck:
grpcServiceName: GRPC_SERVICE_NAME
portSpecification: PORT_SPECIFICATION
port: PORT
portName: PORT_NAME
http2HealthCheck:
portSpecification: PORT_SPECIFICATION
port: PORT
portName: PORT_NAME
host: HOST
requestPath: REQUEST_PATH
response: RESPONSE
proxyHeader: PROXY_HEADER
targetRef:
group: net.gke.io
kind: ServiceImport
name: lb-service
Remplacez les éléments suivants :
INTERVAL
: spécifie l'intervalle entre deux tests, en secondes, pour chaque vérificateur d'état. Il s'agit du temps écoulé entre le début du test d'un vérificateur et le début du test suivant. Si vous omettez ce paramètre, la valeur par défaut est de 15 secondes si aucuneHealthCheckPolicy
n'est spécifiée, et de 5 secondes lorsqu'uneHealthCheckPolicy
est spécifiée sans valeurcheckIntervalSec
. Google Cloud Pour en savoir plus, consultez la section Vérifications multiples et fréquence de vérification.TIMEOUT
: spécifie la durée pendant laquelleGoogle Cloud attend une réponse à une vérification. La valeur deTIMEOUT
doit être inférieure ou égale à celle deINTERVAL
. Cette valeur est exprimée en secondes. Chaque vérificateur requiert un code de réponse HTTP 200 (OK) avant la fin du délai avant expiration du vérificateur.HEALTHY_THRESHOLD
etUNHEALTHY_THRESHOLD
: spécifie le nombre de tentatives de connexion séquentielles qui doivent réussir ou échouer pour au moins un vérificateur, pour modifier l'état de fonctionnement allant de "opérationnel" à "non opérationnel", ou "non opérationnel" à "opérationnel". Si vous omettez l'un de ces paramètres, la valeur par défaut est 2. Google CloudPROTOCOL
: spécifie un protocole utilisé par les systèmes de vérification pour la vérification de l'état. Pour plus d'informations, consultez les sections Critères de réussite pour HTTP, HTTPS et HTTP/2 et Critères de réussite pour gRPC. Ce paramètre est obligatoire.ENABLED
: indique si la journalisation est activée ou désactivée.PORT_SPECIFICATION
: indique si la vérification d'état utilise un port fixe (USE_FIXED_PORT
), un port nommé (USE_NAMED_PORT
) ou un port de diffusion (USE_SERVING_PORT
). Si cette option n'est pas spécifiée, la vérification de l'état suit le comportement spécifié dans les champsport
etportName
. Si vous ne spécifiez pasport
niportName
, la valeur par défaut de ce champ estUSE_SERVING_PORT
.PORT
: une ressource HealthCheckPolicy n'accepte que la spécification du port de vérification de l'état de l'équilibreur de charge à l'aide d'un numéro de port. Si vous omettez ce paramètre, la valeur par défaut est 80. Google Cloud Étant donné que l'équilibreur de charge envoie directement des vérifications à l'adresse IP du pod, vous devez sélectionner un port correspondant à uncontainerPort
de pods actifs, même sicontainerPort
est référencé par untargetPort
du service. Vous n'êtes pas limité à l'élémentcontainerPorts
référencé par l'élémenttargetPort
d'un service.PORT_NAME
: spécifie le nom du port tel que défini dans InstanceGroup.NamedPort.name. Siport
etportName
sont tous deux définis, Google Cloud prend d'abord la valeurport
.HOST
: valeur de l'en-tête d'hôte dans la requête de vérification d'état. Cette valeur utilise la définition RFC 1123 d'un nom d'hôte, à l'exception du fait que les adresses IP numériques ne sont pas acceptées. Si elle n'est pas spécifiée ou qu'elle est vide, cette valeur est définie par défaut sur l'adresse IP de la vérification d'état.REQUEST_PATH
: spécifie le chemin de requête de vérification d'état. Si aucune valeur n'est spécifiée ou qu'elle est vide, la valeur par défaut est/
.RESPONSE
: spécifie les octets à mettre en correspondance avec le début des données de réponse. Si cette valeur n'est pas spécifiée ou est vide, GKE interprète toute réponse comme étant opérationnelle. Les données de réponse ne peuvent être qu'ASCII.PROXY_HEADER
: spécifie le type d'en-tête du proxy. Vous pouvez utiliserNONE
ouPROXY_V1
. La valeur par défaut estNONE
.GRPC_SERVICE_NAME
: nom facultatif du service gRPC. Omettez ce champ pour spécifier tous les services.
Pour en savoir plus sur les champs HealthCheckPolicy, consultez la documentation de référence sur healthChecks
.
Configurer une règle de sécurité de backend Google Cloud Armor pour sécuriser vos services de backend
Cette section décrit une fonctionnalité disponible sur les clusters GKE exécutant la version 1.24 ou ultérieure.
Configurez la règle de sécurité de backend Google Cloud Armor en ajoutant son nom à GCPBackendPolicy
afin de sécuriser vos services de backend.
Par défaut, aucune règle de sécurité de backend Google Cloud Armor n'est définie ni associée à la ressource Gateway.
Assurez-vous de créer une règle de sécurité de backend Google Cloud Armor avant de référencer la règle dans GCPBackendPolicy
. Si vous activez une passerelle régionale, vous devez créer une stratégie de sécurité de backend Google Cloud Armor régionale.
Le fichier manifeste GCPBackendPolicy
suivant spécifie une règle de sécurité de backend nommée example-security-policy
:
Service
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
securityPolicy: example-security-policy
targetRef:
group: ""
kind: Service
name: lb-service
Service multicluster
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
securityPolicy: example-security-policy
targetRef:
group: net.gke.io
kind: ServiceImport
name: lb-service
Configurer IAP
Cette section décrit une fonctionnalité disponible sur les clusters GKE exécutant la version 1.24 ou ultérieure.
Identity-Aware Proxy (IAP) applique des stratégies de contrôle des accès aux services backend associés à un HTTPRoute. Avec cette mesure d'application, seuls les utilisateurs ou les applications authentifiés disposant du rôle IAM (Identity and Access Management) approprié peuvent accéder à ces services de backend.
Par défaut, aucun service IAP n'est appliqué à vos services de backend. Vous devez configurer explicitement IAP dans un objet GCPBackendPolicy
.
Pour configurer IAP avec Gateway, procédez comme suit :
Activer IAP pour GKE. Ne configurez pas le backend (Configurer BackendConfig), car
BackendConfig
n'est valide que dans le cas d'un déploiement Ingress.Créez un secret pour votre IAP :
Dans la console Google Cloud , accédez à la page Identifiants:
Cliquez sur le nom du client, puis téléchargez le fichier client OAuth.
Dans le fichier client OAuth, copiez le secret OAuth dans le presse-papiers.
Créez un fichier appelé
iap-secret.txt
:Collez le secret OAuth dans le fichier
iap-secret.txt
à l'aide de la commande suivante :echo -n CLIENT_SECRET > iap-secret.txt kubectl create secret generic SECRET_NAME --from-file=key=iap-secret.txt
Pour spécifier une règle IAP faisant référence à un secret, procédez comme suit :
Créez le fichier manifeste
GCPBackendPolicy
suivant, puis remplacezSECRET_NAME
etCLIENT_ID
respectivement. Enregistrez le manifeste sous le nombackend-policy.yaml
:Service
apiVersion: networking.gke.io/v1 kind: GCPBackendPolicy metadata: name: backend-policy spec: default: iap: enabled: true oauth2ClientSecret: name: SECRET_NAME clientID: CLIENT_ID targetRef: group: "" kind: Service name: lb-service
Service multicluster
apiVersion: networking.gke.io/v1 kind: GCPBackendPolicy metadata: name: backend-policy spec: default: iap: enabled: true oauth2ClientSecret: name: SECRET_NAME clientID: CLIENT_ID targetRef: group: net.gke.io kind: ServiceImport name: lb-service
Appliquez le fichier manifeste
backend-policy.yaml
:kubectl apply -f backend-policy.yaml
Vérifiez votre configuration :
Vérifiez que la stratégie a été appliquée après avoir créé le
GCPBackendPolicy
avec IAP :kubectl get gcpbackendpolicy
Le résultat ressemble à ce qui suit :
NAME AGE backend-policy 45m
Pour obtenir plus de détails, utilisez la commande describe :
kubectl describe gcpbackendpolicy
Le résultat ressemble à ce qui suit :
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
Configurer le délai avant expiration du service de backend
Cette section décrit une fonctionnalité disponible sur les clusters GKE exécutant la version 1.24 ou ultérieure.
Le fichier manifeste GCPBackendPolicy
suivant spécifie un délai avant expiration du service de backend de 40 secondes. La valeur par défaut du champ timeoutSec
est de 30 secondes.
Service
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
timeoutSec: 40
targetRef:
group: ""
kind: Service
name: lb-service
Service multicluster
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
timeoutSec: 40
targetRef:
group: net.gke.io
kind: ServiceImport
name: lb-service
Configurer la sélection du backend à l'aide de GCPBackendPolicy
Le mode d'équilibrage CUSTOM_METRICS
dans GCPBackendPolicy
vous permet de configurer des métriques personnalisées spécifiques qui influencent la façon dont les services de backend des équilibreurs de charge distribuent le trafic. Ce mode d'équilibrage permet d'équilibrer la charge en fonction des métriques personnalisées que vous définissez et qui sont signalées par les backends de l'application.
Pour en savoir plus, consultez Gestion du trafic avec l'équilibrage de charge basé sur des métriques personnalisées.
Le tableau customMetrics[]
, dans le champ backends[]
, contient les champs suivants:
name
: spécifie le nom défini par l'utilisateur de la métrique personnalisée.maxUtilization
: définit l'utilisation cible ou maximale pour cette métrique. La plage valide est [0, 100].dryRun
: champ booléen. Si cette valeur est définie sur "true", les données de métrique sont envoyées à Cloud Monitoring, mais n'ont aucune incidence sur les décisions d'équilibrage de charge.
Exemple
L'exemple suivant montre un fichier manifeste GCPBackendPolicy
qui configure des métriques personnalisées pour la sélection du backend et le routage au niveau du point de terminaison.
Enregistrez le manifeste suivant sous le nom
my-backend-policy.yaml
:kind: GCPBackendPolicy apiVersion: networking.gke.io/v1 metadata: name: my-backend-policy namespace: team-awesome spec: targetRef: kind: Service name: super-service default: backends: - location: "*" balancingMode: RATE maxRatePerEndpoint: 9000 - location: us-central1-a # specific block applies to given zone / region only. # maxRatePerEndpoint: 9000 inherited from unnamed balancingMode: CUSTOM_METRICS customMetrics: - name: gpu-load maxUtilization: 100 # value ranges from 0 to 100 and maps to the floating pointrange [0.0, 1.0] dryRun: false
Appliquez le fichier manifeste à votre cluster :
kubectl apply -f my-backend-policy.yaml
L'équilibreur de charge distribue le trafic en fonction du mode d'équilibrage RATE
et de la métrique gpu-load
personnalisée.
Configurer le routage au niveau du point de terminaison avec GCPTrafficDistributionPolicy
GCPTrafficDistributionPolicy
configure l'algorithme d'équilibrage de charge pour la sélection de point de terminaison dans un backend. Lorsque vous sélectionnez WEIGHTED_ROUND_ROBIN
, l'équilibreur de charge utilise des poids dérivés des métriques signalées (y compris les métriques personnalisées) pour répartir le trafic entre les instances ou les points de terminaison individuels.
Le champ WEIGHTED_ROUND_ROBIN localityLbPolicy
de la ressource GCPTrafficDistributionPolicy
spécifie un algorithme d'équilibrage de charge pour sélectionner des instances ou des points de terminaison individuels dans un backend. Lorsque vous utilisez cet algorithme, la règle utilise des métriques personnalisées pour calculer les pondérations de l'attribution de charge.
Le tableau customMetrics[]
de la configuration GCPTrafficDistributionPolicy
contient les champs suivants:
name
: spécifie le nom défini par l'utilisateur de la métrique personnalisée.dryRun
: champ booléen. Lorsque cette valeur est définie sur "true", les données de métriques sont envoyées à Cloud Monitoring, mais n'ont aucune incidence sur l'équilibrage de charge.
Pour en savoir plus, consultez Gestion du trafic avec l'équilibrage de charge basé sur des métriques personnalisées.
Exemple
L'exemple suivant montre un fichier manifeste GCPTrafficDistributionPolicy
qui configure le routage au niveau du point de terminaison à l'aide de l'algorithme d'équilibrage de charge WEIGHTED_ROUND_ROBIN
et de métriques personnalisées.
Enregistrez l'exemple de fichier manifeste suivant sous le nom
GCPTrafficDistributionPolicy.yaml
:apiVersion: networking.gke.io/v1 kind: GCPTrafficDistributionPolicy metadata: name: echoserver-v2 namespace: team1 spec: targetRefs: - kind: Service group: "" name: echoserver-v2 default: localityLbAlgorithm: WEIGHTED_ROUND_ROBIN customMetrics: - name: orca.named_metrics.bescm11 dryRun: false - name: orca.named_metrics.bescm12 dryRun: true
Appliquez le fichier manifeste à votre cluster :
kubectl apply -f GCPTrafficDistributionPolicy.yaml
L'équilibreur de charge distribue le trafic vers les points de terminaison en fonction de l'algorithme WEIGHTED_ROUND_ROBIN
et à l'aide des métriques personnalisées fournies.
Configurer l'affinité de session
Cette section décrit une fonctionnalité disponible sur les clusters GKE exécutant la version 1.24 ou ultérieure.
Vous pouvez configurer l'affinité de session en fonction des critères suivants :
- Adresse IP du client
- Cookie généré
Lorsque vous configurez l'affinité de session pour votre service, le paramètre localityLbPolicy
de la passerelle est défini sur MAGLEV
.
Lorsque vous supprimez une configuration d'affinité de session de GCPBackendPolicy
, la passerelle rétablit la valeur par défaut du paramètre localityLbPolicy
, ROUND_ROBIN
.
Le fichier manifeste GCPBackendPolicy
suivant spécifie une affinité de session basée sur l'adresse IP du client :
Service
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
sessionAffinity:
type: CLIENT_IP
targetRef:
group: ""
kind: Service
name: lb-service
Service multicluster
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
sessionAffinity:
type: CLIENT_IP
targetRef:
group: net.gke.io
kind: ServiceImport
name: lb-service
Le fichier manifeste GCPBackendPolicy
suivant spécifie une affinité de session basée sur un cookie généré et configure la valeur TTL des cookies sur 50 secondes :
Service
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
sessionAffinity:
type: GENERATED_COOKIE
cookieTtlSec: 50
targetRef:
group: ""
kind: Service
name: lb-service
Service multicluster
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
sessionAffinity:
type: GENERATED_COOKIE
cookieTtlSec: 50
targetRef:
group: net.gke.io
kind: ServiceImport
name: lb-service
Vous pouvez utiliser les valeurs suivantes pour le champ sessionAffinity.type
:
CLIENT_IP
GENERATED_COOKIE
NONE
Configurer le délai avant expiration du drainage de connexion
Cette section décrit une fonctionnalité disponible sur les clusters GKE exécutant la version 1.24 ou ultérieure.
Vous pouvez configurer le délai avant expiration du drainage de connexion à l'aide de GCPBackendPolicy
. Le délai avant expiration du drainage de connexion est le délai d'attente, exprimé en secondes, pour le drainage des connexions. La durée de ce délai peut être comprise entre 0 et 3 600 secondes.
La valeur par défaut est 0, ce qui correspond à la désactivation du drainage de connexion.
Le fichier manifeste GCPBackendPolicy
suivant spécifie un délai avant expiration du drainage de connexion de 60 secondes :
Service
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
Service multicluster
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
Pendant la durée spécifiée pour le délai d'expiration, GKE attend la fin des requêtes existantes adressées au backend en cours de suppression. L'équilibreur de charge n'envoie plus de nouvelles requêtes au backend en cours de suppression. Une fois le délai écoulé, GKE ferme toutes les connexions restantes au backend.
Journalisation des accès HTTP
Cette section décrit une fonctionnalité disponible sur les clusters GKE exécutant la version 1.24 ou ultérieure.
Par défaut :
- Le contrôleur Gateway consigne toutes les requêtes HTTP des clients dans Cloud Logging.
- Le taux d'échantillonnage est de 1 000 000, ce qui signifie que toutes les requêtes sont consignées.
- Aucun champ facultatif n'est enregistré.
Vous pouvez désactiver la journalisation des accès sur votre ressource Gateway avec GCPBackendPolicy
de trois manières :
- Vous pouvez laisser
GCPBackendPolicy
sans sectionlogging
. - Vous pouvez définir
logging.enabled
surfalse
. - Vous pouvez définir
logging.enabled
surtrue
etlogging.sampleRate
sur0
.
Vous pouvez également configurer le taux d'échantillonnage des journaux d'accès et une liste de champs facultatifs, par exemple "tls.cipher" ou "orca_load_report".
Pour activer la journalisation des champs facultatifs:
- Définissez
logging.OptionalMode
surCUSTOM
. - Indiquez la liste des champs facultatifs à consigner dans
logging.optionalFields
. Pour obtenir la liste des champs compatibles, consultez la section Journalisation et surveillance.
Vous pouvez désactiver la journalisation des champs facultatifs de deux manières:
- Vous pouvez supprimer toutes les entrées de
logging.optionalFields
. - Vous pouvez définir
logging.OptionalMode
surEXCLUDE_ALL_OPTIONAL
.
Le fichier manifeste GCPBackendPolicy
suivant modifie le taux d'échantillonnage par défaut de la journalisation des accès et le définit sur 50% des requêtes HTTP. Le fichier manifeste active également la journalisation de deux champs facultatifs pour une ressource Service donnée:
Service
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
logging:
enabled: true
sampleRate: 500000
optionalMode: CUSTOM
optionalFields:
- tls.cipher
- orca_load_report.cpu_utilization
targetRef:
group: ""
kind: Service
name: lb-service
Service multicluster
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: my-backend-policy
namespace: lb-service-namespace
spec:
default:
logging:
enabled: true
sampleRate: 500000
optionalMode: CUSTOM
optionalFields:
- tls.cipher
- orca_load_report.cpu_utilization
targetRef:
group: net.gke.io
kind: ServiceImport
name: lb-service
Ce fichier manifeste contient les champs suivants :
enable: true
: active explicitement la journalisation des accès. Les journaux sont disponibles dans Logging.sampleRate: 500000
: indique que 50 % des paquets sont enregistrés. Vous pouvez utiliser une valeur comprise entre 0 et 1 000 000. GKE convertit cette valeur en valeur à virgule flottante comprise dans la plage [0, 1] en divisant cette valeur par 1 000 000. Ce champ n'est pertinent que sienable
est défini surtrue
.sampleRate
est un champ facultatif, mais s'il est configuré,enable: true
doit également être défini. Sienable
est défini surtrue
et quesampleRate
n'est pas fourni, GKE définitenable
surfalse
.optionalMode: CUSTOM
: spécifie qu'un ensemble deoptionalFields
doit être inclus dans les entrées de journal.optionalFields: tls.cipher, orca_load_report.cpu_utilization
: spécifie que les entrées de journal doivent inclure à la fois le nom du chiffrement utilisé pour l'échange TLS et l'utilisation du processeur du service, lorsqu'ils sont disponibles.
Configurer l'autoscaling basé sur le trafic pour votre passerelle à cluster unique
Assurez-vous que votre cluster GKE exécute la version 1.31.1-gke.2008000 ou ultérieure.
Pour activer l'autoscaling basé sur le trafic et l'équilibrage de charge basé sur la capacité dans une passerelle à cluster unique, vous pouvez configurer la capacité de service. La capacité de service est la possibilité de spécifier la capacité de trafic qu'un service peut recevoir avant que les pods ne soient soumis à l'autoscaling ou que le trafic ne déborde pas vers d'autres clusters disponibles.
Pour configurer la capacité de service, créez un service et un GCPBackendPolicy
associé. Le fichier manifeste GCPBackendPolicy
utilise le champ maxRatePerEndpoint
, qui définit une valeur maximale de requêtes par seconde (RPS) par pod dans un service. Le fichier manifeste GCPBackendPolicy
suivant définit un nombre maximal de RPS de 10:
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: store
spec:
default:
maxRatePerEndpoint: 10
targetRef:
group: ""
kind: Service
name: store
Pour en savoir plus sur l'autoscaling basé sur le trafic, consultez la page Autoscaling basé sur le trafic de l'équilibreur de charge.
Dépannage
Plusieurs GCPBackendPolicy
associées au même Service
Symptôme :
La condition d'état suivante peut se produire lorsque vous associez une GCPBackendPolicy
à Service
ou 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
Explication :
Cette condition d'état indique que vous essayez d'appliquer une seconde GCPBackendPolicy
à une Service
ou à une ServiceImport
qui est déjà associée à une GCPBackendPolicy
.
Plusieurs GCPBackendPolicy
associés au même Service
ou ServiceImport
ne sont pas compatibles avec GKE Gateway. Pour en savoir plus, consultez la section Restrictions et limitations.
Solution :
Configurez un seul fichier GCPBackendPolicy
qui inclut toutes les configurations personnalisées et associez-le à votre Service
ou ServiceImport
.
Stratégie de sécurité Google Cloud Armor introuvable
Symptôme :
Le message d'erreur suivant peut s'afficher lorsque vous activez Google Cloud Armor sur votre passerelle régionale:
Invalid value for field 'resource': '{
"securityPolicy":"projects/123456789/regions/us-central1/securityPolicies/<policy_name>"}'.
The given security policy does not exist.
Explication :
Le message d'erreur indique que la règle de sécurité Google Cloud Armor régionale spécifiée n'existe pas dans votre projet Google Cloud .
Solution :
Créez une stratégie de sécurité Google Cloud Armor régionale dans votre projet et référencez-la dans GCPBackendPolicy
.
Étapes suivantes
- Apprenez-en davantage sur le contrôleur Gateway.
- Apprenez à référencer une ressource Gateway à partir d'une ressource.
- Consultez la documentation de référence de l'API Policy Types.
- Consultez les définitions de type d'API.