Déployer des services internes à l'aide de Cloud Run pour Anthos sur Google Cloud

Ce tutoriel montre comment exposer les services déployés sur Cloud Run pour Anthos sur Google Cloud dans votre réseau interne. Ce type de configuration permet aux autres ressources de votre réseau de communiquer avec le service via une adresse IP privée interne (RFC 1918). L'exposition de services dans un réseau interne est utile pour les entreprises qui proposent des applications internes à leur personnel et pour les services utilisés par des clients exécutés en dehors du cluster Cloud Run pour Anthos sur Google Cloud.

Cloud Run pour Anthos permet aux développeurs de déployer et de diffuser des applications et des fonctions s'exécutant sur GKE. Par défaut, Cloud Run pour Anthos sur Google Cloud expose des services en dehors du cluster à l'aide de la passerelle d'entrée Istio. Cette passerelle est un service Kubernetes de type LoadBalancer. Par défaut, elle est exposée sur une adresse IP publique à l'aide de l'équilibrage de charge réseau.

Ce tutoriel vous montre comment exposer vos services Cloud Run pour Anthos sur Google Cloud sur une adresse IP interne de votre réseau VPC en modifiant la passerelle d'entrée Istio afin de pouvoir utiliser l'équilibrage de charge TCP/UDP interne à la place de l'équilibrage de charge réseau.

Objectifs

  • Créer un cluster GKE avec Cloud Run activé
  • Mettre à jour la passerelle d'entrée Istio pour utiliser l'équilibrage de charge TCP/UDP interne.
  • Tester l'application en déployant un exemple de service sur Cloud Run pour Anthos sur Google Cloud.

Coûts

Ce tutoriel utilise les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé ce tutoriel, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Consultez la page Effectuer un nettoyage pour en savoir plus.

Avant de commencer

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Dans Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Cloud.

    Accéder à la page de sélection du projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier que la facturation est activée pour votre projet.

  4. Dans Cloud Console, activez Cloud Shell.

    Activer Cloud Shell

    En bas de la fenêtre de Cloud Console, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel le SDK Cloud est déjà installé (y compris l'outil de ligne de commande gcloud), et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

  5. Vous exécuterez toutes les commandes de ce tutoriel depuis Cloud Shell.
  6. Dans Cloud Shell, activez l'API Cloud Run, l'API GKE et les API Cloud :
    gcloud services enable \
        cloudapis.googleapis.com \
        container.googleapis.com \
        run.googleapis.com

Configurer l'environnement

  • Dans Cloud Shell, définissez les variables d'environnement et les valeurs par défaut de l'outil gcloud pour la zone Compute Engine et le nom du cluster GKE que vous souhaitez utiliser dans ce tutoriel :

    ZONE=us-central1-f
    CLUSTER=cloudrun-gke-ilb-tutorial
    
    gcloud config set compute/zone $ZONE
    gcloud config set run/cluster $CLUSTER
    gcloud config set run/cluster_location $ZONE
    

    Dans les exemples de ce tutoriel, us-central1-f correspond à la zone et cloudrun-gke-ilb-tutorial au nom du cluster. Vous pouvez utiliser des valeurs différentes. Pour plus d'informations, consultez la page Zones géographiques et régions.

Créer un cluster GKE avec Cloud Run activé

  1. Dans Cloud Shell, créez un cluster GKE avec le module complémentaire Cloud Run :

    gcloud beta container clusters create $CLUSTER \
        --addons HorizontalPodAutoscaling,HttpLoadBalancing,CloudRun \
        --enable-ip-alias \
        --enable-stackdriver-kubernetes \
        --machine-type n1-standard-2
    

Configurer l'équilibrage de charge TCP/UDP interne

  1. Dans Cloud Shell, corrigez la passerelle d'entrée Istio pour pouvoir utiliser l'équilibrage de charge TCP/UDP interne :

    kubectl -n gke-system patch svc istio-ingress -p \
        '{"metadata":{"annotations":{"cloud.google.com/load-balancer-type":"Internal"}}}'
    

    La prise en compte de la modification peut prendre quelques minutes. Exécutez la commande suivante pour interroger votre cluster GKE au sujet de la modification. Recherchez la valeur de EXTERNAL-IP pour passer à une adresse IP privée :

    kubectl -n gke-system get svc istio-ingress --watch
    

    Appuyez sur Ctrl+C pour arrêter l'interrogation lorsqu'une adresse IP privée apparaît dans le champ EXTERNAL-IP.

Déployer un exemple de service

  • Dans Cloud Shell, déployez un service nommé sample sur Cloud Run pour Anthos sur Google Cloud dans l'espace de noms default :

    gcloud run deploy sample \
        --image gcr.io/knative-samples/simple-api \
        --namespace default \
        --platform gke
    

Vérifier la connectivité interne

  1. Dans Cloud Shell, créez une machine virtuelle (VM) Compute Engine dans la même zone que le cluster GKE :

    VM=cloudrun-gke-ilb-tutorial-vm
    
    gcloud compute instances create $VM
    
  2. Stockez l'adresse IP privée de la passerelle d'entrée Istio dans une variable d'environnement nommée EXTERNAL_IP et un fichier nommé external-ip.txt :

    export EXTERNAL_IP=$(kubectl -n gke-system get svc istio-ingress \
        -o jsonpath='{.status.loadBalancer.ingress[0].ip}' | tee external-ip.txt)
    
  3. Copiez le fichier contenant l'adresse IP sur la VM :

    gcloud compute scp external-ip.txt $VM:~
    
  4. Connectez-vous à la VM à l'aide de SSH :

    gcloud compute ssh $VM
    
  5. Dans la session SSH, testez l'exemple de service :

    curl -s -w'\n' -H Host:sample.default.example.com $(cat external-ip.txt)
    

    Voici le résultat :

    OK
    
  6. Quittez la session SSH :

    exit
    

Dépannage

Si vous rencontrez des problèmes avec ce tutoriel, consultez les documents suivants :

Nettoyer

Pour éviter que les ressources utilisées dans ce tutoriel soient facturées sur votre compte Google Cloud Platform, procédez comme suit :

Supprimer le projet

  1. Dans Cloud Console, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer .
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer les ressources individuelles

Si vous souhaitez conserver le projet Google Cloud que vous avez utilisé dans ce tutoriel, supprimez les différentes ressources :

  1. Supprimez le cluster GKE :

    gcloud container clusters delete $CLUSTER --quiet --async
    
  2. Supprimez l'instance Compute Engine :

    gcloud compute instances delete $VM --quiet
    

Étapes suivantes