我正在尝试安装prometheus运算符并使用sidecar进行注入。相互TLS已打开,并且对于Jaeger来说可以正常使用。对于操作员,尽管我们在操作许可工作上遇到了失败(请参见图片)。
我相信Istio会导致这种情况,就像我在istio之前释放prometheus-operator或不使用istio一样,它都可以,但是没有注入。
我尝试在istio操作员辅助设置中设置以下内容:
rewriteapphttpprobe:true
我也尝试将readinessInitialDelaySeconds扩展到10s,但仍然会收到错误。其他人有什么想法吗?
答案 0 :(得分:0)
根据istio documentation的所有字段,默认情况下,Prometheus用作istio网格中的默认观察算子:
default Istio metrics由Istio附带的一组配置工件定义,并且默认情况下导出到Prometheus。运营商可以自由修改这些指标的形状和内容,并可以更改其收集机制,以满足他们各自的监视需求。
因此,通过将istio注入prometheus运算符,您最终在istio网格中得到了两个Prometheus运算符。
第二,当您在istio网格中强制执行Mutual TLS时,每个连接都必须安全(TLS
)。正如您提到的,在没有组织注射的情况下,它可以工作。
因此,最有可能的原因是准备就绪探针失败,因为它使用的是不安全的(纯文本)HTTP
协议,这是您将获得503
错误的原因之一。 / p>
如果您真的需要在istio网格中使用prometheus运算符,可以通过仅将DestinationRule
设置为Disable
tls模式来解决此问题,仅用于准备就绪探针。
示例:
$ 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注入:
$ 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