在 Open Telemetry Collector 中使用 OTEL_EXPORTER_OTLP_HEADERS 来避免 ConfigMap 中的秘密

Using OTEL_EXPORTER_OTLP_HEADERS in Open Telemetry Collector to avoid secrets in ConfigMap

我有一个带有 pod 的 Kubernetes 集群 运行 一个 Open Telemetry Collector 实例。

我在 Kubernetes 中的 .Net 应用程序将跟踪导出到 Collector 实例,后者又将它们导出到 Elastic APM 服务器。如果我将此配置 (described here) 用于我的 Collector 实例,则此工作正常:

exporters:
  otlp/elastic:
      endpoint: "xxx.elastic-cloud.com:443"
      headers:
          Authorization: "Bearer your-apm-secret-token"

为了在 Kubernetes 中工作,我在 ConfigMap 中设置了这个配置。 这个工作正常,但问题是这需要我在 ConfigMap 中添加一个我想避免的秘密。

为了避免这种情况,我看到您可以添加一个 OTEL_EXPORTER_OTLP_HEADERS environment variable which will be used by the exporter. You could then pass the secrets through an environment variable in the container (not a perfect solution, but ok for me). This functionality seems to be implemented by the different OpenTelemetry SDKs (.Net, Java, Python, ...) 但如果我尝试使用环境变量技巧,它似乎不适用于收集器。

知道如何使用 Collector 做到这一点吗?或者任何其他避免将秘密传递给 ConfigMap 的技巧?

为 OpenTelemetry 收集器输入了 issue,这将解决我在环境变量中使用机密的主要顾虑。

在此之前,问题的作者建议使用环境变量扩展机制作为解决方法。

因此,如果您将令牌放在环境变量 ELASTIC_APM_TOKEN 中,那么您可以像这样在 ConfigMap 中引用它:

exporters:
  otlp/elastic:
      endpoint: "xxx.elastic-cloud.com:443"
      headers:
          Authorization: "Bearer $ELASTIC_APM_TOKEN"

在应用配置之前,收集器会将 $ELASTIC_APM_TOKEN 替换为环境变量中的值。