Istio基于IP的访问限制配置无效问题求助
Istio基于真实客户端IP实现访问限制解决方案
从你提供的Envoy调试日志可以看到,X-Forwarded-For头已经包含真实客户端IP 98.XXX.XXX.66,但Istio当前是基于直接连接的负载均衡IP(10.240.208.62)做访问控制,导致你的remoteIpBlocks规则无法匹配真实IP,从而触发403拦截。
解决步骤
1. 配置IngressGateway信任前端负载均衡,解析真实IP
通过EnvoyFilter让Istio从X-Forwarded-For中提取真实客户端IP,需根据前端负载均衡的层数调整配置:
apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: ingressgateway-xff namespace: istio-system spec: workloadSelector: labels: app: istio-ingressgateway configPatches: - applyTo: NETWORK_FILTER match: context: GATEWAY listener: filterChain: filter: name: "envoy.filters.network.http_connection_manager" subFilter: name: "envoy.filters.http.router" patch: operation: MERGE value: typed_config: "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager" xff_num_trusted_hops: 1 # 前端有N层负载均衡就设为N use_remote_address: false skip_xff_append: true # 可选:指定可信代理IP段,避免恶意伪造X-Forwarded-For trusted_proxies: - address_prefix: "10.240.0.0" # 替换为你的负载均衡IP段 prefix_len: 16
xff_num_trusted_hops:设置信任的代理层数,Envoy会跳过前N个IP,取X-Forwarded-For中剩余的第一个IP作为真实客户端IPuse_remote_address: false:禁用直接连接IP的使用,改用X-Forwarded-For中的IPskip_xff_append: true:禁止Envoy向X-Forwarded-For追加自身IP,避免头信息冗余
2. 保留现有AuthorizationPolicy配置
你的当前AuthorizationPolicy无需修改,当Istio正确解析真实IP后,remoteIpBlocks: ["98.XXX.XXX.66"]会自动匹配真实客户端IP,实现仅允许指定IP访问的效果。
3. 验证生效
重新应用上述配置后,查看Envoy日志,若日志中客户端IP显示为98.XXX.XXX.66且请求返回200,则说明配置生效。
内容的提问来源于stack exchange,提问作者Hari Narayanan
相关产品推荐
相关产品推荐

