收集 TCP 服务指标

    在本例中会使用 Bookinfo 作为示例应用。

    • 在集群中 并部署一个应用。你必须安装Prometheus

    • 任务中假设 Bookinfo 应用部署在 命名空间中。如果使用不同的命名空间,需要更新例子中的相关配置和命令。

    1. 设置 Bookinfo 使用 Mongodb。

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

        如果使用的是启用了 Sidecar 自动注入的集群,可以简单使用 kubectl 进行服务部署:

        如果使用手工的 Sidecar 注入方式,就需要使用下面的命令:

        Zip

        1. $ kubectl apply -f <(istioctl kube-inject -f @samples/bookinfo/platform/kube/bookinfo-ratings-v2.yaml@)
        2. deployment "ratings-v2" configured
      2. 安装 mongodb 服务:

        1. $ kubectl apply -f @samples/bookinfo/platform/kube/bookinfo-db.yaml@
        2. service/mongodb created

        如果使用手工的 Sidecar 注入方式,就需要使用下面的命令:

        Zip

        1. $ kubectl apply -f <(istioctl kube-inject -f @samples/bookinfo/platform/kube/bookinfo-db.yaml@)
        2. service "mongodb" configured
      3. Bookinfo 示例部署了每个微服务的多个版本,因此您将首先创建目标规则定义每个版本对应的服务子集,以及每个子集的负载均衡策略。

        如果您启用了双向 TLS,请执行以下操作

        Zip

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

        您可以使用以下命令显示目标规则:

        1. $ kubectl get destinationrules -o yaml

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

      4. 创建 ratings 以及 reviews 两个虚拟服务:

        1. $ kubectl apply -f @samples/bookinfo/networking/virtual-service-ratings-db.yaml@
        2. virtualservice.networking.istio.io/reviews created
        3. virtualservice.networking.istio.io/ratings created
    2. 向应用发送流量。

      对于 Bookinfo 应用来说,在浏览器中浏览 http://$GATEWAY_URL/productpage,或者使用下面的命令:

      $GATEWAY_URL 是在示例中设置的值.

    3. 检查是否已经生成并收集了新的指标。

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

      1. $ istioctl dashboard prometheus

      在 Prometheus 浏览器窗口查看新指标的值。选择 Graph。 输入 istio_mongo_received_bytes 指标并选择 Execute。 在 Console 标签页中显示的表格包含了类似如下的内容:

      1. istio_tcp_connections_opened_total{
      2. instance="172.17.0.18:42422",
      3. job="istio-mesh",
      4. canonical_service_name="ratings-v2",
      5. 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"}

    这一任务中,我们加入了一段 Istio 配置,对于所有目标为网格内 TCP 服务的流量,Mixer 自动为其生成并报告新的指标。默认情况下,每15秒记录一次所有活动连接的 TCP 指标,并且该计时器是可配置的通过tcpReportingDuration。连接的指标也记录在连接的末尾。

    几个特定于 TCP 的属性可在 Istio 中启用 TCP 策略和控制。这些属性由 Envoy 代理生成,并使用 Envoy 的 Node Metadata 从 Istio 获得。Envoy 使用基于 ALPN 的隧道和基于前缀的协议将节点元数据转发给对等 Envoy。我们定义了一个新的协议 istio-peer-exchange,该协议定义了网格中的客户端和 Sidecar 服务器的通告和优先级。对于启用了 Istio 之间的连接,ALPN 协商将协议解析为 代理,不再启用 Istio 的代理和任何其他代理。该协议扩展了 TCP,如下所示:

    1. TCP 客户端,作为第一个字节序列,发送一个魔术字节串和一个长度带前缀的有效载荷。
    2. TCP 服务端,作为第一个字节序列,发送一个魔术字节串和一个长度带前缀的有效载荷,这些有效载荷是 protobuf 编码的序列化元数据。
    3. 客户端和服务器可以同时写入并且顺序混乱。Envoy 中的扩展筛选器会在下游和上游进行处理,直到魔术字节序列不匹配或读取了整个有效负载。

    TCP 属性流程