Activer tous les accès réseau sortants de Cloud Run pour Anthos sur Google Cloud

Par défaut, tout le trafic sortant du cluster est bloqué (y compris l'accès aux API Google). Pour activer tous les accès réseau sortants et vous permettre, par exemple, de vous connecter à des services Google Cloud tels que Cloud Storage ou à des API externes, vous devez définir le champ d'application approprié pour la plage d'adresses IP du proxy en modifiant la carte config-network.

Prérequis

Nous partons du principe que vous avez configuré les outils de ligne de commande gcloud et kubectl en suivant les instructions de configuration.

Activer tous les accès réseau sortants

Les instructions suivantes s'appliquent uniquement aux versions de cluster antérieures à 1.12.7-gke.17 (pour les clusters basés sur 1.12) ou à 1.11.9-gke.13 (pour les clusters basés sur 1.11). Les versions de cluster plus anciennes nécessitent l'activation du trafic sortant vers toutes les adresses IP sur Internet. Cela permet à vos applications de se connecter à des points de terminaison potentiellement non approuvés.

Déterminer le champ d'application IP de votre cluster

Pour définir le champ d'application approprié, vous devez déterminer les plages IP actuelles de votre cluster. Le champ d'application dépend de la configuration de votre cluster.

  1. Pour déterminer le champ d'application, appelez la commande suivante :

    gcloud container clusters describe [CLUSTER_NAME] \
    | grep -e clusterIpv4Cidr -e servicesIpv4Cidr

    Remplacez [CLUSTER_NAME] par le nom de votre cluster. Sachez que vous devez fournir le nom du cluster même si vous l'avez défini comme cluster par défaut pour gcloud. Notez également que si vous n'avez pas défini de zone par défaut comme indiqué à la section Prérequis, vous devez également fournir le paramètre zone après le nom du cluster comme suit : --zone=[ZONE], en remplaçant [ZONE] par la zone de votre cluster.

  2. Notez les plages IP indiquées par la commande ci-dessus, semblables à celles-ci :

    ...
    clusterIpv4Cidr: 10.8.0.0/14
    servicesIpv4Cidr: 10.11.240.0/20
    ...
    

    Vous devez ajouter ces plages IP afin d'activer tous les accès sortants, comme décrit à la section suivante.

Régler le champ d'application IP

Le paramètre istio.sidecar.includeOutboundIPRanges dans le fichier ConfigMap config-network spécifie les plages d'adresses IP que le side-car d'Istio intercepte. Pour autoriser l'accès sortant, remplacez la valeur du paramètre par défaut par les plages IP de votre cluster obtenues aux étapes précédentes :

  1. Exécutez la commande suivante pour modifier la carte config-network :

    kubectl edit configmap config-network --namespace knative-serving
  2. Utilisez un éditeur de votre choix pour remplacer la valeur du paramètre istio.sidecar.includeOutboundIPRanges * par la plage d'adresses IP obtenue aux étapes précédentes. Séparez les entrées IP par une virgule. Exemple :

  # Please edit the object below. Lines beginning with a '#' will be ignored,
  # and an empty file will abort the edit. If an error occurs while saving this file will be
  # reopened with the relevant failures.
  #
  apiVersion: v1
  data:
    istio.sidecar.includeOutboundIPRanges: '10.16.0.0/14,10.19.240.0/20'
  kind: ConfigMap
  metadata:
  ...

Lorsque vous définissez le paramètre sur un ensemble valide de plages d'adresses IP, Istio n'intercepte plus le trafic qui se dirige vers les adresses IP en dehors des plages fournies, et vous n'avez pas besoin de spécifier de règles de sortie.

Si vous omettez le paramètre istio.sidecar.includeOutboundIPRanges ou le définissez sur '', la valeur du paramètre global.proxy.includeIPRanges fournie au moment du déploiement d'Istio sera utilisée : cette valeur est *.

Notez qu'en cas de valeur non valide, '' sera utilisé à la place.

  1. Enregistrez les modifications. Toute modification sera automatiquement prise en compte et utilisée pour toutes les révisions déployées.

Résoudre les problèmes de réseau sortant

Si vous rencontrez des difficultés pour passer des appels en dehors de votre cluster, vérifiez que la stratégie a été appliquée au pod qui exécute votre service, en vérifiant les métadonnées du pod. Vérifiez que l'annotation traffic.sidecar.istio.io/includeOutboundIPRanges correspond à la valeur attendue du fichier config-map :

  1. Assurez-vous qu'un pod est bien en cours d'exécution, car les pods peuvent être mis à zéro :

    curl -H "Host: helloworld-go.default.example.com" http://35.203.155. 229

    Remplacez l'URL et l'adresse IP de l'hôte par votre propre URL et par l'adresse IP du cluster. Si vous ne savez pas comment localiser l'adresse IP du cluster, reportez-vous aux instructions de la page Accéder au service déployé.

  2. Dans les 5 minutes, appelez la commande suivante pour obtenir la liste des pods disponibles :

    kubectl get pods
  3. Dans le résultat de la commande get pods, localisez le pod associé à votre service : il commence par le nom du service.

  4. Utilisez ce nom de pod dans la commande suivante pour extraire les métadonnées et voir les libellés appliqués.

    kubectl get pod [POD_NAME] --output yaml

    Remplacez [POD_NAME] par le nom de votre pod. Pour en savoir plus sur les pods, consultez la documentation sur les pods.

    Vous devriez obtenir un résultat semblable à celui-ci :

  apiVersion: v1
  kind: Pod
  metadata:
    annotations:
      serving.knative.dev/configurationGeneration: "2"
      sidecar.istio.io/inject: "true"
      ...
      traffic.sidecar.istio.io/includeOutboundIPRanges: 10.16.0.0/14,10.19.240.0/20
  ...

La ligne qui commence par traffic.sidecar.istio.io/includeOutboundIPRanges: 10.16.0.0/14,10.19.240.0/20 contient les informations les plus importantes.