我们有一个带有Istio 1.0的Kubernetes集群(带有Envoy代理)和其他一些东西。我们使用Istio的网关来验证客户端证书。我们希望将客户证书的内容传递给内部服务。
在Envoy文档中的Here我找到了以下配置选项:forward_client_cert
,它允许在标题x-forwarded-client-cert
中传递主题和其他信息,虽然我找不到在Istio中启用它的方法。
有没有人试图做类似的事情并取得成功?或者Istio不支持这个?
这是一个迟到的答案,但1.1.0 release支持转发客户端证书详细信息。这是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
,如果您想使用自己的客户端证书而不是Citadel生成的那些服务)创建MUTUAL
来完成:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: myApp
namespace: default
spec:
host: myApp
trafficPolicy:
tls:
mode: ISTIO_MUTUAL