簡體   English   中英

如何在 Istio 中同時啟用 Mutual TLS 和 gRPC TLS,以便 Istio 可以收集指標,但 gRPC 認為連接是“安全的”

[英]How to enable both Mutual TLS and gRPC TLS in Istio such that Istio can collect metrics, but gRPC considers the connection "Safe"

這是一個“原則上”的問題,因為我試圖了解 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

所以,問題變成了:

  • 是否可以讓特使代理“窺探”在原始服務本身進行 mTLS 加密的連接? 理想情況下使用 Citadel 提供的證書和密鑰
  • 否則解決方案是創建一種新的身份驗證方法,忽略它是在明文上的事實,因為它將被 Istio 使用 mTLS 嗎?

<3 干杯

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM