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.
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.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:
Ejecuta el siguiente comando para editar el mapa
config-network
:kubectl edit configmap config-network --namespace knative-serving
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.
- 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
:
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.
Invoca este comando en 5 minutos para obtener la lista de Pods disponibles:
kubectl get pods
En el resultado del comando
get pods
, ubica al Pod asociado con el servicio, que comenzará con el nombre del servicio.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.