上下文
我正在尝试使用OpenCensus和Linkerd。虽然Linkerd可以在其名称空间中自动提供OpenCensus和jaeger,但我不想使用它们。相反,我在命名为'ops‘的名称空间中独立地部署了它们。
问题
在官方文档的末尾(从最后一行),它说,
确保OpenCensus收集器被注入了Linkerd代理。
这是什么意思?
我应该给OpenCensus收集器吊舱注射林克侧壁吗?
如果是,为什么?
例如,假设我配置了默认名称空间,如下所示。
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-accountmy-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谢谢!
发布于 2020-12-28 23:18:49
是的,应该向OpenCensus收集器注入Linkerd代理,因为代理本身使用mTLS发送span信息。使用mTLS,请求的发送(客户端)和接收端(服务器)必须相互提供证书,以验证身份是否由同一个受信任的源颁发。
Linkerd服务网格由控制平面和数据平面组成。控制平面是在集群中运行以实现服务网格特性的一组服务。互最小二乘(mTLS)就是其中之一,它是由控制平面的linkerd-identity组件实现的。
数据平面由任意数量的链接代理组成,这些代理被注入到应用程序中的服务中,比如OpenCensus收集器。每当在pod中启动代理时,它都会向linkerd-identity组件发送证书签名请求,并接收证书作为回报。
因此,当控制平面中的Linkerd代理向收集器发送spans时,它们使用这些证书进行身份验证,这些证书必须由注入到OpenCensus收集器Pod中的代理进行验证。这可以确保在集群中安全地发送所有通信量,甚至是分布式跟踪。
在这种情况下,您应该将服务帐户的名称空间作为后缀。默认情况下,Linkerd将使用Pod命名空间,因此如果Pod命名空间中不存在服务帐户,则配置将无效。逻辑有一个函数,该函数检查注释名称中的命名空间并追加它(如果存在的话):
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.opshttps://stackoverflow.com/questions/65377607
复制相似问题