Configurar Istio Ingress Gateway
Hasta ahora, has usado un Kubernetes Ingress para acceder a tu aplicación desde el exterior. En este módulo, configuras el tráfico para que ingrese a través de un Istio ingress gateway, para aplicar control de Istio en el tráfico hacia tus microservicios.
Almacena el nombre de tu namespace en la variable de entorno
NAMESPACE
. La necesitarás para reconocer tus microservicios en los logs:$ export NAMESPACE=$(kubectl config view -o jsonpath="{.contexts[?(@.name == \"$(kubectl config current-context)\")].context.namespace}") $ echo $NAMESPACE tutorial
Crea una variable de entorno para el hostname del Istio ingress gateway:
$ export MY_INGRESS_GATEWAY_HOST=istio.$NAMESPACE.bookinfo.com $ echo $MY_INGRESS_GATEWAY_HOST istio.tutorial.bookinfo.com
Configura un Istio ingress gateway:
$ kubectl apply -f - <<EOF apiVersion: networking.istio.io/v1 kind: Gateway metadata: name: bookinfo-gateway spec: selector: istio: ingressgateway # use Istio default gateway implementation servers: - port: number: 80 name: http protocol: HTTP hosts: - $MY_INGRESS_GATEWAY_HOST --- apiVersion: networking.istio.io/v1 kind: VirtualService metadata: name: bookinfo spec: hosts: - $MY_INGRESS_GATEWAY_HOST gateways: - bookinfo-gateway.$NAMESPACE.svc.cluster.local http: - match: - uri: exact: /productpage - uri: exact: /login - uri: exact: /logout - uri: prefix: /static route: - destination: host: productpage port: number: 9080 EOF
Establece
INGRESS_HOST
eINGRESS_PORT
usando las instrucciones en la sección Determinando la IP y puertos de Ingress.Agrega la salida de este comando a tu archivo
/etc/hosts
:$ echo $INGRESS_HOST $MY_INGRESS_GATEWAY_HOST
Accede a la página principal de la aplicación desde la línea de comandos:
$ curl -s $MY_INGRESS_GATEWAY_HOST:$INGRESS_PORT/productpage | grep -o "<title>.*</title>" <title>Simple Bookstore App</title>
Pega la salida del siguiente comando en la barra de direcciones de tu navegador:
$ echo http://$MY_INGRESS_GATEWAY_HOST:$INGRESS_PORT/productpage
Simula tráfico de usuario del mundo real hacia tu aplicación estableciendo un bucle infinito en una nueva ventana de terminal:
$ while :; do curl -s <output of the previous command> | grep -o "<title>.*</title>"; sleep 1; done <title>Simple Bookstore App</title> <title>Simple Bookstore App</title> <title>Simple Bookstore App</title> <title>Simple Bookstore App</title> ...
Verifica el gráfico de tu namespace en la consola de Kiali
my-kiali.io/kiali/console
. (La URLmy-kiali.io
debería estar en tu archivo/etc/hosts
que configuraste anteriormente).Esta vez, puedes ver que el tráfico llega desde dos fuentes,
unknown
(el Kubernetes Ingress) y desdeistio-ingressgateway istio-system
(el Istio Ingress Gateway).Pestaña de Gráfico de Kiali con Istio Ingress Gateway En este punto puedes dejar de enviar solicitudes a través del Kubernetes Ingress y usar solo el Istio Ingress Gateway. Detén el bucle infinito (
Ctrl-C
en la ventana de terminal) que estableciste en los pasos anteriores. En un entorno de producción real, actualizarías la entrada DNS de tu aplicación para que contenga la IP del Istio ingress gateway o configurarías tu Load Balancer externo.Elimina el recurso Kubernetes Ingress:
$ kubectl delete ingress bookinfo ingress.extensions "bookinfo" deleted
En una nueva ventana de terminal, reinicia la simulación de tráfico de usuario del mundo real como se describe en los pasos anteriores.
Verifica tu gráfico en la consola de Kiali. Después de aproximadamente un minuto, verás el Istio Ingress Gateway como una sola fuente de tráfico para tu aplicación.
Pestaña de Gráfico de Kiali con Istio Ingress Gateway como única fuente de tráfico
Estás listo para configurar logging con Istio.