如何禁用Istio的Pilot发送Zipkin追踪Span数据?
如何禁用Istio向Zipkin发送追踪Span数据?
嘿,你说得太对了——Istio向Zipkin发送追踪Span的逻辑确实和Mixer无关,是由Sidecar代理(也就是Envoy)直接处理的,而Pilot负责把追踪相关的配置推送给各个Sidecar。要禁用这个行为,分两种场景来操作就好:
1. 全局范围内禁用
如果想让整个服务网格都停止向Zipkin发送Span,可以修改Istio的全局Mesh配置:
方式一:通过IstioOperator配置(推荐,适用于istioctl安装的场景)
编辑你的IstioOperator配置文件,添加或修改meshConfig部分:
apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: meshConfig: # 彻底关闭所有追踪功能(包括其他后端如Jaeger) enableTracing: false # 如果你只想禁用Zipkin而保留其他追踪后端,就清空Zipkin的地址配置 # tracing: # zipkin: # address: ""
然后执行更新命令让配置生效:
istioctl install --set profile=default -f your-operator-config.yaml
方式二:直接修改istio-system下的ConfigMap
如果是通过其他方式安装的Istio,可以直接编辑istio-system命名空间里的istio ConfigMap:
apiVersion: v1 kind: ConfigMap metadata: name: istio namespace: istio-system data: mesh: | # 彻底关闭追踪 enableTracing: false # 或者仅禁用Zipkin # tracing: # zipkin: # address: ""
修改完成后,重启Istiod和IngressGateway组件让配置生效:
kubectl rollout restart deployment istiod -n istio-system kubectl rollout restart deployment istio-ingressgateway -n istio-system
2. 针对单个工作负载/命名空间禁用
如果不想全局禁用,只是特定服务不需要发送Span到Zipkin,可以通过Sidecar的自定义配置来实现:
单个Deployment
给目标Deployment添加注解,指定禁用Zipkin追踪:
apiVersion: apps/v1 kind: Deployment metadata: name: your-app-deployment annotations: # 确保Sidecar已注入 sidecar.istio.io/inject: "true" # 自定义Sidecar配置,清空Zipkin地址 proxy.istio.io/config: | tracing: zipkin: address: ""
更新Deployment后,新的Pod会应用这个配置。
整个命名空间
给目标命名空间添加注解,让该命名空间下所有注入Sidecar的Pod都禁用Zipkin:
apiVersion: v1 kind: Namespace metadata: name: your-target-namespace annotations: istio-injection: enabled proxy.istio.io/config: | tracing: zipkin: address: ""
之后该命名空间下新创建的Pod都会生效,已存在的Pod需要重启。
注意:如果设置
enableTracing: false会完全关闭Envoy的追踪过滤器,所有追踪数据都不会生成;而仅清空Zipkin地址的话,Istio还是会生成Span,但不会发送到Zipkin,如果你有其他追踪后端(比如Jaeger)的配置,Span会发送到对应后端。
内容的提问来源于stack exchange,提问作者Jxadro
相关产品推荐
相关产品推荐

