使用第 4 层安全策略

Istio 的 安全策略 的第 4 层 (L4) 功能由 ztunnel 支持,并且在 环境模式 下可用。如果您集群有支持它们的 CNI 插件,则 Kubernetes 网络策略 也会继续工作,并且可以用来提供纵深防御。

ztunnel 和 航点代理 的分层使您可以选择是否为给定工作负载启用第 7 层 (L7) 处理。要使用 L7 策略和 Istio 的流量路由功能,您可以 为您的工作负载部署航点。由于策略现在可以在两个地方执行,因此需要了解一些 注意事项

使用 ztunnel 执行策略

当工作负载注册到 安全覆盖模式 时,ztunnel 代理可以执行授权策略执行。执行点是连接路径中的接收(服务器端)ztunnel 代理。

基本的 L4 授权策略如下所示

apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
 name: allow-curl-to-httpbin
spec:
 selector:
   matchLabels:
     app: httpbin
 action: ALLOW
 rules:
 - from:
   - source:
       principals:
       - cluster.local/ns/ambient-demo/sa/curl

此策略可在 边车模式 和环境模式下使用。

Istio AuthorizationPolicy API 的 L4(TCP)功能在环境模式下的功能行为与边车模式相同。当没有配置授权策略时,默认操作为 ALLOW。一旦配置了策略,被策略目标的 Pod 仅允许显式允许的流量。在上面的示例中,具有标签 app: httpbin 的 Pod 仅允许来自具有身份主体 cluster.local/ns/ambient-demo/sa/curl 的来源的流量。来自所有其他来源的流量将被拒绝。

定位策略

边车模式和环境中的 L4 策略以相同的方式定位:它们通过策略对象所在的命名空间和 spec 中可选的 selector 来进行范围限定。如果策略位于 Istio 根命名空间(传统上为 istio-system),则它将定位所有命名空间。如果它位于任何其他命名空间,则它将仅定位该命名空间。

环境模式中的 L7 策略由航点执行,航点使用 Kubernetes 网关 API 配置。它们使用 targetRef 字段附加

允许的策略属性

授权策略规则可以包含 来源 (from)、操作 (to) 和 条件 (when) 子句。

此属性列表决定策略是否被认为是仅限 L4 的

类型属性正向匹配负向匹配
来源对等身份principalsnotPrincipals
来源命名空间namespacesnotNamespaces
来源IP 块ipBlocksnotIpBlocks
操作目标端口portsnotPorts
条件来源 IPsource.ipn/a
条件来源命名空间source.namespacen/a
条件来源身份source.principaln/a
条件远程 IPdestination.ipn/a
条件远程端口destination.portn/a

具有第 7 层条件的策略

ztunnel 无法执行 L7 策略。如果匹配 L7 属性(即上面表格中未列出的属性)的规则的策略被定位到将由接收的 ztunnel 执行,则它将通过成为 DENY 策略而安全失败。

此示例添加了对 HTTP GET 方法的检查

apiVersion: security.istio.io/v1
kind: AuthorizationPolicy
metadata:
 name: allow-curl-to-httpbin
spec:
 selector:
   matchLabels:
     app: httpbin
 action: ALLOW
 rules:
 - from:
   - source:
       principals:
       - cluster.local/ns/ambient-demo/sa/curl
   to:
   - operation:
       methods: ["GET"]
EOF

即使客户端 Pod 的身份正确,L7 属性的存在也会导致 ztunnel 拒绝连接

command terminated with exit code 56

引入航点时选择执行点

将航点代理添加到工作负载后,现在您有两个可以执行 L4 策略的位置。(L7 策略只能在航点代理上执行。)

仅使用安全覆盖,流量以来源工作负载的身份出现在目标 ztunnel。

航点代理不会模拟来源工作负载的身份。一旦您将航点引入流量路径,目标 ztunnel 将看到具有航点身份的流量,而不是来源身份。

这意味着当您安装航点时,执行策略的理想位置会发生变化。即使您只想针对 L4 属性执行策略,如果您依赖于来源身份,您也应该将策略附加到航点代理。另一个策略可以定位到您的工作负载,以使其 ztunnel 执行诸如“网内流量必须来自我的航点才能到达我的应用程序”之类的策略。

对等认证

Istio 的 对等身份验证策略(配置双向 TLS (mTLS) 模式)由 ztunnel 支持。

环境模式的默认策略为 PERMISSIVE,它允许 Pod 接受 mTLS 加密流量(来自网格内部)和平文流量(来自网格外部)。启用 STRICT 模式意味着 Pod 将只接受 mTLS 加密流量。

由于 ztunnel 和 HBONE 意味着使用 mTLS,因此无法在策略中使用 DISABLE 模式。此类策略将被忽略。

这些信息对您有用吗?
您有什么改进建议吗?

感谢您的反馈!