本任务演示如何配置Istio以在网格中自动收集TCP服务的遥测数据。在该任务结束时,您可以查询网格的默认TCP指标。

整个任务中都使用Bookinfo示例应用程序作为示例。

1. 准备工作

  • 在你的集群中安装Istio和部署应用

  • 此任务假设Bookinfo示例将部署在缺省名称空间中。如果使用不同的名称空间,请更新示例配置和命令。

2. 收集新的遥测数据

  1. 构建Bookinfo,使用MongoDB
    1.1 安装ratings服务的v2

    • 如果您使用的是启用了自动sidecar注入的集群,请使用kubectl部署服务:
  1. $ kubectl apply -f samples/bookinfo/platform/kube/bookinfo-ratings-v2.yaml
  1. - 如果您使用的是手动的sidecar注入,运行以下命令:
  1. $ kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/platform/kube/bookinfo-ratings-v2.yaml)

1.2 安装mongodb服务

  • 自动注入sidecar的,执行如下
  1. $ kubectl apply -f samples/bookinfo/platform/kube/bookinfo-db.yaml
  • 手动注入sidecar的,执行如下
  1. $ kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/platform/kube/bookinfo-db.yaml)

1.3 Bookinfo示例部署每个微服务的多个版本,因此首先创建目标规则,定义对应于每个版本的服务子集,以及每个子集的负载平衡策略

  1. $ kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml

如果你开启了双向TLS,运行以下命令代替

  1. $ kubectl apply -f samples/bookinfo/networking/destination-rule-all-mtls.yaml

去显示目标规则 ,运行如下命令

  1. $ kubectl get destinationrules -o yaml

在添加引用这些子集的虚拟服务之前,等待目标规则传播几秒钟,因为虚拟服务中的子集引用依赖于目标规则。

1.4 创建ratings和reviews的虚拟服务

  1. $ kubectl apply -f samples/bookinfo/networking/virtual-service-ratings-db.yaml
  1. 发送流量到案例的应用

针对Bookinfo案例,访问http://$GATEWAY_URL/productpage或执行如下命令

  1. $ curl http://$GATEWAY_URL/productpage
  1. 验证正在生成和收集TCP度量值。

在Kubernetes环境中,使用以下命令为Prometheus设置端口转发:

  1. $ kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=prometheus -o jsonpath='{.items[0].metadata.name}') 9090:9090 &

在Prometheus浏览器窗口中查看TCP指标的值。选择图。输入istio_tcp_connections_opened_total度量或istio_tcp_connections_closed_total并选择Execute。控制台选项卡中显示的表包括以下条目:

  1. istio_tcp_connections_opened_total{
  2. destination_version="v1",
  3. instance="172.17.0.18:42422",
  4. job="istio-mesh",
  5. canonical_service_name="ratings-v2",
  6. canonical_service_revision="v2"}
  1. istio_tcp_connections_closed_total{
  2. destination_version="v1",
  3. instance="172.17.0.18:42422",
  4. job="istio-mesh",
  5. canonical_service_name="ratings-v2",
  6. canonical_service_revision="v2"}

3. 理解TCP的遥测收集

在这个任务中,您使用Istio配置指标的自动生成和报告网内的所有流量TCP服务。TCP度量所有活动连接默认记录每15秒,这个定时器通过[tcpReportingDurationconfig]是可配置的(/ docs /reference/ config / proxy_extensions /stats/ # PluginConfig)。连接度量也记录末端的连接。

4. TCP 属性

几个在Istio TCP-specific属性启用TCP策略和控制。这些属性是由envoy生成代理和获得Istio使用envoy的节点的元数据。envoy转发节点的元数据对等envoy使用基于ALPN隧道和基于前缀的协议。我们定义一个新的协议istio-peer-exchange、广告和优先的客户机和服务器sidecars网。ALPN谈判解决协议istio-peer-exchange Istio启用代理之间的联系,但不是Istio之间启用代理和其他代理。这扩展了TCP协议如下:

  • TCP client, as a first sequence of bytes, sends a magic byte string and a length prefixed payload.

  • TCP server, as a first sequence of bytes, sends a magic byte sequence and a length prefixed payload. These payloads are protobuf encoded serialized metadata.

  • Client and server can write simultaneously and out of order. The extension filter in Envoy then does the further processing in downstream and upstream until either the magic byte sequence is not matched or the entire payload is read.

1. 从tcp服务收集度量 - 图1

5. 删除port-forward处理

  1. $ killall kubectl