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

集群内非Istio服务网格应用访问网格内服务的解决方法

解决网格外Pod访问网格内服务的403权限问题

针对你的场景,有几种不用Istio Gateway就能让网格外的应用A访问网格内应用B的方案:

方案1:调整Istio RBAC策略,放行网格外请求

Istio的RBAC默认会拒绝没有携带Istio身份信息的请求(也就是网格外无Sidecar的Pod发起的请求)。你可以通过创建AuthorizationPolicy来允许指定来源的访问:

仅允许ns-outside-mesh命名空间的请求

创建如下YAML文件(替换成你的应用标签和端口):

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-outside-mesh-access
  namespace: ns-inside-mesh
spec:
  selector:
    matchLabels:
      app: appB # 应用B的Pod标签
  action: ALLOW
  rules:
  - from:
    - source:
        namespaces: ["ns-outside-mesh"]
    to:
    - operation:
        ports: ["80"] # 应用B的服务端口

执行命令应用:

kubectl apply -f <文件名>.yaml

允许所有网格外的集群内请求

如果要开放给所有网格外的Pod,可使用principals: ["unknown"](Istio用unknown标识未经过Sidecar处理的请求):

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: allow-all-outside-mesh
  namespace: ns-inside-mesh
spec:
  selector:
    matchLabels:
      app: appB
  action: ALLOW
  rules:
  - from:
    - source:
        principals: ["unknown"]
    to:
    - operation:
        ports: ["80"]

方案2:给应用A所在命名空间开启Sidecar注入(可选)

如果可以接受给应用A的Pod添加Istio Sidecar,直接给ns-outside-mesh命名空间打标签开启自动注入:

kubectl label namespace ns-outside-mesh istio-injection=enabled

之后重启应用A的Pod,Sidecar会自动注入。此时Istio会为请求添加身份信息,再配合允许ns-outside-mesh来源的RBAC策略即可正常访问。

方案3:让应用B的Service绕过Istio拦截(不推荐)

通过给应用B的Service添加注解,让Istio不对其流量进行处理,这样网格外请求可以直接访问Pod,绕过RBAC检查:

apiVersion: v1
kind: Service
metadata:
  name: serviceB
  namespace: ns-inside-mesh
  annotations:
    istio.io/exclude-inbound-ports: "80" # 替换成服务端口,用"*"可排除所有端口
spec:
  selector:
    app: appB
  ports:
  - port: 80
    targetPort: 8080

注意:这种方式会让应用B失去Istio提供的监控、熔断等所有功能,仅在特殊场景下使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 08:50:06