我有一种情况,我将在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。
答案 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传递的证书,而不是客户端在标头中发送的证书,我仍在查看。