0

我正在尝试安装普罗米修斯操作员并使用边车注入。Mutual TLS 已打开,并且适用于 Jaeger。对于操作员,尽管我们在操作员准入作业中遇到了失败(见图)。普罗米修斯操作员错误

我相信 Istio 会导致这种情况,就好像我在 istio 之前发布 prometheus-operator 或没有 istio 它可以正常工作,但是它没有被注入。

我尝试在 istio 操作员边车设置中设置以下内容:

rewriteapphttpprobe:true

我还尝试将 readinessInitialDelaySeconds 延长到 10 秒,但仍然出现错误。还有其他人有什么想法吗?

4

1 回答 1

2

首先,根据 istio文档, Prometheus 默认用作 istio 网格中的默认观察运算符:

默认的Istio 指标由 Istio 附带的一组配置工件定义,并默认导出到Prometheus。运营商可以自由修改这些指标的形式和内容,以及改变他们的收集机制,以满足他们各自的监控需求。

因此,通过让 istio 注入 prometheus 运算符,您最终会在您的 istio 网格中拥有两个 Prometheus 运算符。

其次,当您在 istio 网格中强制执行 Mutual TLS 时,每个连接都必须是安全的 ( TLS)。正如你提到的,它在没有 istio 注入的情况下有效。

所以最可能的原因是就绪探测失败,因为它使用了不安全的协议(纯文本),这是你会出错HTTP的原因之一。503

如果您真的需要在 istio 网格中使用 prometheus 运算符,可以通过为就绪探测创建 tls 模式来DestinationRule解决此问题。Disable

例子:

$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
 name: "readiness-probe-dr"
 namespace: "prometheus-namespace"
spec:
 host: "prometheus-prometheus-oper-prometheus.svc.cluster.local"
 trafficPolicy:
   tls:
     mode: DISABLE
EOF

注意:确保对其进行修改,使其与您的命名空间和主机匹配。网格内还可能存在其他一些普罗米修斯碰撞。


另一种解决方案是首先不注入 prometheus istio。您可以使用以下命令在 prometheus 命名空间中禁用 istio 注入:

$ kubectl get namespace -L istio-injection
NAME              STATUS   AGE     ISTIO-INJECTION
default           Active   4d22h   enabled
istio-system      Active   4d22h   disabled
kube-node-lease   Active   4d22h   
kube-public       Active   4d22h   
kube-system       Active   4d22h   
prometheus        Active   30s     enabled
$ kubectl label namespace prometheus istio-injection=disabled --overwrite
namespace/prometheus labeled
$ kubectl get namespace -L istio-injection
NAME              STATUS   AGE     ISTIO-INJECTION
default           Active   4d22h   enabled
istio-system      Active   4d22h   disabled
kube-node-lease   Active   4d22h   
kube-public       Active   4d22h   
kube-system       Active   4d22h   
prometheus        Active   73s     disabled
于 2019-12-11T11:47:46.007 回答