8.6. OpenTelemetry :运行启用了 TLS 的 Jaeger
以下 Kafka 组件内置了对使用 OpenTelemetry 进行追踪的支持:
- Kafka Connect
- MirrorMaker
- MirrorMaker 2
- AMQ Streams Kafka Bridge
当使用 Jaeger exporter 时,通过 Jaeger gPRC 端点检索 trace 数据。默认情况下,此端点没有启用 TLS。但是,在使用 Jaeger operator 部署 Jaeger 实例时,仍然可以将其配置为使用 TLS。例如,当在 OpenShift 上运行 Red Hat OpenShift distributed tracing Operator 时,Operator 会自动启用 TLS。AMQ Streams 不支持在 gRPC 端点中带有 TLS 的 Jaeger 实例。
这个问题有两个临时解决方案。
临时解决方案:在 gRPC 端点中禁用 TLS
通过指定以下属性,创建 Jaeger 自定义资源并在 gRPC 端口中禁用 TLS。
-
collector.grpc.tls.enabled: false -
reporter.grpc.tls.enabled: false
禁用 TLS 的 Jaeger 自定义资源示例
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: my-jaeger
spec:
allInOne:
options:
agent.grpc.tls.enabled: false
collector.grpc.tls.enabled: false
此配置使用 allInOne 策略,它会在单个 pod 中部署所有 Jaeger 组件。其他部署策略(如用于生产环境的 production 策略)将 Jaeger 组件隔离为单独的 pod,以提高可扩展性和可靠性。
临时解决方案:通过 OpenTelemetry 收集器导出追踪
使用收集器接收、处理和导出 OpenTelemetry 跟踪数据。要通过 OpenTelemetry 收集器导出 trace 数据来解决这个问题,您可以按照以下步骤操作:
- 部署 Red Hat OpenShift distributed tracing 集合 Operator。
-
配置一个
OpenTelemetryCollector自定义资源,用于部署收集器,以通过启用了 TLS 的端点接收 trace 数据,并将其传递给启用了 TLS 的端点。 -
在自定义资源中,指定
receivers属性,以便在端口 14250 上创建启用了 TLS 的 Jaeger gRPC 端点。如果您使用其他追踪系统,您还可以创建其他端点,如 OTLP 端点。 -
指定
exporters属性以指向启用了 TLS 的 Jaeger gRPC 端点。 -
在自定义资源的
pipelines属性中声明管道配置。
在本例中,管道来自 Jaeger 和 OTLP 接收器到 Jaeger gRPC 端点。
OpenTelemetry 收集器配置示例
apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
name: cluster-collector
namespace: <namespace>
spec:
mode: deployment
config: |
receivers:
otlp:
protocols:
grpc:
http:
jaeger:
protocols:
grpc:
exporters:
jaeger:
endpoint: jaeger-all-in-one-inmemory-collector-headless.openshift-distributed-tracing.svc.cluster.local:14250
tls:
ca_file: "/var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt"
service:
pipelines:
traces:
receivers: [otlp,jaeger]
exporters: [jaeger]
要使用收集器,您需要在追踪配置中将收集器端点指定为 exporter 端点。
使用 OpenTelemetry 的 Kafka Connect 的追踪配置示例
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
name: my-connect-cluster
spec:
#...
template:
connectContainer:
env:
- name: OTEL_SERVICE_NAME
value: my-otel-service
- name: OTEL_EXPORTER_JAEGER_ENDPOINT
value: "http:// jaeger-all-in-one-inmemory-collector-headless.openshift-distributed-tracing.svc.cluster.local:14250"
tracing:
type: opentelemetry
#...