我将应用程序部署在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
答案 0 :(得分:3)
更新:这实际上将在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代理。
因此,您可以使您的运行状况端点使用您不会声明的其他端口作为容器端口,这样,流量就不会被特使代理拦截,因此不会在凯莉。
这不是理想的解决方案,因为它会迫使您以某种方式为Istio调整应用程序的形状……但仍然有效。
[编辑,刚刚发现:https://istio.io/help/faq/telemetry/#controlling-what-the-sidecar-reports。看起来您也可以根据来源过滤掉遥测中的请求。虽然我不确定在源为“未知”的情况下它是否会起作用]