写了出口规则,应用就不能直连外部了吗

orders 在取得 inventory-v1 的报价后还会访问 external-stub。如果为这个目标声明 ServiceEntry 并配置出口网关,受代理接管的请求可以走 orders → sidecar → egress gateway → external-stub;但若同一个工作负载还能在网络层直接连上 stub,路由声明没有证明所有出口都经网关。这里必须同时问两个问题:代理把已捕获的请求送去了哪里?不经过代理的连接能否建立?

出口网关路径与直连绕过路径分开验证

上图的实线是预期的代理路径,虚线是必须试探的绕过路径。ServiceEntry 让代理识别外部服务,VirtualService 等路由配置决定符合条件的请求经过出口网关;DestinationRule 中的 TLS 设置涉及指定连接段。它们都不能单凭对象存在证明应用无法通过其他地址、端口或未捕获流量出网。Istio 的 ALLOW_ANY 与 REGISTRY_ONLY 是代理对未知服务的处理模式,不是宿主机或集群范围的出站防火墙。

哪条连接加密,谁负责解析名字

以一个受控的 HTTP 测试站点为例,可以让源 sidecar 到出口网关用网格内连接,网关再与外部服务建立 HTTPS 连接(TLS origination)。后半段 TLS 的服务端身份校验、SNI 和证书信任应由实际发起该段连接的一方配置并验证;不能把“外部站点是 HTTPS”写成应用到 sidecar、sidecar 到网关均自动获得同一加密保证。若应用一开始就发 HTTPS 并保持 TLS 透传,代理通常无法读取加密的 HTTP path 或 header 来实施七层匹配。

解析外部域名也有位置之分:应用侧、sidecar 和出口网关可能分别使用 DNS 或代理端点信息。Istio 出口网关示例特别提醒,将请求先转给网关、再由网关访问外部主机时,不能随意把 ServiceEntry 的解析方式设为 NONE,否则可能再次把流量送回网关。观察应包含实际解析结果、出口网关上游连接与外部 stub 收到的请求,而不是只展示一份 YAML。

真正要强制经过出口,须在受控集群中对来源工作负载配置支持执行的网络层规则:默认拒绝其直接出站,只放行所需 DNS、出口网关及其他明确依赖,再放行网关访问受控外部服务。Kubernetes NetworkPolicy 的执行取决于网络插件;策略对象创建成功不代表已生效。规则通常按 Pod/命名空间、IP/端口限制,域名经 DNS 变化、hostNetwork 或其他未覆盖路径需要分别审计。出站到网关的限制与网关自己的出站限制是两道不同关口;不能只封其中一道就宣称没有绕过可能。

同一条服务链的正反例

先在 examples/service-mesh/ 使用无网格进程基线:

1
bash scripts/run-00.sh

此脚本的正常路径是 loadgen → frontend → orders → inventory-v1 + external-stub,仅绑定 127.0.0.1。成功响应及 stub 日志可以确认应用确实访问了 stub;直接访问 stub 的回环地址也能说明此进程实验没有出口强制边界。不能把它表述成“经过出口网关”,也不能因为配置了一个空上游就声称 NetworkPolicy 拒绝了直连。要补一组负例,应在隔离环境里同时从 orders 发起代理路径和指定的直连测试:若仍允许直连,则强制约束不成立;启用已验证生效的网络限制后,要求前者可达、后者连接失败,并记录网关日志、来源 Pod 日志与外部 stub 收到的请求。

现有工程没有 Kubernetes 对象、出口网关或执行网络策略的 CNI;当前出站网关、TLS origination、DNS 位置和绕过阻断实验均为 NOT_RUN。实验表格留待填写,不能以进程响应补出虚构的集群结果:

场景 来源请求与退出码 代理/网关实际路径 stub 收到的请求 网络阻断证据
走网关,允许 待运行 待运行 待运行 待运行
直连 stub,拒绝 待运行 待运行 待运行 待运行

练习与参考解答

  1. ServiceEntry 已创建,应用直接连外部 IP 仍成功,是否说明服务注册失败?参考解答:不能。先区分连接是否被代理捕获、地址是否命中规则、代理对未知目标的模式;若目标是强制出口,再检查来源 Pod 的网络隔离与插件是否执行,不能拿注册当防火墙。
  2. 出口网关访问 HTTPS stub 成功,能否从此认定应用出站都安全且网关不可绕过?参考解答:不能。既要记录网关到 stub 的 TLS 校验,也要从同一来源尝试直连 stub 地址,要求直连失败而网关路径成功;另核对应用到 sidecar、sidecar 到网关各段的身份与加密配置。

官方参考与系列导航

系列导航:17 入口网关 → 18 出口强制边界(本文)→ 19 工作负载身份。