Services de périphérie du réseau pour les déploiements multi-environnement

Google propose divers services de réseau en périphérie permettant d'améliorer les capacités et la sécurité des services basés en dehors de Google Cloud (services sur site et multicloud), par exemple, dans un centre de données sur site ou dans un autre cloud public. Ces services de périphérie du réseau vous permettent de :

  • Accepter et acheminer le trafic client externe à l'échelle mondiale avec une adresse IP virtuelle Anycast unique
  • Réduire la charge du serveur en interrompant le trafic TLS en périphérie avec un équilibreur de charge HTTP(S) externe et des certificats SSL gérés par Google.
  • Activer les règles de pare-feu d'application Web préconfigurées et appliquer des listes d'autorisation et de refus au trafic entrant avec Google Cloud Armor.
  • Contrôler l'accès des utilisateurs à vos applications et ressources avec Identity-Aware Proxy.
  • Optimiser la diffusion de contenu et la latence côté utilisateur avec Cloud CDN
Exemple de services de périphérie du réseau (cliquez pour agrandir)
Exemple de services de périphérie du réseau (cliquez pour agrandir)

Pour bénéficier de ces avantages sur vos services privés, sur site ou multicloud, vous devez déployer un équilibreur de charge HTTP(S) externe afin de recevoir du trafic provenant de l'Internet public. L'équilibreur de charge HTTP(S) transfère le trafic vers un proxy intermédiaire configuré par Traffic Director, qui achemine le trafic vers votre environnement sur site ou vers le cloud non Google Cloud à l'aide de Cloud VPN ou Cloud Interconnexion.

Ce tutoriel présente un exemple de bout en bout qui utilise Google Cloud Armor en périphérie de Google pour autoriser de manière sélective les clients à accéder de manière privée à un service sur site. Les clients sont autorisés à accéder à l'application en fonction de leur adresse IP.

Effectuez les tâches suivantes :

  1. Déployer Envoy en tant que proxy intermédiaire dans un groupe d'instances géré Ce proxy Envoy est automatiquement connecté à Traffic Director.
  2. Créez une VM privée simulée sur site. En réalité, vous possédez probablement déjà une VM sur site.
  3. Configurez Traffic Director pour acheminer toutes les requêtes atteignant le proxy intermédiaire vers la VM simulée sur site.
  4. Créez un équilibreur de charge HTTP(S) externe pour recevoir le trafic provenant du réseau Internet public et le transférer vers le proxy intermédiaire.
  5. Associez une stratégie de sécurité Google Cloud Armor à l'équilibreur de charge HTTP(S) externe

Une fois ces tâches terminées, vous pouvez éventuellement explorer d'autres services périphériques et des fonctionnalités avancées de gestion du trafic.

Prérequis

Avant de configurer votre proxy intermédiaire, effectuez les tâches suivantes :

  • Consultez la page "Préparer la configuration de Traffic Director" et effectuez toutes les tâches préalables.
  • Vérifiez que vos points de terminaison sur site privés sont accessibles depuis votre réseau VPC Google Cloud via Cloud VPN ou Cloud Interconnect. L'exemple utilisé dans ce guide concerne simplement le routage du trafic vers un point de terminaison dans Google Cloud. Vous n'avez donc pas besoin de configurer une connectivité hybride pour suivre. Dans un scénario de déploiement réel, cette étape serait nécessaire.
  • Assurez-vous que les plages CIDR de votre sous-réseau VPC n'entrent pas en conflit avec vos plages CIDR distantes. Les routes de sous-réseau sont prioritaires sur la connectivité à distance lorsque les adresses IP se chevauchent.
  • Pour cette démonstration, obtenez les autorisations nécessaires pour créer et mettre à jour des règles de sécurité Google Cloud Armor. Les autorisations peuvent varier si vous souhaitez utiliser un service différent, tel que Cloud CDN.

Déployer le proxy intermédiaire sur les VM Compute Engine

Cette section décrit comment déployer Envoy en tant que proxy intermédiaire sur Compute Engine pour recevoir le trafic de l'équilibreur de charge externe et le transférer vers votre destination distante.

Créer le modèle d'instance pour le proxy intermédiaire

Un modèle d'instance spécifie la configuration des VM dans un groupe d'instances géré. Le modèle suivant vous permet de créer des instances de VM avec un proxy Envoy connecté à Traffic Director :

 gcloud compute instance-templates create td-middle-proxy \
    --service-proxy=enabled \
    --tags=allow-hc

Pour personnaliser votre déploiement Envoy, par exemple en spécifiant le nom du réseau, la définition d'un chemin d'accès au journal et/ou l'activation du traçage, consultez le guide des options de déploiement automatisé d'Envoy.

Créer le groupe d'instances géré pour le proxy intermédiaire

Créez un groupe d'instances géré basé sur le modèle ci-dessus. Dans cet exemple, vous pouvez conserver la taille du groupe d'instances de 1 pour déployer une seule instance. Pour l'utilisation en production, activez l'autoscaling, par exemple basé sur l'utilisation du processeur, afin d'éviter de créer un goulot d'étranglement si votre proxy intermédiaire a besoin de gérer une grande quantité de trafic.

gcloud compute instance-groups managed create td-middle-proxy-us-central1-a \
    --zone us-central1-a \
    --template=td-middle-proxy \
    --size=1

Identifiez et stockez l'adresse IP interne de l'instance dans $MIDDLE_PROXY_IP pour les configurations et la validation futures.

MIDDLE_PROXY_IP=`gcloud compute instances list --filter="name~'td-middle-proxy-us-central1-a-.*'" --zones=us-central1-a --format="value(networkInterfaces.networkIP)"`

Dans cet exemple, nous créons le groupe d'instances géré contenant des instances de VM exécutant Envoy, dans us-central1-a. Plus loin dans ce guide, vous créerez un équilibreur de charge externe pour gérer le trafic Internet public de vos clients. Étant donné que l'équilibreur de charge externe peut acheminer automatiquement le trafic vers la région la plus proche de vos clients, et vers le groupe d'instances géré de cette région, vous pouvez envisager de créer plusieurs groupes d'instances gérés. La liste complète des régions et zones disponibles dans Google Cloud est disponible ici.

Déployer le service sur site simulé

Cette section décrit le déploiement d'un groupe de points de terminaison du réseau de connectivité hybride (NEG). Dans un déploiement en production, ce NEG contient un point de terminaison (IP:port) qui renvoie vers votre serveur sur site. Dans cet exemple, vous créez simplement une VM Compute Engine accessible sur un IP:port. Cette VM agit en tant que serveur sur site simulé.

Créer la VM sur site simulée

Déployez une seule instance de VM pour simuler un serveur privé sur site.

gcloud compute instances create on-prem-vm \
  --zone us-central1-a \
  --metadata startup-script='#! /bin/bash
## Installs apache and a custom homepage
sudo su -
apt-get update
apt-get install -y apache2
cat <<EOF > /var/www/html/index.html
<html><body><h1>Hello world from on-premises!</h1></body></html>
EOF'

Identifiez et stockez son adresse IP interne pour des configurations et des vérifications futures. Le serveur de cette VM écoute les requêtes entrantes sur le port 80.

ON_PREM_IP=`gcloud compute instances describe on-prem-vm --zone=us-central1-a --format="value(networkInterfaces.networkIP)" | sed "s/['\[\]]*//g"`

Créer le groupe de points de terminaison du réseau

Créez le groupe de points de terminaison du réseau (NEG) de cette configuration de démonstration en spécifiant le type de point de terminaison du réseau non-gcp-private-ip-port. Ajoutez l'adresse IP et le port de votre VM sur site simulée comme point de terminaison à ce NEG. À l'étape précédente, l'adresse IP est stockée dans la variable d'environnement ON_PREM_IP.

Commencez par créer le NEG :

gcloud compute network-endpoint-groups create td-on-prem-neg \
    --network-endpoint-type non-gcp-private-ip-port \
    --zone us-central1-a

Ajoutez ensuite l'adresse IP:port au NEG que vous venez de créer.

gcloud compute network-endpoint-groups update td-on-prem-neg \
  --zone=us-central1-a \
  --add-endpoint="ip=$ON_PREM_IP,port=80"

Configurer Traffic Director avec les composants de l'équilibrage de charge Google Cloud

Cette section explique comment configurer Traffic Director et permettre à votre proxy intermédiaire de transférer le trafic vers votre service privé sur site. Vous configurez les composants suivants :

  • Une vérification de l'état Cette vérification de l'état se comporte de manière légèrement différente des vérifications de l'état configurées pour d'autres types de NEG, comme décrit ci-dessous.
  • Un service de backend Pour en savoir plus sur les services de backend, consultez la page Présentation des services de backend.
  • Une carte des règles de routage. Cela inclut la création d'une règle de transfert, d'un proxy cible et d'un mappage d'URL. Pour en savoir plus, consultez les sections Utiliser des règles de transfert et Utiliser des mappages d'URL.

Créer une vérification d'état

Les vérifications de l'état vérifient que vos points de terminaison sont opérationnels et qu'ils peuvent recevoir des requêtes. La vérification de l'état de ce type de NEG repose sur le mécanisme de vérification de l'état distribué d'Envoy, tandis que d'autres types de NEG utilisent le système centralisé de vérification de l'état de Google Cloud.

gcloud compute health-checks create http td-on-prem-health-check

Créer un service de backend

Créez un service de backend avec le schéma d'équilibrage de charge INTERNAL_SELF_MANAGED à utiliser avec Traffic Director. Lorsque vous créez ce service de backend, spécifiez la vérification d'état que vous venez de créer.

gcloud compute backend-services create td-on-prem-backend-service \
    --global \
    --load-balancing-scheme=INTERNAL_SELF_MANAGED \
    --health-checks=td-on-prem-health-check

Ensuite, ajoutez le NEG que vous avez créé précédemment en tant que backend de ce service de backend.

gcloud compute backend-services add-backend td-on-prem-backend-service \
    --global \
    --network-endpoint-group=td-on-prem-neg \
    --network-endpoint-group-zone=us-central1-a \
    --balancing-mode=RATE \
    --max-rate-per-endpoint=5

Créer la carte des règles de routage

La carte des règles de routage définit la manière dont Traffic Director achemine le trafic vers votre service de backend.

  1. Créez un mappage d'URL qui utilise le service de backend défini ci-dessus.

    gcloud compute url-maps create td-hybrid-url-map \
      --default-service td-on-prem-backend-service
    
  2. Créez un fichier nommé target_proxy.yaml avec le contenu suivant :

    name: td-hybrid-proxy
    proxyBind: true
    urlMap: global/urlMaps/td-hybrid-url-map
    
  3. Utilisez la commande import pour créer le proxy HTTP cible. Pour en savoir plus, consultez la section Proxys cibles pour Traffic Director.

    gcloud compute target-http-proxies import td-hybrid-proxy \
       --source target_proxy.yaml
    
  4. Créez une règle de transfert qui fait référence à ce proxy HTTP cible. Définissez l'adresse IP de la règle de transfert sur 0.0.0.0. La définition de l'adresse de la règle sur 0.0.0.0 achemine le trafic en fonction du port entrant, du nom d'hôte HTTP et des informations de chemin d'accès configurées dans le mappage d'URL. L'adresse IP spécifiée dans la requête HTTP est ignorée.

    gcloud compute forwarding-rules create td-hybrid-forwarding-rule \
       --global \
       --load-balancing-scheme=INTERNAL_SELF_MANAGED \
       --address=0.0.0.0 \
       --target-http-proxy=td-hybrid-proxy \
       --ports=8080 \
       --network=default
    

Vérifier que le proxy intermédiaire peut acheminer les requêtes vers le service sur site simulé

Traffic Director est désormais configuré pour acheminer le trafic via le proxy intermédiaire vers votre service privé sur site simulé. Vous pouvez vérifier cette configuration en créant une VM cliente de test, en vous connectant à cette VM et en envoyant une requête au proxy intermédiaire qui exécute Envoy. Une fois la VM cliente validée, supprimez-la.

Commencez par obtenir l'adresse IP du proxy intermédiaire. Vous n'avez besoin que de ces informations pour l'étape de validation :

gcloud compute instances list

Notez ou notez l'adresse IP de l'instance dans le groupe d'instances géré td-middle-proxy-us-central1-a.

Créez ensuite une instance client de test :

gcloud compute instances create test-client --zone us-central1-a

Utilisez ssh pour vous connecter au client de test :

gcloud compute ssh test-client --zone us-central1-a

Enfin, envoyez une requête à la VM de proxy intermédiaire en remplaçant l'adresse IP obtenue ci-dessus par MIDDLE_PROXY_IP :

curl $MIDDLE_PROXY_IP:8080

Vous devriez obtenir le résultat suivant :

Hello world from on-premises!

Quittez la VM cliente de test. Une fois que vous avez quitté la VM, vous pouvez supprimer la VM :

gcloud compute instances delete test-client \
  --zone us-central1-a

Déployer l'équilibreur de charge HTTP externe

Dans cette section, vous allez déployer un équilibreur de charge HTTP(S) externe qui envoie le trafic entrant vers le proxy intermédiaire. Il s'agit d'une configuration standard de l'équilibreur de charge HTTP(S) externe.

Réserver une adresse IP externe

Créer une adresse IP externe statique globale (external-lb-vip) vers laquelle les clients externes envoient le trafic. Vous récupérerez cette adresse IP externe lors de l'étape de validation décrite plus loin dans ce guide.

gcloud compute addresses create external-lb-vip \
    --ip-version=IPV4 \
    --global

Configurer l'équilibreur de charge HTTP externe

Configurez l'équilibreur de charge externe pour acheminer le trafic Internet vers votre proxy intermédiaire déjà configuré.

  1. Créez une vérification de l'état permettant de déterminer si le groupe d'instances géré qui exécute le proxy intermédiaire est opérationnel et capable de recevoir du trafic.

       gcloud compute health-checks create tcp tcp-basic-check \
            --port 8080
    
  2. Créez une règle de pare-feu pour autoriser la vérification de l'état. Notez que vous pouvez réutiliser le tag allow-hc ici pour appliquer la règle de pare-feu aux VM de proxy intermédiaires.

    gcloud compute firewall-rules create fw-allow-health-checks \
      --network default \
      --action ALLOW \
      --direction INGRESS \
      --source-ranges 35.191.0.0/16,130.211.0.0/22 \
      --target-tags allow-hc \
      --rules tcp
    
  3. Créez un service de backend.

       gcloud compute backend-services create td-middle-proxy-backend-service \
            --protocol HTTP \
            --health-checks tcp-basic-check \
            --global
    
  4. Ajoutez le groupe d'instances géré du proxy en tant que backend à ce service de backend.

       gcloud compute backend-services add-backend td-middle-proxy-backend-service \
            --instance-group=td-middle-proxy-us-central1-a \
            --instance-group-zone=us-central1-a \
            --global
    
  5. Créez un mappage d'URL pour acheminer les requêtes entrantes vers le proxy intermédiaire en tant que service de backend par défaut.

       gcloud compute url-maps create lb-map-http \
            --default-service td-middle-proxy-backend-service
    
  6. Créez un proxy HTTP cible de sorte que les requêtes adressées à l'adresse IP virtuelle de la règle de transfert de l'équilibreur de charge externe soient traitées en fonction du mappage d'URL.

     gcloud compute target-http-proxies create http-lb-proxy \
            --url-map lb-map-http
    
  7. Créez une règle de transfert globale pour acheminer les requêtes entrantes vers le proxy HTTP cible.

       gcloud compute forwarding-rules create http-forwarding-rule \
            --address=external-lb-vip\
            --global \
            --load-balancing-scheme=EXTERNAL \
            --target-http-proxy=http-lb-proxy \
            --ports=80
    

Définir le port nommé du groupe d'instances géré

Définissez un port nommé pour le groupe d'instances pour permettre à votre proxy intermédiaire de recevoir le trafic HTTP de l'équilibreur de charge externe.

gcloud compute instance-groups managed set-named-ports td-middle-proxy-us-central1-a \
    --named-ports http:8080 \
    --zone us-central1-a

Vérifier la configuration de l'équilibreur de charge HTTP externe

Au cours de cette étape, vous allez vérifier que l'équilibreur de charge externe est correctement configuré. Vous devriez pouvoir envoyer une requête à l'adresse IP virtuelle de l'équilibreur de charge et obtenir une réponse de la VM virtuelle sur site simulée.

PUBLIC_VIP=`gcloud compute addresses describe external-lb-vip \
    --format="get(address)" \
    --global`

Envoyez une requête curl à l'adresse IP publique et vérifiez que vous recevez le message Hello world.

curl $PUBLIC_VIP

Le résultat suivant s'affiche :

Hello world from on-premises!

Activer Google Cloud Armor

Configurez les règles de sécurité Google Cloud Armor pour autoriser uniquement l'accès à votre service depuis CLIENT_IP_RANGE, qui doit inclure l'adresse IP publique de l'appareil client avec lequel vous souhaitez effectuer le test. Par exemple, "192.0.2.0/24". Ces règles sont appliquées au service de backend de l'équilibreur de charge externe (dans cet exemple, td-hybrid-backend-service pointant vers le proxy intermédiaire). Pour en savoir plus sur les autorisations requises pour définir ces règles, consultez la section Configurer les règles de sécurité Google Cloud Armor.

  1. Créez la stratégie de sécurité de Google Cloud Armor.

    gcloud compute security-policies create external-clients-policy \
        --description "policy for external clients"
    
  2. Mettez à jour la règle par défaut de la règle de sécurité pour refuser tout le trafic.

    gcloud compute security-policies rules update 2147483647 \
        --security-policy external-clients-policy \
        --action "deny-404"
    
  3. Ajoutez une règle de priorité plus élevée pour autoriser le trafic provenant d'une plage d'adresses IP spécifique.

    gcloud compute security-policies rules create 1000 \
        --security-policy external-clients-policy \
        --description "allow traffic from CLIENT_IP_RANGE" \
        --src-ip-ranges "CLIENT_IP_RANGE" \
        --action "allow"
    
  4. Associez les règles de sécurité Google Cloud Armor à votre service de backend.

    gcloud compute backend-services update td-middle-proxy-backend-service \
        --security-policy external-clients-policy
    

Validation finale

Envoyez une requête curl à l'adresse IP virtuelle publique de l'équilibreur de charge HTTP externe. Vous devriez tout de même recevoir la réponse attendue si l'adresse IP de l'appareil client se trouve dans la plage d'adresses IP (<var>CLIENT_IP_RANGE</var>) autorisée spécifiée ci-dessus.

curl $PUBLIC_VIP

Le résultat suivant s'affiche :

Hello world from on-premises!

Envoyez la même requête curl à partir d'un autre appareil client dont l'adresse IP ne fait pas partie de CLIENT_IP_RANGE, ou mettez simplement à jour votre règle de sécurité pour ne plus inclure votre adresse IP client. Vous devriez maintenant recevoir une erreur 404 Not Found.

Dépannage

Mon service sur site n'est pas accessible via l'adresse IP de l'équilibreur de charge HTTP(S) externe global

Si votre service sur site est déjà accessible sur les VM Google Cloud exécutant Envoy, procédez comme suit pour résoudre les problèmes de configuration.

Assurez-vous que le groupe d'instances géré GCP Envoy est signalé comme étant opérationnel. Dans Google Cloud Console, accédez à Services réseau > Équilibrage de charge, puis cliquez sur url-map lb-map-http pour afficher les détails. Vous devriez voir 1/1 de l'instance dans td-middle-proxy-us-central1-a comme étant opérationnelle.

Si elle n'est pas opérationnelle, vérifiez si une règle de pare-feu a été configurée pour autoriser le trafic de vérification d'état d'entrée vers les VM Google Cloud qui exécutent Envoy :

gcloud compute firewall-rules describe fw-allow-health-check

Vous devriez obtenir le résultat suivant :

allowed:
- IPProtocol: tcp
...
direction: INGRESS
disabled: false
...
...
sourceRanges:
- 130.211.0.0/22
- 35.191.0.0/16
targetTags:
- allow-hc

Étape suivante