这是一个“原则上”的问题,因为我试图了解 mTLS 在 Istio 中的实现方式,以及它如何与支持 mTLS 的服务(例如 gRPC)一起工作。
考虑到我有一个启用了“mtls 无处不在”的集群。这有效地在 envoy 代理之间通过 mTLS 管道建立了所有 TCP 连接的隧道,并且 envoy 和服务之间的连接是纯文本的。
但是,有些服务至少需要 TLS 连接才能使用 Envoy 代理;理想情况下是 mTLS 连接。其中之一是 gRPC,它需要 TLS 才能使用其核心 JWT 身份验证:
https://grpc.io/docs/guides/auth.html#authenticate-with-google
所以,问题变成了:
<3 干杯
Istio 试图解决的众多问题之一是将证书管理从应用程序层卸载到 sidecar 容器。我个人不知道如何使用 Citadel 来管理应用程序容器中的证书,至于“窥探”,您可能会尝试使用envoy 过滤器来烹饪一些东西,但即使您可以,这也将是很容易破坏的自定义解决方案。不知何故,我认为这行不通,或者根本无法做到。您的第一个问题/方法似乎走错了路。
不幸的是,我无法直接回答您的第二个问题,但我曾短暂参与过一个项目,该项目使用带有JWT 的gRPC 微服务,该服务已由 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
971 次 |
| 最近记录: |