我正在尝试让 prometheus 与 istio 一起使用,并启用网格范围的严格 mTLS。从 istio 文档来看,istio 证书已与 prometheus 容器共享,并更新报废作业以使用这些证书。
在此处的同一 TLS 设置部分中,“控制平面、网关和 Envoy sidecar 指标都将通过明文进行抓取。但是,应用程序指标将遵循为工作负载配置的任何 Istio 身份验证策略。”
当 15020 端口(指标合并端口)被排除在代理重定向(从 istio-init 容器中找到)之外时,应用程序指标将如何遵循应用的身份验证策略/mTLS。
这是否意味着,我们应该使用原始端口而不是 istio 公开的端口?
PROXY_PORT=15001
PROXY_INBOUND_CAPTURE_PORT=15006
PROXY_TUNNEL_PORT=15008
PROXY_UID=1337
PROXY_GID=1337
INBOUND_INTERCEPTION_MODE=REDIRECT
INBOUND_TPROXY_MARK=1337
INBOUND_TPROXY_ROUTE_TABLE=133
INBOUND_PORTS_INCLUDE=*
INBOUND_PORTS_EXCLUDE=15090,15021,15020
根据我的理解,您应该使用应用程序公开的原始端口,而不是 sidecar 端口。
我不确定这是否适用于您,但以下是您可以在网格中抓取 mTLS 处于
STRICT
模式的位置的方法之一。
再次强调,如果您的组织安全不允许这样做,则不要实施它。
我们通过应用
PeerAuthentication
策略禁用了应用程序的 Prometheus 抓取端口的 mTLS,因为我们的指标没有返回任何敏感数据。
apiVersion: security.istio.io/v1
kind: PeerAuthentication
metadata:
name: default
namespace: foo
spec:
selector:
matchLabels:
app: fluentd
mtls:
mode: STRICT
portLevelMtls:
24231:
mode: DISABLE
24231
是应用程序暴露的Prometheus抓取端口。应用程序的其他端口需要 mTLS,但不需要抓取端口。
https://istio.io/latest/docs/reference/config/security/peer_authentication/