使用第 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 的
类型 | 属性 | 正向匹配 | 负向匹配 |
---|---|---|---|
来源 | 对等身份 | principals | notPrincipals |
来源 | 命名空间 | namespaces | notNamespaces |
来源 | IP 块 | ipBlocks | notIpBlocks |
操作 | 目标端口 | ports | notPorts |
条件 | 来源 IP | source.ip | n/a |
条件 | 来源命名空间 | source.namespace | n/a |
条件 | 来源身份 | source.principal | n/a |
条件 | 远程 IP | destination.ip | n/a |
条件 | 远程端口 | destination.port | n/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
模式。此类策略将被忽略。