首先,根据 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