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

Istio虚拟服务如何配置仅允许本地网络通过FQDN访问

实现方案

最适配你现有架构的实现方式是通过Istio原生的AuthorizationPolicy(授权策略)配置源IP白名单,无需改动现有Gateway、VirtualService的基础配置,步骤如下:


步骤1:确保Ingress Gateway能获取真实客户端源IP

这是IP限制规则生效的前提,需要调整两处配置:

  1. 修改Istio Ingress Gateway的Service配置,新增externalTrafficPolicy: Local,避免SNAT导致源IP丢失:
# 你原有的istio-ingressgateway Service配置新增如下字段
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local # 新增该行
  selector:
    istio: ingressgateway
  # 其余原有配置保持不变
  1. 调整Istio Gateway配置,启用转发头识别,适配公网负载均衡的X-Forwarded-For透传:
# 你原有的default-gateway配置新增如下字段
spec:
  selector:
    istio: ingressgateway
  servers:
  # 原有80、443端口配置保持不变
  # 新增网关拓扑配置
  config:
    gatewayTopology:
      numTrustedProxies: 1 # 按你实际的前置负载均衡层数调整,1层公网LB就填1

步骤2:创建IP白名单授权策略

针对需要限制仅内网访问的服务,创建如下AuthorizationPolicy,将允许的内网网段和对应服务的FQDN填入即可:

apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: internal-service-access-control
  namespace: test
spec:
  selector:
    matchLabels:
      istio: ingressgateway
  # 允许内网网段访问指定内部服务
  rules:
  - from:
    - source:
        # 填入你本地内网的网段,按需调整
        ipBlocks: ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
    to:
    - operation:
        # 填入所有需要仅内网访问的服务FQDN
        hosts: ["portainer.test.test", "other-internal-svc.test.test"]
  # 兜底规则:所有不符合上述条件的访问该类域名的请求直接拒绝
  action: DENY
  rules:
  - to:
    - operation:
        hosts: ["portainer.test.test", "other-internal-svc.test.test"]

配置后即时生效,外部公网IP访问这些内部服务域名时会直接返回403拒绝,内网访问不受影响。


可选扩展方案(适合内部服务数量较多的场景)

你也可以拆分两套独立的Istio Ingress Gateway:

  • 一套公网Gateway,绑定公网LB,用于对外开放的服务
  • 一套内网Gateway,仅绑定内网IP,不对外暴露,所有内部服务的VirtualService绑定到该内网Gateway
    同时DNS层面配置:内部服务的FQDN仅在内网DNS做解析,公网DNS不配置该类记录,从网络层面彻底隔离公网访问路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:36:02