2

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

在 Envoy 的文档中,我找到了以下配置选项:forward_client_cert允许在 header 中传递主题以及其他信息x-forwarded-client-cert,尽管我找不到在 Istio 中启用它的方法。

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

4

1 回答 1

3

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

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

一旦应用了这一点,对 ingress 的 https 调用会将X-Forwarded-Client-Cert标头转发到服务器。

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

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: myApp
  namespace: default
spec:
  host: myApp
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL
于 2019-03-21T18:15:41.563 回答