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

如何配置Istio实现Pod仅访问外部网络、拒绝所有集群内部通信

核心问题排查

你的配置存在两处错误,直接导致规则不符合预期:

  • Sidecar 配置的 egress.hosts 字段填写了 default/*,该规则会允许 Pod 访问 default 命名空间下所有集群内部服务,和你拒绝所有集群内访问的需求完全冲突。
  • 你定义的匹配所有外部域名的 all-external ServiceEntry 没有被 Sidecar 的 egress 规则引入,所以不会生效。

正确配置方案

1. Sidecar 配置

仅在 egress 规则中引入你定义的外部 ServiceEntry,不要加入任何集群内服务的引用:

apiVersion: networking.istio.io/v1beta1
kind: Sidecar
metadata:
  name: test
  namespace: default # 替换为你的Pod实际所在命名空间
spec:
  workloadSelector:
    labels:
      k8s-app: mypod
  outboundTrafficPolicy:
    mode: REGISTRY_ONLY
  egress:
    - hosts:
        # 格式为 <ServiceEntry所在命名空间>/<ServiceEntry名称>
        - 'default/all-external'

2. ServiceEntry 配置

你原有 ServiceEntry 配置基本符合要求,仅需确保命名空间和 Sidecar 中引用的一致即可,如果需要支持更多外部端口,可自行补充 ports 字段:

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: all-external
  namespace: default # 和Sidecar中引用的命名空间保持一致
spec:
  location: MESH_EXTERNAL
  resolution: DNS
  hosts:
    - '*'
  ports:
    - name: http
      protocol: HTTP
      number: 80
    - name: https
      protocol: TLS
      number: 443

效果验证

  • 访问集群内部服务(例如 kubernetes.default.svc.cluster.local),会提示连接失败,符合拒绝集群内访问的要求。
  • 访问公网域名(例如 baidu.com)可以正常连通,符合允许所有互联网访问的要求。

注意事项

如果你的 ServiceEntry 部署在其他命名空间(比如 istio-system),需要将 Sidecar 配置中的 default/all-external 替换为对应命名空间的引用,例如 istio-system/all-external。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:45:09