Configurer Cloud Run pour Anthos sur Google Cloud

Ce guide explique comment configurer un nouveau cluster Google Kubernetes Engine où Cloud Run pour Anthos sur Google Cloud est activé. Étant donné que vous pouvez utiliser Cloud Console ou la ligne de commande gcloud, les instructions couvrent ces deux méthodes. Si vous activez Cloud Run sur un cluster existant, consultez la page Activer Cloud Run pour Anthos sur Google Cloud sur des clusters existants.

Notez que l'activation de Cloud Run pour Anthos sur Google Cloud installe Istio et Knative Serving dans le cluster pour connecter et gérer vos charges de travail sans état. Pour en savoir plus, consultez la page Présentation de l'architecture de Cloud Run pour Anthos sur Google Cloud.

Prérequis

  1. Vous devez disposer d'un abonnement Anthos. Un essai gratuit est disponible jusqu'au 31 mars 2021. En savoir plus sur la tarification.
  2. Connectez-vous à votre compte Google.

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

  3. 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

  4. 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.

Configurer gcloud

Bien que vous puissiez faire appel à Cloud Console ou à la ligne de commande gcloud pour utiliser Cloud Run pour Anthos sur Google Cloud, vous devrez peut-être employer la ligne de commande gcloud pour certaines tâches.

Pour configurer la ligne de commande pour Cloud Run pour Anthos sur Google Cloud, procédez comme suit :

  1. Installez et initialisez le SDK Cloud.

  2. Vous devez définir le paramètre de projet par défaut pour gcloud sur celui que vous venez de créer :

    gcloud config set project PROJECT-ID

    Remplacez PROJECT-ID par l'ID du projet que vous avez créé.

  3. Définissez zone sur la zone souhaitée pour le nouveau cluster. Vous pouvez utiliser n’importe quelle zone dans laquelle GKE est disponible, par exemple :

    gcloud config set compute/zone ZONE

    Remplacez ZONE par votre zone.

  4. Activez les API suivantes pour le projet, lesquelles sont nécessaires pour créer un cluster, ainsi que pour créer et publier un conteneur dans le dépôt Google Container Registry :

    gcloud services enable container.googleapis.com containerregistry.googleapis.com cloudbuild.googleapis.com
  5. Mettez à jour les composants gcloud installés :

    gcloud components update
  6. Installez l'outil de ligne de commande kubectl :

    gcloud components install kubectl

Créer un cluster avec Cloud Run activé

Ces instructions permettent de créer un cluster à l'aide de la configuration suivante :

  • Cloud Run pour Anthos sur Google Cloud activé
  • Version de Kubernetes : voir la page Versions de GKE disponibles
  • Nœuds avec quatre processeurs virtuels

Il s'agit des paramètres recommandés pour un nouveau cluster.

Pour créer un cluster, vous pouvez utiliser la ligne de commande gcloud ou la console. Pour obtenir des instructions, cliquez sur l'onglet approprié.

Console

Pour créer un cluster et l'activer pour Cloud Run pour Anthos sur Google Cloud, procédez comme suit :

  1. Accédez à la page Google Kubernetes Engine dans Cloud Console :

    Accéder à Google Kubernetes Engine

  2. Cliquez sur Créer un cluster pour ouvrir la page Créer un cluster Kubernetes.

  3. Dans la section Paramètres de base du cluster, procédez comme suit :

    • Saisissez le nom de votre cluster.
    • Choisissez Zonal ou Régional comme type d'emplacement : l'un comme l'autre fonctionne avec Cloud Run pour Anthos sur Google Cloud. Les clusters zonaux sont moins onéreux, mais entraînent des temps d'arrêt lors des mises à niveau de plan de contrôle maîtres.
    • En fonction de l'option choisie à l'étape précédente, sélectionnez une zone ou une région. Choisissez une zone ou une région proche de vous, par exemple us-central1-a.
    • Dans la liste déroulante, sélectionnez l'une des versions disponibles comme version du cluster du plan de contrôle.
  4. Dans la section Features (Fonctionnalités), cochez la case Enable Cloud Run for Anthos (Activer Cloud Run pour Anthos).

  5. Cliquez sur Create (Créer) pour créer et provisionner le cluster avec la configuration que vous venez de terminer. L'exécution de ce processus peut prendre quelques instants.

Ligne de commande

Pour créer un cluster qui active Cloud Run pour Anthos sur Google Cloud, procédez comme suit :

  1. Créez un cluster :

    gcloud container clusters create CLUSTER-NAME \
    --zone=ZONE \
    --addons=HttpLoadBalancing,CloudRun \
    --machine-type=n1-standard-2 \
    --num-nodes=3 \
    --cluster-version=GKE-VERSION \
    --enable-stackdriver-kubernetes

    Notez que ces instructions ne permettent pas à l'autoscaler de cluster de redimensionner les clusters à la demande. Cloud Run pour Anthos sur Google Cloud procède automatiquement au scaling des instances du cluster.

  2. Patientez pendant la création du cluster.

Créer un cluster privé avec Cloud Run activé

Par défaut, le cluster que vous avez créé ci-dessus peut configurer l'accès aux réseaux publics à partir des pods. Si vous souhaitez créer un cluster privé avec Cloud Run activé qui isole les pods, les nœuds et les charges de travail de la connectivité aux réseaux publics, consultez les instructions suivantes. Sinon, passez à la section suivante.

Les clients externes peuvent toujours appeler l'adresse IP de l'équilibreur de charge externe de votre cluster privé. Pour créer un cluster qui ne sera jamais exposé au public, consultez la page Configurer un réseau interne privé.

  1. Créez un cluster privé doté d'au moins quatre processeurs virtuels.

    Créer un cluster privé

  2. Vous pouvez ignorer les instructions ci-dessous si vous utilisez Cloud Run pour Anthos sur un cluster GKE dans l'une des versions suivantes :
    • 1.16.8-gke.7+
    • 1.15.11-gke.9+
    Pour déployer un service sur Cloud Run pour Anthos au sein d'un cluster GKE privé, vous devez autoriser les connexions TCP des serveurs maîtres sur les nœuds du port 8443 et spécifier manuellement le port 8443 dans votre liste de connexions TCP autorisées en modifiant les règles de pare-feu de votre projet :
    1. Affichez le bloc CIDR du cluster du plan de contrôle et enregistrez la valeur dans le champ masterIpv4CidrBlock :

      gcloud container clusters describe CLUSTER_NAME
    2. Affichez et enregistrez la valeur dans le champ TARGET_TAGS :

      gcloud compute firewall-rules list \
                --filter 'name~^gke-CLUSTER_NAME' \
                 --format 'table(
                         name,
                         network,
                         direction,
                         sourceRanges.list():label=SRC_RANGES,
                         allowed[].map().firewall_rule().list():label=ALLOW,
                         targetTags.list():label=TARGET_TAGS
                 )'
    3. Ajoutez une règle de pare-feu à l'aide des valeurs enregistrées ci-dessus :

      gcloud compute firewall-rules create FIREWALL_RULE_NAME \
           --action ALLOW \
           --direction INGRESS \
           --source-ranges masterIpv4CidrBlock \
           --rules tcp:8443 \
           --target-tags TARGET_TAGS

      Pour plus d'informations, consultez la section Créer des règles de pare-feu.

Configurer gcloud pour le cluster et la plate-forme

Une fois le cluster créé, procédez comme suit :

  • Définissez votre plate-forme par défaut sur gke.
  • (Facultatif) Définissez des valeurs par défaut pour le nom et l'emplacement du cluster, afin d'éviter de recevoir des invites ultérieurement lorsque vous utilisez la ligne de commande.
  • Obtenez les identifiants qui permettent à la ligne de commande gcloud d'accéder à votre cluster.

Pour définir des valeurs par défaut, procédez comme suit :

  1. Définissez la plate-forme par défaut sur gke, définissez votre cluster et son emplacement par défaut, puis obtenez les identifiants comme suit :

    gcloud config set run/platform gke
    gcloud config set run/cluster CLUSTER
    gcloud config set run/cluster_location ZONE
    gcloud container clusters get-credentials CLUSTER

    Remplacer

    • CLUSTER par le nom du cluster ;
    • ZONE par l'emplacement du cluster.
  2. Les clusters Kubernetes comportent un espace de noms nommé default. Pour en savoir plus sur les espaces de noms ainsi que sur les raisons pour lesquelles vous pourriez créer et utiliser un espace de noms autre que default, consultez la page sur les espaces de noms dans la documentation Kubernetes. Pour créer un espace de noms, exécutez la commande suivante :

    kubectl create namespace NAMESPACE

    Remplacez NAMESPACE par l'espace de noms que vous souhaitez créer.

  3. Si vous avez créé un espace de noms à l'étape précédente et que vous souhaitez l'utiliser à la place de l'espace de noms default, définissez-le comme espace à utiliser par défaut lorsque vous appelez la ligne de commande gcloud :

    gcloud config set run/namespace NAMESPACE

Activer des métriques sur un cluster avec Workload Identity

Lorsque vous activez Workload Identity, Cloud Run pour Anthos ne remonte pas certaines métriques, telles que le nombre de requêtes de révision ou la latence des requêtes, à la suite des opérations Google Cloud. Il continue néanmoins à générer des rapports sur les métriques associées au processeur et à la mémoire.

Pour activer l'ensemble des métriques, vous devez définir manuellement les autorisations d'écriture de métriques dans Cloud Monitoring en attribuant le rôle "Rédacteur de métriques Monitoring" au compte de service Google (GSA, Google Service Account) associé à votre service Cloud Run pour Anthos.

Accordez au GSA de votre service les autorisations liées au rôle "Rédacteur de métriques Monitoring" :

gcloud projects add-iam-policy-binding PROJECT_ID 
--member=serviceAccount:GSA_NAME@GSA_PROJECT.iam.gserviceaccount.com
--role=roles/monitoring.metricWriter

Remplacez :

  • PROJECT_ID par l'ID du projet de cluster où se trouve votre KSA ;
  • GSA_PROJECT par l'ID de projet associé à un GSA qui n'est pas dans le cluster. Vous pouvez utiliser n'importe quel GSA de votre organisation.

Pour en savoir plus, consultez la page Accorder, modifier et révoquer les accès à des ressources.

Pour configurer les services fournis par les API Google Cloud (tels que les API Compute, les API Storage et Database, ou les API Machine Learning) depuis votre cluster GKE, consultez la page Utiliser Workload Identity.

Développer dans une configuration mutualisée

Dans les cas d'utilisation mutualisés, vous devez gérer et déployer les services Cloud Run pour Anthos sur un cluster Google Kubernetes Engine situé en dehors de votre projet actuel. Cette section vous explique comment développer des services Cloud Run pour Anthos sur Google Cloud au sein d'une configuration de cluster mutualisé.

Pour gérer et déployer les services Cloud Run pour Anthos sur un cluster Google Kubernetes Engine situé en dehors de votre projet actuel, procédez comme suit :

  1. Vérifiez que vous disposez d'un accès en lecture à l'ID de projet Google Cloud du cluster vers lequel vous effectuez le déploiement.

  2. Mettez à jour votre fichier kubeconfig local avec les identifiants du cluster GKE cible :

    gcloud container clusters get-credentials NAME \
    --region=REGION \
    --project=PROJECT-ID
    • REGION est la région Compute Engine de votre cluster cible.
    • PROJECT-ID est le projet pour lequel vous disposez d'un accès en lecture.

    Pour en savoir plus, consultez la documentation de référence sur la commande gcloud container clusters get-credentials.

  3. Utilisez la ligne de commande gcloud pour communiquer avec le cluster GKE en définissant la plate-forme par défaut sur kubernetes :

    gcloud config set run/platform kubernetes
    

Vous pouvez désormais exécuter des commandes sur le cluster GKE cible spécifié dans votre fichier kubeconfig.

Par exemple, la commande suivante va déployer un service Cloud Run pour Anthos en utilisant une image de conteneur spécifiée, sur le cluster GKE dont les identifiants sont stockés dans le fichier kubeconfig :

gcloud run deploy SERVICE-NAME --image IMAGE-NAME

Configurer un réseau interne privé

Le déploiement de services sur un réseau interne est utile pour les entreprises qui fournissent des applications internes à leur personnel, ainsi que pour les services utilisés par des clients et s'exécutant en dehors du cluster Cloud Run for Anthos sur Google Cloud. Cette configuration permet aux autres ressources de votre réseau de communiquer avec le service via une adresse IP privée interne (RFC 1918) qui n'est pas accessible au public.

Pour créer votre réseau interne, configurez la passerelle d'entrée d'Istio pour qu'elle utilise l'équilibrage de charge TCP/UDP interne plutôt qu'un équilibreur de charge public du réseau externe. Vous pouvez ensuite déployer vos services Cloud Run pour Anthos sur Google Cloud sur une adresse IP interne au sein de votre réseau VPC.

Avant de commencer

  • Vous devez disposer des autorisations admin sur votre cluster.
  • Seules les versions 310.0 ou ultérieures du SDK Cloud sont compatibles. Pour en savoir plus, consultez la page Configurer gcloud.

Pour configurer l'équilibreur de charge interne, procédez comme suit :

  1. Mettez à jour la passerelle d'entrée d'Istio pour utiliser l'équilibrage de charge TCP/UDP interne en créant un cluster ou en mettant à jour un cluster existant :

    • Créez un cluster avec un équilibreur de charge interne :

      gcloud container clusters create CLUSTER_NAME \
      --addons=HttpLoadBalancing,CloudRun \
      --machine-type=n1-standard-2  \
      --num-nodes=3  \
      --enable-stackdriver-kubernetes \
      --cloud-run-config=load-balancer-type=INTERNAL
    • Mettez à jour un cluster existant pour utiliser un équilibreur de charge interne :

      gcloud container clusters update CLUSTER_NAME
      --update-addons=CloudRun=ENABLED \
      --cloud-run-config=load-balancer-type=INTERNAL

    La prise en compte de la modification peut prendre quelques minutes.

  2. Exécutez la commande suivante pour surveiller les mises à jour de votre cluster GKE :

    kubectl -n gke-system get svc istio-ingress --watch
    
    1. Notez l'annotation "cloud.google.com/load-balancer-type: Internal".
    2. Recherchez la valeur de IP dans l'équilibreur de charge d'entrée pour la changer en une adresse IP privée.
    3. Appuyez sur Ctrl+C pour arrêter les mises à jour lorsqu'une adresse IP privée apparaît dans le champ IP.

Pour vérifier la connectivité interne une fois vos modifications effectuées, procédez comme suit :

  1. Déployez un service appelé 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
    
  2. 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
    
  3. 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)
    
  4. Copiez le fichier contenant l'adresse IP sur la VM :

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

    gcloud compute ssh $VM
    
  6. 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
    
  7. Quittez la session SSH :

    exit
    

Utiliser une installation Istio distincte

Les instructions suivantes expliquent comment connecter Anthos Service Mesh, le module complémentaire Istio sur GKE ou une installation Istio personnalisée avec Cloud Run pour Anthos, en plus des composants Istio déjà installés par défaut dans Cloud Run pour Anthos sur Google Cloud.

Les composants Istio inclus dans l'installation par défaut de Cloud Run pour Anthos sur Google Cloud ne sont actuellement pas compatibles avec l'injection side-car automatique. Cependant, vous pouvez utiliser une installation Istio supplémentaire afin d'activer l'injection side-car Istio pour l'espace de noms du service déployé.

Pour utiliser une installation Istio supplémentaire, vous devez vérifier que la passerelle d'entrée Istio est nommée istio-ingressgateway dans l'espace de noms istio-system. Cloud Run pour Anthos peut prendre en charge et gérer le trafic externe provenant des passerelles d'entrée Istio installées sur :

  • l'espace de noms istio-system, avec le domaine local du cluster istio-ingressgateway.istio-system.svc.cluster.local configuré par défaut lorsque vous utilisez une installation Istio supplémentaire ;
  • l'espace de noms gke-system, avec le domaine local du cluster istio-ingress.gke-system.svc.cluster.local configuré avec l'installation par défaut de Cloud Run pour Anthos sur Google Cloud.

Pour vérifier la passerelle d'entrée Istio supplémentaire que Cloud Run pour Anthos utilise, procédez comme suit :

  1. Ouvrez le fichier ConfigMap config-istio :

    kubectl get configmap config-istio --namespace knative-serving -oyaml
    
  2. Vérifiez que la passerelle d'entrée Istio supplémentaire est nommée istio-ingressgateway et qu'elle se trouve dans l'espace de noms istio-system.

Activer le protocole HTTPS et des domaines personnalisés

Si vous souhaitez utiliser HTTPS et des domaines personnalisés qui s'appliquent au cluster, consultez les pages Activer les certificats HTTPS et TLS automatiques et Mapper les domaines personnalisés.

Désactiver Cloud Run pour Anthos sur Google Cloud

Pour désactiver Cloud Run pour Anthos sur Google Cloud dans votre cluster, procédez comme suit :

  1. Accédez à la page Google Kubernetes Engine dans Cloud Console :

    Accéder à Google Kubernetes Engine

  2. Cliquez sur le cluster dans lequel vous souhaitez désactiver Cloud Run pour Anthos sur Google Cloud.

  3. Cliquez sur Modifier.

  4. Dans le menu déroulant Cloud Run pour Anthos, sélectionnez Désactiver.

  5. Cliquez sur Save.

Étapes suivantes