Habilita todo el acceso a la red de salida de Cloud Run for Anthos en Google Cloud

De forma predeterminada, todo el tráfico saliente está bloqueado para el clúster (incluido el acceso a las API de Google). A fin de habilitar todo el acceso a la red de salida, por ejemplo, para conectarte a los servicios de Google Cloud, como Cloud Storage o las API externas, debes configurar el permiso correcto del rango de IP del proxy mediante la edición del mapa config-network.

Requisitos previos

Se da por sentado que ya configuraste las herramientas de línea de comandos de gcloud y kubectl según las instrucciones de configuración.

Habilita todo el acceso a la red de salida

Las siguientes instrucciones se aplican solo a las versiones de clústeres anteriores a 1.12.7-gke.17 (para clústeres basados en 1.12) o anteriores a 1.11.9-gke.13 (clústeres basados en 1.11). Las versiones anteriores de clúster requieren que habilites el tráfico saliente a todas las direcciones IP en Internet. Esto permite que las aplicaciones se conecten a extremos que es probable que no sean confiables.

Determina el alcance de IP del clúster

Para establecer el alcance correcto, debes determinar los rangos de IP actuales del clúster. El alcance varía según la configuración del clúster.

  1. Invoca el comando para determinar el alcance:

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

    Reemplaza [CLUSTER_NAME] por el nombre del clúster. Ten en cuenta que debes proporcionar el nombre del clúster incluso si lo configuraste como el clúster predeterminado de gcloud. Además, ten en cuenta que si no configuraste tu zona predeterminada como se muestra en la sección de requisitos previos, también debes proporcionar el parámetro zone después del nombre del clúster: --zone=[ZONE], y reemplaza [ZONE] por la zona del clúster.

  2. Ten en cuenta los rangos de IP que se muestran en el comando anterior, que son similares a los siguientes:

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

    Debes adjuntar estos rangos de IP para habilitar todo el acceso de salida, como se describe en la siguiente sección.

Configura el alcance de IP

El parámetro istio.sidecar.includeOutboundIPRanges en el ConfigMap config-network especifica los rangos de IP que intercepta el proxy de sidecar de Istio. Para permitir el acceso de salida, reemplaza el valor del parámetro predeterminado por los rangos de IP del clúster que obtuviste en los pasos anteriores:

  1. Ejecuta el siguiente comando para editar el mapa config-network:

    kubectl edit configmap config-network --namespace knative-serving
  2. Usa el editor que prefieras para cambiar el valor del parámetro istio.sidecar.includeOutboundIPRanges de * al rango de IP que obtuviste en los pasos anteriores. Separa varias entradas de IP con una coma. Por ejemplo:

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

Cuando establezcas el parámetro en un conjunto válido de rangos de direcciones IP, Istio ya no interceptará el tráfico que se dirija a las direcciones IP que estén fuera de los rangos proporcionados, por lo que no necesitas especificar ninguna regla de salida.

Si omites el parámetro istio.sidecar.includeOutboundIPRanges o lo estableces en ", se usará el valor del parámetro global.proxy.includeIPRanges proporcionado en el momento de la implementación de Istio: este valor es *.

Ten en cuenta que si se usa un valor no válido, se usará " en su lugar.

  1. Guarda los cambios. Ten en cuenta que cualquier cambio se selecciona de manera automática y se usa para todas las revisiones implementadas.

Solución de problemas de la red de salida

Si tienes problemas para realizar llamadas fuera del clúster, verifica que la política se haya aplicado al Pod que ejecuta el servicio. Para ello, verifica los metadatos en el Pod. Verifica que la anotación traffic.sidecar.istio.io/includeOutboundIPRanges coincida con el valor esperado del config-map:

  1. Asegúrate de que haya un Pod en ejecución, ya que los Pods pueden reducir su escala a cero:

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

    Reemplaza la URL del host y la dirección IP por tu propia URL y la dirección IP del clúster. Si no sabes cómo encontrar la dirección IP del clúster, consulta las instrucciones en Accede al servicio implementado.

  2. Invoca este comando en 5 minutos para obtener la lista de Pods disponibles:

    kubectl get pods
  3. En el resultado del comando get pods, ubica al Pod asociado con el servicio, que comenzará con el nombre del servicio.

  4. Usa ese nombre de Pod en el siguiente comando para recuperar los metadatos y ver las etiquetas aplicadas.

    kubectl get pod [POD_NAME] --output yaml

    Reemplaza [POD_NAME] por el nombre del Pod. Consulta la documentación del Pod para obtener más información.

    Deberías ver un resultado similar al que se muestra a continuación:

  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 línea que comienza con traffic.sidecar.istio.io/includeOutboundIPRanges: 10.16.0.0/14,10.19.240.0/20 contiene la información más importante.