ssl - 如何在 Istio 中同时启用 Mutual TLS 和 gRPC TLS 以便 Istio 可以收集指标,但 gRPC 认为连接 "Safe"

标签 ssl grpc istio

这是一个“原则上”的问题,因为我试图了解 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

所以,问题就变成了:

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

  • <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/

    相关文章:

    Apache CXF + grails - 间歇性错误 - https URL 主机名与公用名 (CN) 不匹配

    amazon-web-services - AWS 经典负载均衡器是否在 tls 终止后保留 SNI?

    java - 使用 SSL 加密和 NTLM 身份验证的 HttpClient 失败

    apache - 通过证书授权

    go - 未实现的 desc = 未知服务 protos.ChaincodeSupport

    Java GRPC : invalidate dns cache

    grpc - 如何在 bloomrpc 中添加 token

    kubernetes - 出站 https 流量的 Envoy 过滤器

    kubernetes - 如何配置 GKE 的 Istio 以限制导出?

    java - Paho MQTT客户端仅使用密码时是否支持加密