You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Apache Ranger与Istio网格集成并嵌入Envoy Proxy请求逻辑?

将Apache Ranger集成为Istio外部授权器并嵌入Envoy逻辑

1. 用Envoy外部授权过滤器搭建基础链路

Istio的外部授权依赖Envoy的ext_authz过滤器实现,首先通过EnvoyFilter给目标Sidecar(比如网关或业务Pod)配置该过滤器,将请求转发至Ranger授权服务:

  • 先确认Ranger的授权REST接口(通常为/service/public/api/v2/authz/check),确保网格内Envoy可访问Ranger服务。
  • 编写EnvoyFilter配置,将ext_authz插入HTTP过滤链,指定Ranger服务集群与超时:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: ranger-ext-authz
  namespace: istio-system
spec:
  workloadSelector:
    labels:
      istio: ingressgateway # 替换为你需要授权的工作负载标签
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: GATEWAY
      listener:
        portNumber: 8080
        filterChain:
          filter:
            name: "envoy.filters.network.http_connection_manager"
            subFilter:
              name: "envoy.filters.http.router"
    patch:
      operation: INSERT_BEFORE
      value:
        name: "envoy.filters.http.ext_authz"
        typed_config:
          "@type": "type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz"
          grpc_service:
            envoy_grpc:
              cluster_name: "ranger-service-cluster" # 提前在Istio中定义Ranger服务集群
            timeout: 0.5s
          failure_mode_allow: false # 授权失败直接拒绝请求

2. 适配Ranger请求格式(复用ranger-plugin逻辑)

Ranger授权请求有固定格式(需包含用户、资源、操作等信息),Envoy默认请求格式不兼容,需做转换:

  • 最直接的方式是搭建中间转换服务,将你现有的ranger-plugin请求构建、审计逻辑封装其中:Envoy将请求元数据(如用户头、请求路径、HTTP方法)发送至该服务,服务用ranger-plugin组装成Ranger可识别的请求,调用Ranger授权API后,将允许/拒绝结果返回给Envoy。
  • 审计逻辑直接嵌入中间服务——调用Ranger前后,用ranger-plugin的审计接口记录请求详情、授权结果即可。

3. 将中间服务接入Istio网格

  • 将封装好的中间服务部署至K8s,开启Istio Sidecar注入,确保Envoy可访问该服务。
  • 调整EnvoyFilter中的ext_authz配置,将目标集群改为中间服务的集群,使Envoy先将请求元数据发送至中间服务,再由其与Ranger交互。

4. 验证与调试

  • 发送测试请求,查看Envoy日志确认是否正确转发授权请求至中间服务,以及中间服务是否正确调用Ranger并返回结果。
  • 查看Ranger审计页面,确认审计记录正常生成。
  • 执行istioctl pc envoy <目标Pod名> -o yaml查看Sidecar配置,确认ext_authz过滤器已加载。

5. 进阶:用Wasm扩展直接嵌入逻辑(可选)

若不想搭建中间服务,可将ranger-plugin逻辑编译为Envoy的Wasm扩展:

  • 基于Envoy Wasm SDK(支持C++/Rust/TinyGo)编写Wasm插件,实现以下逻辑:
    • 从Envoy请求中提取用户、资源、操作等元数据
    • 调用ranger-plugin逻辑构建授权请求
    • 向Ranger服务发送HTTP请求
    • 根据授权结果决定允许/拒绝请求
    • 执行审计操作
  • 将Wasm插件部署至Istio,通过EnvoyFilter配置Sidecar加载该插件。

内容的提问来源于stack exchange,提问作者pacman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:33:25