Accéder à distance à un cluster privé à l'aide d'un hôte bastion


Ce tutoriel explique comment accéder à un cluster privé dans Google Kubernetes Engine (GKE) sur Internet à l'aide d'un hôte bastion.

Vous pouvez créer des clusters privés GKE sans accès client au point de terminaison public. Cette option d'accès améliore la sécurité du cluster en empêchant tout accès Internet au plan de contrôle. Toutefois, la désactivation de l'accès au point de terminaison public vous empêche d'interagir avec votre cluster à distance, sauf si vous ajoutez l'adresse IP de votre client distant en tant que réseau autorisé.

Ce tutoriel explique comment configurer un hôte bastion, une machine hôte spécialement conçue pour résister à l'attaque. L'hôte bastion utilise Tinyproxy pour transférer le trafic client vers le cluster. Vous utilisez Identity-Aware Proxy (IAP) pour accéder en toute sécurité à l'hôte bastion depuis votre client distant.

Objectifs

  • Créer un cluster privé sans accès au point de terminaison public.
  • Déployez une machine virtuelle (VM) Compute Engine pour agir en tant qu'hôte bastion dans le sous-réseau du cluster.
  • Utilisez IAP pour connecter un client distant au cluster via Internet.

Coûts

Dans ce document, vous utilisez 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é les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Activer les API GKE, Compute Engine, Identity-Aware Proxy.

    Activer les API

  5. Installez Google Cloud CLI.
  6. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  7. Mettez à jour et installez les composants gcloud :
    gcloud components update
    gcloud components install alpha beta
  8. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  9. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  10. Activer les API GKE, Compute Engine, Identity-Aware Proxy.

    Activer les API

  11. Installez Google Cloud CLI.
  12. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  13. Mettez à jour et installez les composants gcloud :
    gcloud components update
    gcloud components install alpha beta

Créer un cluster privé

Créer un cluster privé sans accès client au point de terminaison public. Placez le cluster dans son propre sous-réseau. Pour ce faire, utilisez Google Cloud CLI ou la console Google Cloud.

gcloud

Exécutez la commande suivante :

gcloud container clusters create-auto CLUSTER_NAME \
    --region=COMPUTE_REGION \
    --create-subnetwork=name=SUBNET_NAME \
    --enable-master-authorized-networks \
    --enable-private-nodes \
    --enable-private-endpoint

Remplacez les éléments suivants :

  • CLUSTER_NAME : nom du nouveau cluster
  • COMPUTE_REGION : région Compute Engine du cluster.
  • SUBNET_NAME : nom du nouveau sous-réseau dans lequel vous souhaitez placer le cluster.

Console

Créez un sous-réseau de cloud privé virtuel

  1. Accédez à la page Réseaux VPC de Google Cloud Console.

    Accéder aux réseaux VPC

  2. Cliquez sur le réseau par défaut.

  3. Dans la section Sous-réseaux, cliquez sur Ajouter un sous-réseau.

  4. Dans la boîte de dialogue Ajouter un sous-réseau, spécifiez les éléments suivants :

    1. Nom : correspond au nom à attribuer au nouveau sous-réseau.
    2. Région : région du sous-réseau. Cette région doit être identique à celle du cluster.
    3. Plage d'adresses IP : spécifiez 10.2.204.0/22 ou une autre plage qui n'entre pas en conflit avec les autres plages du réseau VPC.
    4. Dans le champ Accès privé à Google, sélectionnez l'option Activé.
  5. Cliquez sur Ajouter.

Créer un cluster privé

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

    Accéder à Google Kubernetes Engine

  2. Cliquez sur Créer.

  3. Cliquez sur Configurer pour GKE Autopilot.

  4. Indiquez un nom et une région pour le nouveau cluster. La région doit être identique au sous-réseau.

  5. Dans la section Mise en réseau, sélectionnez l'option Cluster privé.

  6. Décochez la case Accéder au plan de contrôle à l'aide de son adresse IP externe.

  7. Dans la liste déroulante Sous-réseau de nœud, sélectionnez le sous-réseau que vous avez créé.

  8. Vous pouvez également configurer d'autres paramètres pour le cluster.

  9. Cliquez sur Create (Créer).

Vous pouvez également utiliser un cluster GKE Standard avec l'option --master-ipv4-cidr spécifiée.

Créer une VM d'hôte bastion

Créez une VM Compute Engine dans le réseau interne du cluster privé pour agir en tant qu'hôte bastion pouvant gérer le cluster.

gcloud

Créer une VM Compute Engine :

gcloud compute instances create INSTANCE_NAME \
    --zone=COMPUTE_ZONE \
    --machine-type=e2-micro \
    --network-interface=no-address,network-tier=PREMIUM,subnet=SUBNET_NAME

Remplacez les éléments suivants :

  • INSTANCE_NAME : Nom de la VM.
  • COMPUTE_ZONE : zone Compute Engine de la VM. Placez cette option dans la même région que le cluster.
  • SUBNET_NAME : sous-réseau dans lequel vous souhaitez placer la VM.

Console

  1. Accédez à la page Instances de VM de la console Google Cloud.

    Accéder à la page Instances de VM

  2. Cliquez sur Créer une instance.

  3. Renseignez les champs suivants :

    1. Nom : le nom de votre VM.
    2. Région et Zone : région et zone de votre VM. Utilisez la même région que votre cluster.
    3. Type de machine : un type de machine. Choisissez un petit type de machine, tel que e2-micro.
    4. Pour les Interfaces réseau, sélectionnez le même réseau et sous-réseau VPC que le cluster.
    5. Vous pouvez également configurer d'autres paramètres pour l'instance.
  4. Cliquez sur Create (Créer).

Créer une règle de pare-feu

Pour permettre à IAP de se connecter à votre VM d'hôte bastion, créez une règle de pare-feu.

Déployez le proxy :

Une fois l'hôte bastion et le cluster privé configurés, vous devez déployer un daemon de proxy dans l'hôte pour transférer le trafic vers le plan de contrôle du cluster. Pour ce tutoriel, vous installez Tinyproxy.

  1. Démarrez une session dans votre VM :

    gcloud compute ssh INSTANCE_NAME --tunnel-through-iap --project=PROJECT_ID
    
  2. Installez Tinyproxy :

    sudo apt install tinyproxy
    
  3. Ouvrez le fichier de configuration Tinyproxy :

    sudo vi /etc/tinyproxy/tinyproxy.conf
    
  4. Dans le fichier, procédez comme suit :

    1. Vérifiez que le port est 8888.
    2. Recherchez la section Allow :

        /Allow 127
      
    3. Ajoutez la ligne suivante à la section Allow :

        Allow localhost
      
  5. Enregistrez le fichier et redémarrez Tinyproxy :

    sudo service tinyproxy restart
    
  6. Quittez la session :

    exit
    

Se connecter au cluster depuis le client distant

Après avoir configuré Tinyproxy, vous devez configurer le client distant avec des identifiants de cluster et spécifier le proxy. Procédez comme suit sur le client distant :

  1. Obtenez les identifiants du cluster :

    gcloud container clusters get-credentials CLUSTER_NAME \
        --region=COMPUTE_REGION \
        --project=PROJECT_ID
    

    Remplacez les éléments suivants :

    • CLUSTER_NAME : nom du cluster privé.
    • COMPUTE_REGION : région du cluster.
    • PROJECT_ID : ID du projet Google Cloud du cluster.
  2. Créez un tunnel vers l'hôte bastion à l'aide d'IAP :

    gcloud compute ssh INSTANCE_NAME \
        --tunnel-through-iap \
        --project=PROJECT_ID \
        --zone=COMPUTE_ZONE \
        --ssh-flag="-4 -L8888:localhost:8888 -N -q -f"
    
  3. Spécifiez le proxy :

    export HTTPS_PROXY=localhost:8888
    kubectl get ns
    

    Le résultat est une liste d'espaces de noms dans le cluster privé.

Arrêter d'écouter sur le client distant

Si vous souhaitez annuler la modification sur le client distant à tout moment, vous devez mettre fin au processus d'écoute sur le port TCP 8888. La procédure à suivre varie selon le système d'exploitation client.

netstat -lnpt | grep 8888 | awk '{print $7}' | grep -o '[0-9]\+' | sort -u | xargs sudo kill

Dépannage

Restrictions de pare-feu dans les réseaux d'entreprise

Si vous utilisez un réseau d'entreprise doté d'un pare-feu strict, vous ne pourrez peut-être pas suivre ce tutoriel sans demander d'exception. Si vous demandez une exception, la plage d'adresses IP sources de l'hôte bastion est 35.235.240.0/20 par défaut.

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

Supprimer le projet

  1. Dans la console Google Cloud, 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 des ressources individuelles

  1. Supprimez l'hôte bastion que vous avez déployé dans ce tutoriel :

    gcloud compute instances delete INSTANCE_NAME \
        --zone=COMPUTE_ZONE
    
  2. Supprimez le cluster à l'aide de la commande suivante :

    gcloud container clusters delete CLUSTER_NAME \
        --region=COMPUTE_REGION
    
  3. Supprimez le sous-réseau :

    gcloud compute networks subnets delete SUBNET_NAME \
        --region=COMPUTE_REGION