如何在Kiali图中隐藏来自kube-probe的流量?

问题描述 投票:1回答:1

我在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
kubernetes istio kiali
1个回答
3
投票

更新:这实际上将在Istio 1.1中得到修复,好的部分是您可以轻松地自己应用补丁而无需等待1.1,因为它在yaml配置中:

补丁链接:https://github.com/istio/istio/pull/10480

因此,对于Istio 1.0.x,您基本上必须在名称空间Rule中编辑名为promhttpistio-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。看起来您也可以根据来源过滤遥测的请求。虽然我不确定它是否会在源“未知”的情况下起作用

© www.soinside.com 2019 - 2024. All rights reserved.