这是一个“原则上”的问题,因为我试图了解 mTLS 在 Istio 中的实现方式,以及它如何与其他支持 mTLS 的服务(例如 gRPC)一起工作。
考虑一下我有一个启用了“mtls无处不在”的集群。这有效地通过 mTLS 管道在 envoy 代理之间建立所有 TCP 连接,并且 envoy 和服务之间的连接是纯文本的。
但是,有些服务至少需要 TLS 连接才能连接到 envoy 代理;理想情况下是 mTLS 连接。其中之一是 gRPC,它需要 TLS 才能使用其核心 JWT 身份验证:
https://grpc.io/docs/guides/auth.html#authenticate-with-google
所以,问题就变成了:
<3 干杯
最佳答案
Istio 试图解决的众多问题之一是将证书管理从应用层转移到 Sidecar 容器。我个人不知道如何使用 Citadel 来管理应用程序容器中的证书,至于“窥探”,您可以尝试使用 envoy filter 进行 cooking 。 ,但即使你可以,这将是很容易破坏的自定义解决方案。不知何故,我认为这不会奏效,或者根本无法完成。您的第一个问题/方法似乎走错了路。
不幸的是,我无法直接回答您的第二个问题,但我曾短暂参与过一个使用 gRPC 微服务的项目,其中 JWT已由 Istio 验证,我们肯定没有处理容器中的证书。因此,在没有具体实现细节的情况下,我会说选项二是可行的方法。
值得一提的是所使用的身份验证策略示例。
apiVersion: "authentication.istio.io/v1alpha1"
kind: "Policy"
metadata:
name: {{ template "service.name" . }}
labels:
app: {{ template "service.name" . }}
chart: {{ template "service.chart" . }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
targets:
- name: {{ template "service.name" . }}
origins:
- jwt:
issuer: https://auth.company.com/
jwksUri: https://auth-service.auth.svc.cluster.local:8008/keys/public
audiences:
- dGQVkdEluc3RhrmNps:CompanyApp:CompanyOrg
principalBinding: USE_ORIGIN
关于ssl - 如何在 Istio 中同时启用 Mutual TLS 和 gRPC TLS 以便 Istio 可以收集指标,但 gRPC 认为连接 "Safe",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54126974/