2.10.5.2. 连接至现有的 Jaeger 实例

要让 SMCP 连接到现有的 Jaeger 实例,您必须满足以下条件:

  • Jaeger 实例与 control plane 部署到同一个命名空间中,例如,部署到 istio-system 命名空间中。
  • 要启用服务间的安全通信,您应该启用 oauth-proxy,以保护与 Jaeger 实例的通信,并确保 secret 挂载到 Jaeger 实例,以便 Kiali 与其通信。
  • 要使用自定义或已存在的 Jaeger 实例,请将 spec.istio.tracing.enabled 设置为 "false" 来禁用 Jaeger 实例的部署。
  • 通过将 spec.istio.global.tracer.zipkin.address 设置为 jaeger-collector 服务的主机名和端口,为 Mixer 提供正确的 jaeger-collector 端点。该服务的主机名通常为 <jaeger-instance-name>-collector.<namespace>.svc.cluster.local
  • 通过将 spec.istio.kiali.jaegerInClusterURL 设置为您的 jaeger-query 服务的主机名(端口通常不需要,它会使用默认的 443 端口),向 Kiali 提供正确的 jaeger-query 端点来收集 trace。该服务的主机名通常为 <jaeger-instance-name>-query.<namespace>.svc.cluster.local
  • 向 Kiali 提供 Jaeger 实例的仪表板 URL,以便通过 Kiali 控制台启用 Jaeger 访问。您可以从 Jaeger Operator 创建的 OpenShift 路由中检索 URL。如果您的 Jaeger 资源称为 external-jaeger,且位于 istio-system 项目中,您可以使用以下命令检索路由:

    $ oc get route -n istio-system external-jaeger

    输出示例

    NAME                   HOST/PORT                                     PATH   SERVICES               [...]
    external-jaeger        external-jaeger-istio-system.apps.test        external-jaeger-query  [...]

    HOST/PORT 下的值是 Jaeger 仪表板的外部访问 URL。

Jaeger 资源示例

apiVersion: jaegertracing.io/v1
kind: "Jaeger"
metadata:
  name: "external-jaeger"
  # Deploy to the Control Plane Namespace
  namespace: istio-system
spec:
  # Set Up Authentication
  ingress:
    enabled: true
    security: oauth-proxy
    openshift:
      # This limits user access to the Jaeger instance to users who have access
      # to the control plane namespace. Make sure to set the correct namespace here
      sar: '{"namespace": "istio-system", "resource": "pods", "verb": "get"}'
      htpasswdFile: /etc/proxy/htpasswd/auth

  volumeMounts:
  - name: secret-htpasswd
    mountPath: /etc/proxy/htpasswd
  volumes:
  - name: secret-htpasswd
    secret:
      secretName: htpasswd

以下 ServiceMeshControlPlane 示例假定您使用 Jaeger Operator 和示例 Jaeger 资源部署了 Jaeger。

使用外部 Jaeger 的 ServiceMeshControlPlane 示例

apiVersion: maistra.io/v1
kind: ServiceMeshControlPlane
metadata:
  name: external-jaeger
  namespace: istio-system
spec:
  version: v1.1
  istio:
    tracing:
      # Disable Jaeger deployment by service mesh operator
      enabled: false
    global:
      tracer:
        zipkin:
          # Set Endpoint for Trace Collection
          address: external-jaeger-collector.istio-system.svc.cluster.local:9411
    kiali:
      # Set Jaeger dashboard URL
      dashboard:
        jaegerURL: https://external-jaeger-istio-system.apps.test
      # Set Endpoint for Trace Querying
      jaegerInClusterURL: external-jaeger-query.istio-system.svc.cluster.local