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

如何在Istio服务网格中注入自定义Sidecar实现双JWT验证?

自定义Sidecar注入Istio环境的实现步骤

首先明确:Istio完全支持部署自定义Sidecar,无需依赖默认的Envoy Sidecar,以下是具体操作方向:

1. 禁用默认Sidecar自动注入

先确保目标Pod不会被自动注入Istio默认Sidecar,有两种生效方式:

  • 给应用所在命名空间打标签,全局禁用该命名空间的自动注入:
    kubectl label namespace <你的命名空间> istio-injection=disabled
    
  • 或在Deployment的Pod模板中添加注解,仅对当前Deployment生效:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: <你的应用部署名>
    spec:
      template:
        metadata:
          annotations:
            sidecar.istio.io/inject: "false"
        # ... 其他Pod配置内容
    

2. 将自定义Sidecar加入Deployment

把你开发的Sidecar容器直接定义到应用Pod的容器列表中,同时配置流量拦截规则,确保请求先经过自定义Sidecar再转发到应用容器:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: <你的应用部署名>
spec:
  replicas: 1
  selector:
    matchLabels:
      app: <你的应用标签>
  template:
    metadata:
      labels:
        app: <你的应用标签>
      annotations:
        sidecar.istio.io/inject: "false"
    spec:
      containers:
        # 自定义JWT验证Sidecar
        - name: custom-jwt-sidecar
          image: <你的自定义Sidecar镜像地址>
          ports:
            - containerPort: 8080 # Sidecar用于接收外部请求的监听端口
          env:
            - name: APP_TARGET_PORT
              value: "9090" # 应用容器的监听端口
          # 可选:通过iptables自动拦截Pod入口流量,转发到Sidecar
          command: ["/bin/sh", "-c"]
          args:
            - |
              iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080;
              exec /path/to/your/sidecar/entrypoint;
        # 业务应用容器
        - name: app-container
          image: <你的应用镜像地址>
          ports:
            - containerPort: 9090

3. 配置服务与流量路由(可选)

如果需要通过Istio Gateway暴露服务,需确保VirtualService指向你的应用Service,且Service的端口对应自定义Sidecar的监听端口:

apiVersion: v1
kind: Service
metadata:
  name: <你的应用服务名>
spec:
  selector:
    app: <你的应用标签>
  ports:
    - name: http
      port: 80
      targetPort: 8080 # 指向自定义Sidecar的监听端口
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: <你的虚拟服务名>
spec:
  hosts:
    - <你的访问域名>
  gateways:
    - <你的Gateway名称>
  http:
    - route:
        - destination:
            host: <你的应用服务名>
            port:
              number: 80

备选优化方案:基于Istio Envoy扩展实现双JWT验证

如果你不想维护完整的自定义Sidecar,也可以利用Istio的Envoy Filter机制,通过WASM或Lua插件扩展Envoy原生能力,实现双JWT验证逻辑——这种方式复用Istio的流量管理体系,无需从零开发Sidecar组件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:15:42