Linkerd 使用 OpenCensus 进行分布式跟踪

问题描述

上下文

我正在尝试使用 OpenCensus 和 Linkerd。 尽管 Linkerd 可以选择在其命名空间中自动配置 OpenCensus 和 jaeger,但我不想使用它们。相反,我将它们独立部署在名为“ops”的命名空间下。

问题

  1. OpenCensus 收集器是否应由 Linkerd 注入。

在官方 docs 的末尾(正好是倒数第 4 行),它说,

确保使用 Linkerd 代理注入 OpenCensus 收集器。

这是什么意思?
我应该将 linkerd sidecar 注入 OpenCensus 收集器 pod 中吗?
如果是,为什么?

  1. 我应该按命名空间为 serviceaccount 名称添加后缀吗?

例如,假设我已经像这样配置了认命名空间。

apiVersion: v1
kind: Namespace
Metadata:
  name: default
  annotations:
    linkerd.io/inject: enabled
    config.linkerd.io/trace-collector: my-opencensus-collector.ops:12345
    config.alpha.linkerd.io/trace-collector-service-account: my-opencensus-collector-service-account

my-opencensus-collector 位于 ops 命名空间中,因此我将 .ops 放在其服务名称的末尾,结果为 my-opencensus-collector.ops:12345。 OpenCensus 收集器的专用服务帐户也存在于 ops 命名空间中。在这种情况下,我应该将命名空间名称也放在服务帐户名称的末尾吗?

哪个是对的?

config.alpha.linkerd.io/trace-collector-service-account: my-opencensus-collector-service-account

config.alpha.linkerd.io/trace-collector-service-account: my-opencensus-collector-service-account.ops

谢谢!

解决方法

  1. OpenCensus 收集器是否应由 Linkerd 注入。

是的,OpenCensus 收集器应该注入 Linkerd 代理,因为代理本身使用 mTLS 发送跨度信息。使用 mTLS,请求的发送端(客户端)和接收端(服务器端)必须相互出示证书,以验证彼此的身份,以验证身份是由相同的可信来源。

Linkerd 服务网格由控制平面和数据平面组成。控制平面是一组在集群内运行以实现服务网格功能的服务。相互 TLS (mTLS) 是这些功能之一,由控制平面的 linkerd-identity 组件实现。

数据平面由任意数量的 Linkerd 代理组成,这些代理被注入到应用程序中的服务中,例如 OpenCensus 收集器。每当在 Pod 中启动代理时,它都会向 linkerd-identity 组件发送证书签名请求并接收证书作为回报。

因此,当控制平面中的 Linkerd 代理将 Span 发送到收集器时,它们会使用这些证书对自己进行身份验证,这些证书必须由注入 OpenCensus 收集器 Pod 的代理进行验证。这可确保在集群内安全地发送所有流量,甚至是分布式跟踪。

  1. 我应该按命名空间为 serviceaccount 名称添加后缀吗?

在您的情况下,您应该使用命名空间为服务帐户添加后缀。默认情况下,Linkerd 会使用 Pod 命名空间,因此如果 Pod 命名空间中不存在服务帐户,那么配置将无效。 logic 有一个函数,用于检查注解名称中的命名空间并附加它(如果存在):

func ammendSvcAccount(ns string,params *Params) {
    hostAndPort := strings.Split(params.CollectorSvcAddr,":")
    hostname := strings.Split(hostAndPort[0],".")
    if len(hostname) > 1 {
        ns = hostname[1]
    }
    params.CollectorSvcAccount = fmt.Sprintf("%s.%s",params.CollectorSvcAccount,ns)
}

所以,这个是正确的:

config.alpha.linkerd.io/trace-collector-service-account: my-opencensus-collector-service-account.ops

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...