将工作负载添加到服务网格
在大多数情况下,集群管理员将部署 Istio 网格基础设施。一旦 Istio 成功部署并支持环境 数据平面 模式,它将对所有用户在已配置为使用它的命名空间中部署的应用程序透明可用。
为服务网格中的应用程序启用 Ambient 模式
要将应用程序或命名空间添加到环境模式下的网格中,请将标签 istio.io/dataplane-mode=ambient
添加到相应的资源。您可以将此标签应用于命名空间或单个 Pod。
就应用程序 Pod 而言,环境模式可以完全透明地无缝启用(或禁用)。与 Sidecar 数据平面模式不同,无需重新启动应用程序即可将其添加到网格中,并且它们不会显示为在其 Pod 中部署了额外的容器。
第 4 层和第 7 层功能
安全的 L4 覆盖层支持身份验证和授权策略。 了解环境模式下的 L4 策略支持。要选择使用 Istio 的 L7 功能(例如流量路由),您需要 部署一个 Waypoint 代理并注册您的工作负载以使用它。
Ambient 和 Kubernetes NetworkPolicy
不同数据平面模式下的 Pod 之间通信
使用环境数据平面模式的应用程序 Pod 与非环境端点(包括 Kubernetes 应用程序 Pod、Istio 网关或 Kubernetes 网关 API 实例)之间存在多种互操作性选项。这种互操作性提供了多种选项,可以将环境和非环境工作负载无缝集成到同一个 Istio 网格中,从而允许根据网格部署和操作的需要分阶段引入环境功能。
服务网格外部的 Pod
您可能有一些命名空间根本不属于网格的一部分,无论是在 Sidecar 模式还是环境模式下。在这种情况下,非网格 Pod 会直接向目标 Pod 发起流量,而不会经过源节点的 ztunnel,而目标 Pod 的 ztunnel 会强制执行任何 L4 策略以控制是否允许或拒绝流量。
例如,在启用了环境模式的命名空间中设置一个将 mTLS 模式设置为 STRICT
的 PeerAuthentication
策略,将导致来自网格外部的流量被拒绝。
使用 Sidecar 模式的服务网格内部 Pod
Istio 支持同一网格中具有 Sidecar 的 Pod 与使用环境模式的 Pod 之间的东-西互操作性。Sidecar 代理知道使用 HBONE 协议,因为已发现目标是 HBONE 目标。
将 mTLS 模式设置为 STRICT
的 PeerAuthentication
策略将允许来自具有 Istio Sidecar 代理的 Pod 的流量。
入口和出口网关以及 Ambient 模式 Pod
入口网关可以在非环境命名空间中运行,并公开由环境模式、Sidecar 模式或非网格 Pod 提供的服务。环境模式下的 Pod 与 Istio 出口网关之间的互操作性也受支持。
Ambient 和 Sidecar 模式的 Pod 选择逻辑
Istio 的两种数据平面模式(Sidecar 和环境)可以在同一个集群中共存。务必确保同一 Pod 或命名空间不会同时配置为使用这两种模式。但是,如果确实发生了这种情况,则 Sidecar 模式目前优先于此类 Pod 或命名空间。
请注意,理论上可以通过分别对单个 Pod 进行标记(而不是命名空间标签)来设置同一命名空间内的两个 Pod 以使用不同的模式;但是,不建议这样做。对于大多数常见用例,应为单个命名空间内的所有 Pod 使用单一模式。
确定 Pod 是否已设置为使用环境模式的确切逻辑如下
在
cni.values.excludeNamespaces
中配置的istio-cni
插件配置排除列表用于跳过排除列表中的命名空间。如果满足以下条件,则 Pod 使用
ambient
模式:- 命名空间或 Pod 具有标签
istio.io/dataplane-mode=ambient
- Pod 不具有选择退出标签
istio.io/dataplane-mode=none
- Pod 上不存在注释
sidecar.istio.io/status
- 命名空间或 Pod 具有标签
避免配置冲突的最简单方法是用户确保每个命名空间都具有 Sidecar 注射标签(istio-injection=enabled
)或环境模式标签(istio.io/dataplane-mode=ambient
),但绝不能同时具有两者。
标签参考
以下标签控制资源是否包含在环境模式下的网格中,是否使用 Waypoint 代理来为您的资源强制执行 L7 策略,以及如何将流量发送到 Waypoint。
名称 | 功能状态 | 资源 | 描述 |
---|---|---|---|
istio.io/dataplane-mode | Beta | 命名空间 或 Pod (后者优先) | 将您的资源添加到环境网格。 有效值: ambient 或 none 。 |
istio.io/use-waypoint | Beta | 命名空间 、服务 或 Pod | 使用 Waypoint 将流量发送到标记的资源以进行 L7 策略强制执行。 有效值: {waypoint-name} 或 none 。 |
istio.io/waypoint-for | Alpha | 网关 | 指定 Waypoint 将为哪些类型的端点处理流量。 有效值: service 、workload 、none 或 all 。此标签是可选的,默认值为 service 。 |
为了使您的 istio.io/use-waypoint
标签值生效,您必须确保 Waypoint 已针对其将为其处理流量的资源类型进行配置。默认情况下,Waypoint 接受服务的流量。例如,当您使用 istio.io/use-waypoint
标签将 Pod 标记为使用特定 Waypoint 时,应将 Waypoint 标记为 istio.io./waypoint-for
,其值为 workload
或 all
。