Istio Envoy 代理转发客户端证书信息

Istio Envoy Proxy forwarding client certificate info

我们有一个带有 Istio 1.0(带有 Envoy 代理)和其他一些东西的 Kubernetes 集群。 我们使用 Istio 的网关来验证客户端证书。我们想将客户端证书的主题传递给内部服务。

Here 在 Envoy 的文档中我发现了以下配置选项:forward_client_cert 可以在 header [=12= 中的其他信息中传递主题], 虽然我没找到在 Istio 中启用它的方法。

有没有人试过做类似的事情并成功了?还是 Istio 不支持?

这是一个迟到的答案,但 1.1.0 release 支持转发客户端证书详细信息。这是 https 网关的默认行为,但是,您需要全局启用双向 TLS 才能使其正常工作。为此应用以下 MeshPolicy object:

apiVersion: "authentication.istio.io/v1alpha1"
kind: "MeshPolicy"
metadata:
  name: "default"
spec:
  peers:
  - mtls: {}

应用后,对入口的 https 调用会将 X-Forwarded-Client-Cert header 转发到服务器。

但是请记住,启用全局 mtls 后,集群内的服务到服务调用也必须使用 tls。这可以通过为模式设置为 ISTIO_MUTUAL 的每个服务创建一个 DestinationRule 来完成(或者 MUTUAL 如果您想使用自己的客户端证书而不是 Citadel 生成的证书):

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: myApp
  namespace: default
spec:
  host: myApp
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL