Recopilación de Métricas para Services TCP
Esta tarea muestra cómo configurar Istio para recopilar automáticamente telemetría para services TCP en una malla. Al final de esta tarea, puede consultar las métricas TCP predeterminadas para su malla.
La application de ejemplo Bookinfo se utiliza como ejemplo a lo largo de esta tarea.
Antes de empezar
Instale Istio en su cluster y despliegue una application. También debe instalar Prometheus.
Esta tarea asume que la muestra de Bookinfo se desplegará en el namespace
default
. Si utiliza un namespace diferente, actualice la configuración y los comandos de ejemplo.
Recopilación de nuevos datos de telemetría
Configure Bookinfo para usar MongoDB.
Instale
v2
del serviceratings
.$ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-ratings-v2.yaml@ serviceaccount/bookinfo-ratings-v2 created deployment.apps/ratings-v2 created
Instale el service
mongodb
:$ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-db.yaml@ service/mongodb created deployment.apps/mongodb-v1 created
La muestra de Bookinfo despliega múltiples versiones de cada microservice, así que comience creando reglas de destino que definan los subconjuntos de service correspondientes a cada versión, y la política de balanceo de carga para cada subconjunto.
$ kubectl apply -f @samples/bookinfo/networking/destination-rule-all.yaml@
Si habilitó mTLS, ejecute el siguiente comando en su lugar:
$ kubectl apply -f @samples/bookinfo/networking/destination-rule-all-mtls.yaml@
Para mostrar las reglas de destino, ejecute el siguiente comando:
$ kubectl get destinationrules -o yaml
Espere unos segundos a que las reglas de destino se propaguen antes de agregar virtual services que hagan referencia a estos subconjuntos, porque las referencias a subconjuntos en los virtual services dependen de las reglas de destino.
Cree virtual services
ratings
yreviews
:$ kubectl apply -f @samples/bookinfo/networking/virtual-service-ratings-db.yaml@ virtualservice.networking.istio.io/reviews created virtualservice.networking.istio.io/ratings created
Envíe tráfico a la application de ejemplo.
Para la muestra de Bookinfo, visite
http://$GATEWAY_URL/productpage
en su navegador web o use el siguiente comando:$ curl http://"$GATEWAY_URL/productpage"
Verifique que los valores de las métricas TCP se estén generando y recopilando.
En un entorno Kubernetes, configure el reenvío de puertos para Prometheus usando el siguiente comando:
$ istioctl dashboard prometheus
Vea los valores de las métricas TCP en la ventana del navegador de Prometheus. Seleccione Graph. Introduzca la métrica
istio_tcp_connections_opened_total
oistio_tcp_connections_closed_total
y seleccione Execute. La tabla mostrada en la pestaña Console incluye entradas similares a:istio_tcp_connections_opened_total{ destination_version="v1", instance="172.17.0.18:42422", job="istio-mesh", canonical_service_name="ratings-v2", canonical_service_revision="v2"}
istio_tcp_connections_closed_total{ destination_version="v1", instance="172.17.0.18:42422", job="istio-mesh", canonical_service_name="ratings-v2", canonical_service_revision="v2"}
Comprender la recopilación de telemetría TCP
En esta tarea, utilizó la configuración de Istio para
generar y reportar automáticamente métricas para todo el tráfico a un service TCP
dentro de la malla.
Las métricas TCP para todas las conexiones activas se registran cada 15s
por defecto y este temporizador es configurable
a través de tcpReportingDuration
.
Las métricas para una conexión también se registran al final de la conexión.
Atributos TCP
Varios atributos específicos de TCP permiten la política y el control de TCP dentro de Istio.
Estos atributos son generados por los proxies de Envoy y obtenidos de Istio usando los metadatos de nodo de Envoy.
Envoy reenvía los metadatos de nodo a los Envoy de pares usando tunelización basada en ALPN y un protocolo basado en prefijos.
Definimos un nuevo protocolo istio-peer-exchange
, que es anunciado y priorizado por el cliente y los sidecars del servidor
en la malla. La negociación ALPN resuelve el protocolo a istio-peer-exchange
para conexiones entre proxies habilitados para Istio,
pero no entre un proxy habilitado para Istio y cualquier otro proxy.
Este protocolo extiende TCP de la siguiente manera:
- El cliente TCP, como primera secuencia de bytes, envía una cadena de bytes mágicos y una carga útil con prefijo de longitud.
- El servidor TCP, como primera secuencia de bytes, envía una secuencia de bytes mágicos y una carga útil con prefijo de longitud. Estas cargas útiles son metadatos serializados codificados en protobuf.
- El cliente y el servidor pueden escribir simultáneamente y fuera de orden. El filtro de extensión en Envoy realiza el procesamiento posterior en el flujo descendente y ascendente hasta que la secuencia de bytes mágicos no coincide o se lee toda la carga útil.
Limpieza
Elimine el proceso
port-forward
:$ killall istioctl
Si no planea explorar ninguna tarea de seguimiento, consulte las instrucciones de limpieza de Bookinfo para apagar la application.