【问题标题】:How to enable both Mutual TLS and gRPC TLS in Istio such that Istio can collect metrics, but gRPC considers the connection "Safe"如何在 Istio 中同时启用 Mutual TLS 和 gRPC TLS,以便 Istio 可以收集指标,但 gRPC 认为连接“安全”
【发布时间】:2019-06-05 05:19:35
【问题描述】:

这是一个“原则上”的问题,因为我试图了解 mTLS 在 Istio 中的实现方式,以及它如何与其他支持 mTLS 的服务(例如 gRPC)一起工作。

假设我有一个启用了“mtls Everywhere”的集群。这有效地通过 mTLS 管道在 envoy 代理之间建立所有 TCP 连接,并且 envoy 和服务之间的连接是纯文本的。

但是,有些服务至少需要 TLS 连接才能连接到 envoy 代理;理想情况下是 mTLS 连接。其中之一是 gRPC,它需要 TLS 才能使用其核心 JWT 身份验证:

https://grpc.io/docs/guides/auth.html#authenticate-with-google

所以,问题变成了:

  • 是否可以让特使代理“窥探”在原始服务本身以其他方式进行 mTLS 加密的连接?理想情况下使用 Citadel 提供的证书和密钥
  • 另外的解决方案是创建一个新的身份验证方法,忽略它在纯文本上的事实,因为它将由 Istio 进行 mTLS?

【问题讨论】:

    标签: ssl grpc istio


    【解决方案1】:

    Istio 试图解决的众多问题之一是将证书管理从应用层转移到 Sidecar 容器。我个人不知道使用 Citadel 管理应用程序容器中的证书的方法,至于“窥探”,您可以尝试使用 envoy filter 做一些事情,但即使您可以,这将是自定义解决方案,很容易休息。不知何故,我认为这行不通,或者根本无法做到。您的第一个问题/方法似乎走错了路。

    很遗憾,我无法直接回答您的第二个问题,但我曾短暂参与过一个项目,该项目使用带有 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
    

    【讨论】:

      猜你喜欢
      • 2020-05-07
      • 2018-06-18
      • 1970-01-01
      • 2021-06-09
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      相关资源
      最近更新 更多