收集 TCP 服务的指标

本任务说明如何配置 Istio 以自动收集网格中 TCP 服务的遥测数据。完成本任务后,您可以查询网格的默认 TCP 指标。

本任务中将使用 Bookinfo 示例应用程序作为示例。

开始之前

  • 在您的集群中安装 Istio 并部署应用程序。您还需要安装 Prometheus

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

收集新的遥测数据

  1. 设置 Bookinfo 使用 MongoDB。

    1. 安装 ratings 服务的 v2 版本。

      压缩
      $ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-ratings-v2.yaml@
      serviceaccount/bookinfo-ratings-v2 created
      deployment.apps/ratings-v2 created
      
    2. 安装 mongodb 服务

      压缩
      $ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-db.yaml@
      service/mongodb created
      deployment.apps/mongodb-v1 created
      
    3. Bookinfo 示例部署了每个微服务的多个版本,因此首先创建定义与每个版本相对应的服务子集以及每个子集的负载均衡策略的目标规则。

      压缩
      $ kubectl apply -f @samples/bookinfo/networking/destination-rule-all.yaml@
      

      如果您启用了双向 TLS,请改用以下命令

      压缩
      $ kubectl apply -f @samples/bookinfo/networking/destination-rule-all-mtls.yaml@
      

      要显示目标规则,请运行以下命令

      $ kubectl get destinationrules -o yaml
      

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

    4. 创建 ratingsreviews 虚拟服务

      压缩
      $ kubectl apply -f @samples/bookinfo/networking/virtual-service-ratings-db.yaml@
      virtualservice.networking.istio.io/reviews created
      virtualservice.networking.istio.io/ratings created
      
  2. 将流量发送到示例应用程序。

    对于 Bookinfo 示例,请在您的 Web 浏览器中访问 http://$GATEWAY_URL/productpage 或使用以下命令

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

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

    $ istioctl dashboard prometheus
    

    在 Prometheus 浏览器窗口中查看 TCP 度量值。选择 **图表**。输入 istio_tcp_connections_opened_total 度量值或 istio_tcp_connections_closed_total,然后选择 **执行**。**控制台** 选项卡中显示的表格包含类似于以下内容的条目

    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"}
    

了解 TCP 遥测收集

在此任务中,您使用 Istio 配置自动为网格中所有对 TCP 服务的流量生成和报告度量值。默认情况下,每 15s 记录一次所有活动连接的 TCP 度量值,此计时器可以通过 tcpReportingDuration 配置。连接的度量值也会在连接结束时记录。

TCP 属性

一些特定于 TCP 的属性支持 Istio 中的 TCP 策略和控制。这些属性由 Envoy 代理生成,并通过 Envoy 的节点元数据从 Istio 获取。Envoy 使用基于 ALPN 的隧道和基于前缀的协议将节点元数据转发到对等 Envoy。我们定义了一个新的协议 istio-peer-exchange,该协议由网格中的客户端和服务器边车进行宣传和优先级排序。ALPN 协商将协议解析为 istio-peer-exchange,用于 Istio 启用代理之间的连接,但不适用于 Istio 启用代理与任何其他代理之间的连接。此协议扩展 TCP 如下

  1. TCP 客户端,作为第一字节序列,发送一个魔术字节字符串和一个长度前缀的有效负载。
  2. TCP 服务器,作为第一字节序列,发送一个魔术字节序列和一个长度前缀的有效负载。这些有效负载是 protobuf 编码的序列化元数据。
  3. 客户端和服务器可以同时写入并乱序写入。Envoy 中的扩展过滤器随后在下游和上游进行进一步处理,直到不匹配魔术字节序列或读取整个有效负载。
Attribute Generation Flow for TCP Services in an Istio Mesh.
TCP 属性流

清理

  • 删除 port-forward 进程

    $ killall istioctl
    
  • 如果您不打算探索任何后续任务,请参考 Bookinfo 清理 说明以关闭应用程序。

这些信息对您有帮助吗?
您有什么改进建议吗?

感谢您的反馈!