在Istio中为“ set_current_client_cert_details”配置EnvoyFilter

时间:2020-08-01 22:59:19

标签: istio envoyproxy

我有一种情况,我将在Istio Ingress网关处终止TLS通信并将其转发到相应的服务。还设置了mTls和ISTIO_MUTUAL。在调用集群中的Ingress-Gateway时,我需要验证正在发送的客户端证书,并且我打算在代码中进行验证,为此我需要将整个证书转发到我的服务代码。

我尝试如下配置EnvoyFilter:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: xfcc-forward
  namespace: xfcc
spec:
  workloadSelector:
    labels:
      istio: ingressgateway
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: GATEWAY
      listener:
        filterChain:
          sni: "*"
    patch:
      operation: MERGE
      value:
        set_current_client_cert_details:
            cert: true

这在申请时失败,我猜可能是因为我没有正确配置它。有人可以帮助我为我的方案配置正确的EF。

1 个答案:

答案 0 :(得分:2)

我认为我可以使用此配置:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: xfcc-forward
  namespace: xfcc
spec:
  configPatches:
  - applyTo: NETWORK_FILTER
    match:
      context: GATEWAY
      listener:
        filterChain:
          filter:
            name: "envoy.http_connection_manager"
    patch:
      operation: MERGE
      value:
        typed_config:
          "@type": "type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager"
          forward_client_cert_details: ALWAYS_FORWARD_ONLY
          set_current_client_cert_details:
            subject: true
            cert: true
            chain: true

我可以看到带有证书值的XFCC标头,但是证书是Citadel为mTls传递的证书,而不是客户端在标头中发送的证书,我仍在查看。