Alle ausgehenden Netzwerkzugriffe für Cloud Run for Anthos in Google Cloud aktivieren

Standardmäßig wird der gesamte ausgehende Traffic des Clusters blockiert. Dies gilt auch für den Zugriff auf Google APIs. Zum Aktivieren des gesamten ausgehenden Netzwerkzugriffs, beispielsweise um eine Verbindung zu Google Cloud-Diensten wie Cloud Storage oder externen APIs herzustellen, müssen Sie den richtigen Bereich des Proxy-IP-Bereichs festlegen. Bearbeiten Sie hierfür die Zuordnung config-network.

Vorbereitung

Dies setzt voraus, dass Sie die Befehlszeilentools "gcloud" und "kubectl" gemäß der Einrichtungsanleitung eingerichtet haben.

Gesamten ausgehenden Netzwerktraffic zulassen

Die folgende Anleitung gilt nur für Clusterversionen, die älter sind als Clusterversion 1.12.7-gke.17 (für 1.12-basierte Cluster) oder älter als 1.11.9-gke.13 (für 1.11-basierte Cluster). Bei älteren Cluster-Versionen müssen Sie ausgehenden Traffic zu allen IP-Adressen im Internet aktivieren. Dadurch können Ihre Anwendungen Verbindungen zu potenziell nicht vertrauenswürdigen Endpunkten herstellen.

IP-Bereich des Clusters feststellen

Zum Festlegen des richtigen Bereichs müssen Sie die aktuellen IP-Bereiche des Clusters ermitteln. Der Bereich richtet sich nach der Clusterkonfiguration.

  1. Stellen Sie den Bereich mit folgendem Befehl fest:

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

    Ersetzen Sie [CLUSTER_NAME] durch den Clusternamen. Die Angabe des Clusternamens ist auch dann erforderlich, wenn Sie diesen bereits als Standardcluster für gcloud festgelegt haben. Wenn Sie nicht wie unter Vorbereitung beschrieben eine Standardzone festgelegt haben, müssen Sie nach dem Clusternamen außerdem den Parameter zone angeben: --zone=[ZONE]. Ersetzen Sie dabei [ZONE] durch die Zone des Clusters.

  2. Notieren Sie die mit dem obigen Befehl zurückgegebenen IP-Bereiche. Diese sehen etwa so aus:

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

    Hängen Sie die IP-Bereiche zusammen an, um sämtlichen ausgehenden Traffic zuzulassen. Dies wird im nächsten Abschnitt beschrieben.

IP-Bereich festlegen

Der Parameter istio.sidecar.includeOutboundIPRanges in der ConfigMap config-network gibt die IP-Bereiche an, die Istio-Sidecar abfängt. Wenn Sie ausgehenden Traffic zulassen möchten, ersetzen Sie den Standardparameterwert durch die IP-Bereiche des Clusters, die Sie in den vorangegangenen Schritten festgestellt haben.

  1. Führen Sie den folgenden Befehl aus, um die config-network-Zuordnung zu bearbeiten:

    kubectl edit configmap config-network --namespace knative-serving
  2. Verwenden Sie einen Editor Ihrer Wahl, um den Parameterwert istio.sidecar.includeOutboundIPRanges von * in den IP-Bereich zu ändern, den Sie in den vorherigen Schritten erhalten haben. Trennen Sie mehrere IP-Einträge durch Kommas. Beispiel:

  # 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:
  ...

Wenn Sie den Parameter auf einen gültigen Satz von IP-Adressbereichen setzen, fängt Istio keinen Traffic mehr zu IP-Adressen außerhalb der angegebenen Bereiche ab. Sie brauchen dadurch keine Regeln für ausgehenden Traffic festzulegen.

Wenn Sie den Parameter istio.sidecar.includeOutboundIPRanges weglassen oder auf " setzen, wird der Wert des Parameters global.proxy.includeIPRanges verwendet, der zur Istio-Bereitstellungszeit bereitgestellt wurde: Dieser Wert ist *.

Hinweis: Wenn Sie einen ungültigen Wert verwenden, wird dieser durch " ersetzt.

  1. Speichern Sie die Änderungen. Sämtliche Änderungen werden automatisch für alle bereitgestellten Überarbeitungen übernommen.

Probleme bei ausgehendem Netzwerktraffic beheben

Wenn Sie bei Aufrufen außerhalb des Clusters Schwierigkeiten haben, prüfen Sie in den Metadaten des Pods, auf dem der Dienst ausgeführt wird, ob die Richtlinie auf den Pod angewendet wurde. Prüfen Sie, ob die Annotation traffic.sidecar.istio.io/includeOutboundIPRanges mit dem erwarteten Wert aus config-map übereinstimmt:

  1. Prüfen Sie, ob ein Pod ausgeführt wird, denn Pods können auf null skaliert werden:

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

    Ersetzen Sie die Host-URL und die IP-Adresse durch Ihre eigene URL und die IP-Adresse des Clusters. Wie Sie die IP-Adresse des Clusters ermitteln, erfahren Sie unter Auf den bereitgestellten Dienst zugreifen.

  2. Rufen Sie innerhalb von fünf Minuten den folgenden Befehl auf, um die Liste der verfügbaren Pods abzurufen:

    kubectl get pods
  3. Suchen Sie in der Ausgabe des Befehls get pods den mit Ihrem Dienst verknüpften Pod: Er beginnt mit dem Namen Ihres Dienstes.

  4. Verwenden Sie den Namen des Pods im folgenden Befehl, um die Metadaten abzurufen und die angewendeten Labels anzeigen zu lassen.

    kubectl get pod [POD_NAME] --output yaml

    Ersetzen Sie [POD_NAME] durch den Namen des Pods. Weitere Informationen zu den Pods finden Sie in der Pod-Dokumentation.

    Das Ergebnis sollte etwa so aussehen:

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

Die Zeile, die mit traffic.sidecar.istio.io/includeOutboundIPRanges: 10.16.0.0/14,10.19.240.0/20 beginnt, enthält die wichtigsten Informationen.