我在kubernetes + istio集群中部署了应用程序。我使用http探针进行准备检查。在Kiali的Graph部分中,kube-probe流量显示为从unkonwn到httpbin的一条线。我试图添加“x-b3-sampled”http标头以避免此流量的记录。但它不起作用。有没有方法可以隐藏来自kube-probe的流量?
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: httpbin
spec:
replicas: 1
template:
metadata:
labels:
app: httpbin
version: v1
spec:
containers:
- image: docker.io/citizenstig/httpbin
imagePullPolicy: IfNotPresent
name: httpbin
ports:
- containerPort: 8000
readinessProbe:
httpGet:
path: /get
port: 8000
httpHeaders:
- name: 'x-b3-sampled'
value: '0'
initialDelaySeconds: 5
timeoutSeconds: 1
livenessProbe:
tcpSocket:
port: 8000
initialDelaySeconds: 5
timeoutSeconds: 1
更新:这实际上将在Istio 1.1中得到修复,好的部分是您可以轻松地自己应用补丁而无需等待1.1,因为它在yaml配置中:
补丁链接:https://github.com/istio/istio/pull/10480
因此,对于Istio 1.0.x,您基本上必须在名称空间Rule
中编辑名为promhttp
的istio-system
类型的自定义资源,以设置以下match
表达式:
match: (context.protocol == "http" || context.protocol == "grpc") && (match((request.useragent | "-"), "kube-probe*") == false)
初步回应:
我不确定是否有一个“干净”的解决方案,但是这个文档页面底部描述了一个解决方法:https://istio.io/docs/tasks/traffic-management/app-health-check/#liveness-and-readiness-probes-with-http-request-option
因为Istio代理仅拦截在containerPort字段中显式声明的端口,所以无论是否启用了Istio相互TLS,到8002端口的流量都会绕过Istio代理。
因此,您可以使用不会声明为容器端口的不同端口来使用您的健康端点,这样,流量不会被特使代理拦截,因此不会在Kiali中生成遥测。
这不是一个理想的解决方案,因为它迫使你以某种方式为Istio塑造你的应用程序......但是,它仍然有效。
[编辑,刚发现:https://istio.io/help/faq/telemetry/#controlling-what-the-sidecar-reports。看起来您也可以根据来源过滤遥测的请求。虽然我不确定它是否会在源“未知”的情况下起作用