网络安全性
在 Red Hat OpenShift Service on AWS 中保护网络流量并强制实施网络策略
摘要
第 1 章 了解网络策略 API 复制链接链接已复制到粘贴板!
网络策略使用集群范围的网络策略 API 定义。通过在这些不同级别上定义网络策略,您可以为集群创建复杂的网络安全配置,包括完整的多租户隔离。
1.1. 网络策略及其范围 复制链接链接已复制到粘贴板!
- 集群范围的网络策略
集群和网络管理员可以使用 AdminNetworkPolicy 在集群级别上定义网络策略。AdminNetworkPolicy 功能由两个 API 组成:
AdminNetworkPolicyAPI 和BaselineAdminNetworkPolicyAPI。这些 API 用于设置可应用到整个集群的规则,或委派给命名空间范围的NetworkPolicy。当设置为 "Allow" 或 "Deny" 时,使用
AdminNetworkPolicyAPI 定义的策略优先于所有其他策略类型。但是,管理员也可以使用"Pass"将给定策略负责委派给命名空间范围的NetworkPolicy,以允许应用程序开发人员和命名空间租户控制其项目网络安全性的特定方面。使用
BaselineAdminNetworkPolicyAPI 定义的策略仅在没有其他网络策略覆盖它们时才适用。当您使用AdminNetworkPolicyAPI 将网络策略方面委托给命名空间范围的NetworkPolicy时,您还应在BaselineAdminNetworkPolicy中定义合理的最小限制。这样可确保在命名空间NetworkPolicy没有足够保护时,集群级别的网络安全性基准级别。- 命名空间范围的网络策略
-
应用程序开发人员和命名空间租户可以使用
NetworkPolicyAPI 为特定命名空间定义网络策略规则。一个命名空间的NetworkPolicy中的规则优先于使用 BaselineAdminNetworkPolicy API 配置的集群范围规则,或用于集群范围AdminNetworkPolicyAPI 中委派或"传递"的集群范围规则。
1.2. 如何评估和应用网络策略 复制链接链接已复制到粘贴板!
当建立网络连接时,网络供应商(默认为 OVN-Kubernetes)会根据网络策略规则检查连接详情,以确定如何处理连接。
OVN-Kubernetes 按以下顺序评估针对网络策略对象的连接:
在 AdminNetworkPolicy 层检查 是否有匹配项。
-
如果连接与
Allow或Deny规则匹配,请按照该规则和停止评估。 -
如果连接与
Pass规则匹配,请移到 NetworkPolicy 层。
-
如果连接与
在 NetworkPolicy 层检查 是否有匹配项。
- 如果连接与规则匹配,请按照该规则进行操作并停止评估。
- 如果没有找到匹配项,请移到 BaselineAdminNetworkPolicy 层。
- 遵循 BaselineAdminNetworkPolicy 层中的匹配规则。
图 1.1. OVN-Kubernetes 评估网络策略
1.3. AdminNetworkPolicy 和 NetworkPolicy 自定义资源之间的主要区别 复制链接链接已复制到粘贴板!
下表解释了集群范围的 AdminNetworkPolicy API 和命名空间范围 NetworkPolicy API 之间的主要区别。
| 策略元素 | AdminNetworkPolicy | NetworkPolicy |
|---|---|---|
| 适用的用户 | 集群管理员 | 命名空间所有者 |
| 影响范围 | Cluster | Namespace |
| 丢弃流量 |
当显式 |
在策略创建时通过隐式 |
| 委派流量 |
| 不适用。 |
| 允许流量 |
显式 | 所有规则的默认操作都是 allow。 |
| 策略中的规则优先级 | 取决于它们出现在 ANP 中的顺序。位置更高的规则有更高的优先级。 | 规则是添加的。 |
| 策略优先级 |
在 ANP 中, | 在策略之间没有策略排序。 |
| 功能优先级 | 首先通过 1 层 ACL 和 BANP 评估,最后通过第 3 层 ACL 评估。 | 在 ANP 之后,BANP 之前强制实施,它们会在 ACL 层 2 中进行评估。 |
| 匹配 pod 选择 | 在命名空间之间可应用不同的规则。 | 可以在单一命名空间中的 pod 之间应用不同的规则。 |
| 集群出口流量 |
通过 |
通过 |
| 集群入口流量 | 不支持。 | 不支持。 |
| 完全限定域名 (FQDN) 对等支持 | 不支持。 | 不支持。 |
| 命名空间选择器 |
支持通过使用 |
支持使用 |
第 2 章 管理网络策略 复制链接链接已复制到粘贴板!
2.1. OVN-Kubernetes AdminNetworkPolicy 复制链接链接已复制到粘贴板!
2.1.1. AdminNetworkPolicy 复制链接链接已复制到粘贴板!
AdminNetworkPolicy (ANP)是一个集群范围的自定义资源定义(CRD)。作为 Red Hat OpenShift Service on AWS 管理员,您可以在创建命名空间前创建网络策略来使用 ANP 来保护您的网络。另外,您可以在集群范围的级别上创建网络策略,该级别不可由 NetworkPolicy 对象覆盖。
AdminNetworkPolicy 和 NetworkPolicy 对象之间的关键区别在于,供管理员使用,是集群范围,而后者则用于租户所有者,并且是命名空间范围。
ANP 允许管理员指定以下内容:
-
确定其评估顺序的
priority值。数值越低,优先级越高。 - 由应用策略的一组命名空间或命名空间组成的一组 pod。
-
要应用到
subject的所有入口流量的入站规则列表。 -
用于来自
subject的所有出口流量的出口规则列表。
2.1.1.1. AdminNetworkPolicy 示例 复制链接链接已复制到粘贴板!
例 2.1. ANP 的 YAML 文件示例
- 1
- 为您的 ANP 指定一个名称。
- 2
spec.priority字段支持在一个集群中最大 100 ANP(范围为0-99)。数越低,优先级越高,因为范围是从按最低到最高值的顺序读取的。因为当以同一优先级创建 ANP 时,无法保证哪些策略会被优先使用,所以请使用不同的优先级来设置 ANPs。- 3
- 指定要应用 ANP 资源的命名空间。
- 4
- ANP 具有入口和出口规则。
spec.ingress字段的 ANP 规则接受Pass,Deny,action字段接受的值为Allow。 - 5
- 为
ingress.name指定一个名称。 - 6
- 指定
podSelector.matchLabels,以选择namespaceSelector.matchLabels作为入口对等选择的命名空间中的 pod。 - 7
- ANP 同时具有入口和出口规则。
spec.egress字段的 ANP 规则接受Pass,Deny,action字段接受的值为Allow。
2.1.1.2. 规则的 AdminNetworkPolicy 操作 复制链接链接已复制到粘贴板!
作为管理员,您可以将您的 AdminNetworkPolicy 规则的 action 字段设置为 Allow,Deny, 或 Pass。由于 OVN-Kubernetes 使用分层 ACL 来评估网络流量规则,因此 3NP 允许您设置非常强大的策略规则,它们只能被管理员修改、删除规则,或通过设置更高优先级规则来覆盖它们。
2.1.1.2.1. AdminNetworkPolicy Allow 示例 复制链接链接已复制到粘贴板!
在优先级 9 中定义的以下 ANP 可确保允许从 monitoring 命名空间到集群中的任何租户(所有其他命名空间)的所有入口流量。
例 2.2. 强 Allow ANP 的 YAML 文件示例
这是强的 Allow ANP 的示例,因为它不可以被涉及的所有方覆盖。租户都不会阻止自己被使用 NetworkPolicy 对象监控,监控租户也不知道它可以或无法监控的内容。
2.1.1.2.2. AdminNetworkPolicy 拒绝示例 复制链接链接已复制到粘贴板!
在优先级 5 中定义的以下 ANP 可确保 monitoring 命名空间中的所有入口流量都被阻止到受限租户(具有标签 security: restricted的命名空间)。
例 2.3. 强 Deny ANP 的 YAML 文件示例
这是一个强大的 Deny ANP,这是所有涉及的方都无法覆盖的。受限租户所有者无法授权自己允许监控流量,基础架构监控服务无法从这些敏感命名空间中提取任何内容。
与强的 Allow 示例结合使用时,block-monitoring ANP 具有较低优先级的值,赋予其优先级更高的优先级,这样可确保不会监控受限租户。
2.1.1.2.3. AdminNetworkPolicy Pass 示例 复制链接链接已复制到粘贴板!
在优先级 7 定义的以下 ANP 可确保所有从 monitoring 命名空间到内部基础架构租户(具有标签 security: internal)的入口流量都将传递到 ACL 的层 2,并由命名空间的 NetworkPolicy 对象评估。
例 2.4. 强 Pass ANP 的 YAML 文件示例
这个示例是一个强大的 Pass 操作 ANP,因为它将决策委派给租户所有者定义的 NetworkPolicy 对象。如果基础架构监控服务应使用命名空间范围 NetworkPolicy 对象提取其指标,则此 pass-monitoring ANP 允许在安全级别 internal 分组的所有租户所有者。
2.2. OVN-Kubernetes BaselineAdminNetworkPolicy 复制链接链接已复制到粘贴板!
2.2.1. BaselineAdminNetworkPolicy 复制链接链接已复制到粘贴板!
BaselineAdminNetworkPolicy (BANP)是一个集群范围的自定义资源定义(CRD)。作为 Red Hat OpenShift Service on AWS 管理员,您可以使用 BANP 设置并强制实施可选的基准网络策略规则,以便在需要时使用 NetworkPolicy 对象覆盖和强制实施使用 NetworkPolicy 对象的用户覆盖。BANP 的规则操作是 allow 或 deny。
BaselineAdminNetworkPolicy 资源是一个集群单例对象,当传递的流量策略与集群中的任何 NetworkPolicy 对象不匹配时,可用作 guardrail 策略。BANP 也可以用作默认安全模型,该模型默认阻止集群内流量,用户需要使用 NetworkPolicy 对象来允许已知的流量。在创建 BANP 资源时,必须使用 default 作为名称。
管理员可通过 BANP 指定:
-
由一组命名空间或命名空间的
subject。 -
要应用到
subject的所有入口流量的入站规则列表。 -
用于来自
subject的所有出口流量的出口规则列表。
2.2.1.1. BaselineAdminNetworkPolicy 示例 复制链接链接已复制到粘贴板!
例 2.5. BANP 的 YAML 文件示例
2.2.1.2. BaselineAdminNetworkPolicy 拒绝示例 复制链接链接已复制到粘贴板!
以下 BANP 单例确保管理员为 internal 安全级别进入租户的所有入口监控流量设置了默认的拒绝策略。与 "AdminNetworkPolicy Pass example" 组合时,这个 deny 策略充当 ANP pass-monitoring 策略传递的所有入口流量的保护策略。
例 2.6. guardrail Deny 规则的 YAML 文件示例
您可以将带有 action 字段的值为 Pass 的 AdminNetworkPolicy 资源与 BaselineAdminNetworkPolicy 资源结合使用来创建多租户策略。此多租户策略允许一个租户在应用上收集监控数据,同时不从第二个租户收集数据。
作为管理员,如果您同时应用了 "AdminNetworkPolicy Pass action example" 和 "BaselineAdminNetwork Policy Deny example",则租户将保留创建在 BANP 之前评估的 NetworkPolicy 资源。
例如,租户 1 可以设置以下 NetworkPolicy 资源来监控入口流量:
例 2.7. NetworkPolicy 示例
在这种情况下,Tenant 1 会在 "AdminNetworkPolicy Pass action example" 之后,"BaselineAdminNetwork Policy Deny example" 之前被评估,它将拒绝所有进入 安全级别 internal 的入口监控流量。随着租户 1 的 NetworkPolicy 对象就位,它们将能够在其应用程序中收集数据。但是,租户 2 没有任何 NetworkPolicy 对象,将无法收集数据。作为管理员,您没有默认监控内部租户,而是创建了 BANP,它允许租户使用 NetworkPolicy 对象覆盖 BANP 的默认行为。
第 3 章 网络策略 复制链接链接已复制到粘贴板!
3.1. 关于网络策略 复制链接链接已复制到粘贴板!
作为开发者,您可以定义网络策略来限制集群中 pod 的流量。
3.1.1. 关于网络策略 复制链接链接已复制到粘贴板!
默认情况下,项目中的所有 pod 都可被其他 pod 和网络端点访问。要在一个项目中隔离一个或多个 Pod,您可以在该项目中创建 NetworkPolicy 对象来指示允许的入站连接。项目管理员可以在自己的项目中创建和删除 NetworkPolicy 对象。
如果一个 pod 由一个或多个 NetworkPolicy 对象中的选择器匹配,那么该 pod 将只接受至少被其中一个 NetworkPolicy 对象所允许的连接。未被任何 NetworkPolicy 对象选择的 pod 可以完全访问。
网络策略仅适用于传输控制协议(TCP)、用户数据报协议(UDP)、互联网控制消息协议(ICMP)和流控制传输协议(SCTP)协议。其他协议不会受到影响。
- 网络策略不适用于主机网络命名空间。启用主机网络的 Pod 不受网络策略规则的影响。但是,连接到 host-networked pod 的 pod 会受到网络策略规则的影响。
-
使用没有将
podSelector字段设置为{}的namespaceSelector字段将不会包括hostNetworkpod。您必须使用namespaceSelector字段,podSelector设置为{},以便在创建网络策略时目标hostNetworkpod。 - 网络策略无法阻止来自 localhost 或来自其驻留的节点的流量。
以下示例 NetworkPolicy 对象演示了支持不同的情景:
拒绝所有流量:
要使项目默认为拒绝流量,请添加一个匹配所有 pod 但不接受任何流量的
NetworkPolicy对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 只允许 AWS Ingress Controller 上的 Red Hat OpenShift Service 的连接:
要使项目只允许 AWS Ingress Controller 上的 Red Hat OpenShift Service 的连接,请添加以下
NetworkPolicy对象。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 只接受项目中 pod 的连接:
重要要允许同一命名空间中的
hostNetworkpod 的入站连接,您需要将allow-from-hostnetwork策略与allow-same-namespace策略一起应用。要使 pod 接受同一项目中其他 pod 的连接,但拒绝其他项目中所有 pod 的连接,请添加以下
NetworkPolicy对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 仅允许基于 pod 标签的 HTTP 和 HTTPS 流量:
要对带有特定标签(以下示例中的
role=frontend)的 pod 仅启用 HTTP 和 HTTPS 访问,请添加类似如下的NetworkPolicy对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用命名空间和 pod 选择器接受连接:
要通过组合使用命名空间和 pod 选择器来匹配网络流量,您可以使用类似如下的
NetworkPolicy对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
NetworkPolicy 对象是可添加的;也就是说,您可以组合多个 NetworkPolicy 对象来满足复杂的网络要求。
例如,对于以上示例中定义的 NetworkPolicy 对象,您可以在同一个项目中定义 allow-same-namespace 和 allow-http-and-https 策略。因此,允许带有标签 role=frontend 的 pod 接受每一策略所允许的任何连接。即,任何端口上来自同一命名空间中的 pod 的连接,以及端口 80 和 443 上的来自任意命名空间中 pod 的连接。
3.1.1.1. 使用 allow-from-router 网络策略 复制链接链接已复制到粘贴板!
使用以下 NetworkPolicy 来允许外部流量,而不考虑路由器配置:
- 1
policy-group.network.openshift.io/ingress:""标签支持 OVN-Kubernetes。
3.1.1.2. 使用 allow-from-hostnetwork 网络策略 复制链接链接已复制到粘贴板!
添加以下 allow-from-hostnetwork NetworkPolicy 对象来指示来自主机网络 pod 的流量。
3.1.2. 使用 OVN-Kubernetes 网络插件优化网络策略 复制链接链接已复制到粘贴板!
在设计您的网络策略时,请参考以下指南:
-
对于具有相同
spec.podSelectorspec 的网络策略,使用带有多个ingress或egress规则的一个网络策略比带有ingress或egress子集的多个网络策略更高效。 每个基于
podSelector或namespaceSelectorspec 的ingress或egress规则会生成一个的 OVS 流数量,它与由网络策略选择的 pod 数量 + 由 ingress 或 egress 选择的 pod 数量成比例因此,最好使用在一个规则中可以选择您所需的 pod 的podSelector或namespaceSelector规格,而不是为每个 pod 创建单独的规则。例如,以下策略包含两个规则:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下策略表示这两个规则与以下相同的规则:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 相同的指南信息适用于
spec.podSelectorspec。如果不同的网络策略有相同的ingress或egress规则,则创建一个带有通用的spec.podSelectorspec 可能更有效率。例如,以下两个策略有不同的规则:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下网络策略将这两个相同的规则作为一个:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当只有多个选择器表示为一个选择器时,您可以应用此优化。如果选择器基于不同的标签,则可能无法应用此优化。在这些情况下,请考虑为网络策略优化应用一些新标签。
3.1.2.1. OVN-Kubernetes 中的 NetworkPolicy CR 和外部 IP 复制链接链接已复制到粘贴板!
在 OVN-Kubernetes 中,NetworkPolicy 自定义资源(CR)强制执行严格的隔离规则。如果服务使用外部 IP 公开,网络策略可以阻止来自其他命名空间的访问,除非明确配置为允许流量。
要允许在命名空间间访问外部 IP,请创建一个 NetworkPolicy CR,该 CR 明确允许来自所需命名空间的入口流量,并确保允许流量在指定的服务端口中。在不允许流量到所需端口的情况下,访问可能仍然会被限制。
输出示例
其中:
<policy_name>- 指定策略的名称。
<my_namespace>- 指定部署策略的命名空间的名称。
如需了解更多详细信息,请参阅"关于网络策略"。
3.1.3. 后续步骤 复制链接链接已复制到粘贴板!
3.2. 创建网络策略 复制链接链接已复制到粘贴板!
作为集群管理员,您可以为命名空间创建网络策略。
3.2.1. 示例 NetworkPolicy 对象 复制链接链接已复制到粘贴板!
下文解释了示例 NetworkPolicy 对象:
3.2.2. 使用 CLI 创建网络策略 复制链接链接已复制到粘贴板!
要定义细致的规则来描述集群中命名空间允许的入口或出口网络流量,您可以创建一个网络策略。
如果使用具有 cluster-admin 角色的用户登录,则可以在集群中的任何命名空间中创建网络策略。
先决条件
-
集群使用支持
NetworkPolicy对象的网络插件,如带有设置了mode: NetworkPolicy的 OpenShift SDN 网络插件。 -
已安装 OpenShift CLI(
oc)。 -
使用具有
admin权限的用户登陆到集群。 - 您在网络策略要应用到的命名空间中。
流程
创建策略规则:
创建一个
<policy_name>.yaml文件:touch <policy_name>.yaml
$ touch <policy_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<policy_name>- 指定网络策略文件名。
在您刚才创建的文件中定义网络策略,如下例所示:
拒绝来自所有命名空间中的所有 pod 的入口流量
这是一个基本的策略,阻止配置其他网络策略所允许的跨 pod 流量以外的所有跨 pod 网络。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 允许来自所有命名空间中的所有 pod 的入口流量
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 允许从特定命名空间中到一个 pod 的入口流量
此策略允许流量从在
namespace-y中运行的 pod 中获取pod-a标签。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令来创建网络策略对象。成功输出列出了策略对象的名称
以及创建的状态。oc apply -f <policy_name>.yaml -n <namespace>
$ oc apply -f <policy_name>.yaml -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<policy_name>- 指定网络策略文件名。
<namespace>- 可选参数。如果您在与当前命名空间不同的命名空间中定义了对象,则参数会特定于命名空间。
成功输出列出了策略对象的名称
以及创建的状态。
如果您使用 cluster-admin 权限登录到 web 控制台,您可以选择在集群中的任何命名空间中以 YAML 或 web 控制台的形式创建网络策略。
3.2.3. 创建默认拒绝所有网络策略 复制链接链接已复制到粘贴板!
此策略会阻止由配置其他部署的网络策略和主机网络 pod 间的网络流量允许的所有跨 pod 网络。此流程通过在 my-project 命名空间中应用 deny-by-default 策略来强制实施强大的拒绝策略。
如果没有配置允许流量通信的 NetworkPolicy 自定义资源(CR),以下策略可能会导致集群中的通信问题。
先决条件
-
集群使用支持
NetworkPolicy对象的网络插件,如带有设置了mode: NetworkPolicy的 OpenShift SDN 网络插件。 -
已安装 OpenShift CLI(
oc)。 -
使用具有
admin权限的用户登陆到集群。 - 您在网络策略要应用到的命名空间中。
流程
创建以下 YAML,以定义
deny-by-default策略,以拒绝所有命名空间中的所有 pod 的入口流量。将 YAML 保存到deny-by-default.yaml文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令应用策略。成功输出列出了策略对象的名称
以及创建的状态。oc apply -f deny-by-default.yaml
$ oc apply -f deny-by-default.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功输出列出了策略对象的名称
以及创建的状态。
3.2.4. 创建网络策略以允许来自外部客户端的流量 复制链接链接已复制到粘贴板!
使用 deny-by-default 策略,您可以继续配置策略,允许从外部客户端到带有标签 app=web 的 pod 的流量。
如果使用具有 cluster-admin 角色的用户登录,则可以在集群中的任何命名空间中创建网络策略。
按照以下步骤配置策略,以直接从公共互联网允许外部服务,或使用 Load Balancer 访问 pod。只有具有标签 app=web 的 pod 才允许流量。
先决条件
-
集群使用支持
NetworkPolicy对象的网络插件,如带有设置了mode: NetworkPolicy的 OpenShift SDN 网络插件。 -
已安装 OpenShift CLI(
oc)。 -
使用具有
admin权限的用户登陆到集群。 - 您在网络策略要应用到的命名空间中。
流程
创建策略,以直接从公共互联网的流量或使用负载均衡器访问 pod。将 YAML 保存到
web-allow-external.yaml文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令应用策略。成功输出列出了策略对象的名称
以及创建的状态。oc apply -f web-allow-external.yaml
$ oc apply -f web-allow-external.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功输出列出了策略对象的名称
以及创建的状态。此策略允许来自所有资源的流量,包括下图所示的外部流量:
3.2.5. 创建网络策略,允许从所有命名空间中到应用程序的流量 复制链接链接已复制到粘贴板!
如果使用具有 cluster-admin 角色的用户登录,则可以在集群中的任何命名空间中创建网络策略。
按照以下步骤配置允许从所有命名空间中的所有 pod 流量到特定应用程序的策略。
先决条件
-
集群使用支持
NetworkPolicy对象的网络插件,如带有设置了mode: NetworkPolicy的 OpenShift SDN 网络插件。 -
已安装 OpenShift CLI(
oc)。 -
使用具有
admin权限的用户登陆到集群。 - 您在网络策略要应用到的命名空间中。
流程
创建一个策略,允许从所有命名空间中的所有 pod 流量到特定应用。将 YAML 保存到
web-allow-all-namespaces.yaml文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意默认情况下,如果您没有在策略对象中指定
namespaceSelector参数,则不会选择命名空间。这意味着策略只允许从网络策略部署的命名空间的流量。输入以下命令应用策略。成功输出列出了策略对象的名称
以及创建的状态。oc apply -f web-allow-all-namespaces.yaml
$ oc apply -f web-allow-all-namespaces.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功输出列出了策略对象的名称
以及创建的状态。
验证
输入以下命令在
default命名空间中启动 web 服务:oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令在
secondary命名空间中部署alpine镜像并启动 shell:oc run test-$RANDOM --namespace=secondary --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=secondary --rm -i -t --image=alpine -- shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 shell 中运行以下命令,并观察该服务是否允许请求:
wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.6. 创建网络策略,允许从一个命名空间中到应用程序的流量 复制链接链接已复制到粘贴板!
如果使用具有 cluster-admin 角色的用户登录,则可以在集群中的任何命名空间中创建网络策略。
按照以下步骤配置允许从特定命名空间中到带有 app=web 标签的 pod 的策略。您可能需要进行以下操作:
- 将流量限制为部署了生产工作负载的命名空间。
- 启用部署到特定命名空间的监控工具,以从当前命名空间中提取指标。
先决条件
-
集群使用支持
NetworkPolicy对象的网络插件,如带有设置了mode: NetworkPolicy的 OpenShift SDN 网络插件。 -
已安装 OpenShift CLI(
oc)。 -
使用具有
admin权限的用户登陆到集群。 - 您在网络策略要应用到的命名空间中。
流程
创建一个策略,允许来自特定命名空间中所有 pod 的流量,其标签为
purpose=production。将 YAML 保存到web-allow-prod.yaml文件中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令应用策略。成功输出列出了策略对象的名称
以及创建的状态。oc apply -f web-allow-prod.yaml
$ oc apply -f web-allow-prod.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功输出列出了策略对象的名称
以及创建的状态。
验证
输入以下命令在
default命名空间中启动 web 服务:oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
prod命名空间:oc create namespace prod
$ oc create namespace prodCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来标记
prod命名空间:oc label namespace/prod purpose=production
$ oc label namespace/prod purpose=productionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
dev命名空间:oc create namespace dev
$ oc create namespace devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来标记
dev命名空间:oc label namespace/dev purpose=testing
$ oc label namespace/dev purpose=testingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令在
dev命名空间中部署alpine镜像并启动 shell:oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=dev --rm -i -t --image=alpine -- shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 shell 中运行以下命令,并观察请求的原因。例如,预期的输出状态为
wget:下载超时。wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,在
prod命名空间中部署alpine镜像并启动 shell:oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- sh
$ oc run test-$RANDOM --namespace=prod --rm -i -t --image=alpine -- shCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 shell 中运行以下命令,并观察是否允许请求:
wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.7. 使用 OpenShift Cluster Manager 创建网络策略 复制链接链接已复制到粘贴板!
要定义细致的规则来描述集群中命名空间允许的入口或出口网络流量,您可以创建一个网络策略。
先决条件
- 已登陆到 OpenShift Cluster Manager。
- 您在 AWS 集群上创建了 Red Hat OpenShift Service。
- 已为集群配置身份提供程序。
- 将您的用户帐户添加到配置的身份提供程序中。
- 您在 AWS 集群上的 Red Hat OpenShift Service 中创建项目。
流程
- 在 OpenShift Cluster Manager 中点您要访问的集群。
- 点 Open console 以进入到 OpenShift Web 控制台。
- 点身份提供程序,并提供您的凭证以登录到集群。
- 使用管理员视角,在 Networking 下点 NetworkPolicies。
- 点 Create NetworkPolicy。
- 在 Policy name 字段中,提供策略的名称。
- 可选:如果此策略仅适用于一个或多个特定的 pod,您可以为特定 pod 提供标签和选择器。如果您没有选择特定 pod,则此策略将适用于集群中的所有 pod。
- 可选: 您可以通过选择 Deny all ingress traffic 或 Deny all egress traffic 复选框来阻止所有入口和出口流量。
- 您还可以添加入口和出口规则的任意组合,允许您指定您要批准的端口、命名空间或 IP 块。
在您的策略中添加入站规则:
选择 Add ingress 规则来配置新规则。此操作在 Add allowed source 下拉菜单中创建一个新的 Ingress rule 行,允许您指定如何限制入站流量。下拉菜单提供三个选项来限制您的入口流量:
- Allow pods from the same namespace 将流量限制为到同一命名空间中的 pod。您可以在命名空间中指定 pod,但将此选项留空允许来自该命名空间中的所有 pod 的流量。
- Allow pods from inside the cluster 将流量限制到与策略相同的集群中的 pod。您可以指定要允许入站流量的命名空间和 pod。将此选项留空可让来自此集群中所有命名空间和 pod 的入站流量。
- Allow peers by IP block 限制指定无域间路由 (CIDR) IP 块的流量。您可以使用例外选项阻止特定的 IP。将 CIDR 字段留空允许所有外部来源的所有入站流量。
- 您可以将所有入站流量限制为端口。如果您不添加任何端口,则流量可以访问所有端口。
在您的网络策略中添加出口规则:
选择 Add egress rule 来配置新规则。此操作会创建一个带有 Add allowed destination"* 下拉菜单的新 Egress 规则 行,它允许您指定如何限制出站流量。下拉菜单提供三个选项来限制您的出口流量:
- Allow pods from the same namespace 将出站流量限制为同一命名空间中的 pod。您可以在命名空间中指定 pod,但将此选项留空允许来自该命名空间中的所有 pod 的流量。
- Allow pods from inside the cluster 将流量限制到与策略相同的集群中的 pod。您可以指定要允许出站流量的命名空间和 pod。将这个选项留空允许来自此集群中所有命名空间和 pod 的出站流量。
- Allow peers by IP block 限制指定 CIDR IP 块的流量。您可以使用例外选项阻止特定的 IP。将 CIDR 字段留空允许所有外部来源的出站流量。
- 您可以将所有出站流量限制为端口。如果您不添加任何端口,则流量可以访问所有端口。
3.3. 查看网络策略 复制链接链接已复制到粘贴板!
作为集群管理员,您可以查看命名空间的网络策略。
3.3.1. 示例 NetworkPolicy 对象 复制链接链接已复制到粘贴板!
下文解释了示例 NetworkPolicy 对象:
3.3.2. 使用 CLI 查看网络策略 复制链接链接已复制到粘贴板!
您可以检查命名空间中的网络策略。
如果使用具有 cluster-admin 角色的用户登录,您可以查看集群中的任何网络策略。
前提条件
-
已安装 OpenShift CLI(
oc)。 -
您可以使用具有
admin权限的用户登陆到集群。 - 您在网络策略所在的命名空间中。
流程
列出命名空间中的网络策略:
要查看命名空间中定义的网络策略对象,请输入以下命令:
oc get networkpolicy
$ oc get networkpolicyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要检查特定的网络策略,请输入以下命令:
oc describe networkpolicy <policy_name> -n <namespace>
$ oc describe networkpolicy <policy_name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<policy_name>- 指定要检查的网络策略的名称。
<namespace>- 可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。
例如:
oc describe networkpolicy allow-same-namespace
$ oc describe networkpolicy allow-same-namespaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc describe命令的输出Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您使用 cluster-admin 权限登录到 web 控制台,您可以选择在集群中的任何命名空间中以 YAML 或 web 控制台的形式查看网络策略。
3.3.3. 使用 OpenShift Cluster Manager 查看网络策略 复制链接链接已复制到粘贴板!
您可以在 Red Hat OpenShift Cluster Manager 中查看网络策略的配置详情。
先决条件
- 已登陆到 OpenShift Cluster Manager。
- 您在 AWS 集群上创建了 Red Hat OpenShift Service。
- 已为集群配置身份提供程序。
- 将您的用户帐户添加到配置的身份提供程序中。
- 您创建了网络策略。
流程
- 从 OpenShift Cluster Manager Web 控制台的 Administrator 视角,在 Networking 下点 NetworkPolicies。
- 选择要查看的网络策略。
- 在 Network Policy 详情页面中,您可以查看所有相关入口和出口规则。
选择网络策略详情上的 YAML 以 YAML 格式查看策略配置。
注意您只能查看这些策略的详情。您不能编辑这些策略。
3.4. 编辑网络策略 复制链接链接已复制到粘贴板!
作为集群管理员,您可以编辑命名空间的现有网络策略。
3.4.1. 编辑网络策略 复制链接链接已复制到粘贴板!
您可以编辑命名空间中的网络策略。
如果使用具有 cluster-admin 角色的用户登录,则可以在集群中的任何命名空间中编辑网络策略。
先决条件
-
集群使用支持
NetworkPolicy对象的网络插件,如带有设置了mode: NetworkPolicy的 OpenShift SDN 网络插件。 -
已安装 OpenShift CLI(
oc)。 -
您可以使用具有
admin权限的用户登陆到集群。 - 您在网络策略所在的命名空间中。
流程
可选: 要列出一个命名空间中的网络策略对象,请输入以下命令:
oc get networkpolicy
$ oc get networkpolicyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<namespace>- 可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。
编辑网络策略对象。
如果您在文件中保存了网络策略定义,请编辑该文件并进行必要的更改,然后输入以下命令。
oc apply -n <namespace> -f <policy_file>.yaml
$ oc apply -n <namespace> -f <policy_file>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<namespace>- 可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。
<policy_file>- 指定包含网络策略的文件的名称。
如果您需要直接更新网络策略对象,请输入以下命令:
oc edit networkpolicy <policy_name> -n <namespace>
$ oc edit networkpolicy <policy_name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<policy_name>- 指定网络策略的名称。
<namespace>- 可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。
确认网络策略对象已更新。
oc describe networkpolicy <policy_name> -n <namespace>
$ oc describe networkpolicy <policy_name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<policy_name>- 指定网络策略的名称。
<namespace>- 可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。
如果您使用 cluster-admin 权限登录到 web 控制台,您可以选择在集群中的任何命名空间中以 YAML 或通过 Actions 菜单从 web 控制台中的策略编辑网络策略。
3.4.2. 示例 NetworkPolicy 对象 复制链接链接已复制到粘贴板!
下文解释了示例 NetworkPolicy 对象:
3.5. 删除网络策略 复制链接链接已复制到粘贴板!
作为集群管理员,您可以从命名空间中删除网络策略。
3.5.1. 使用 CLI 删除网络策略 复制链接链接已复制到粘贴板!
您可以删除命名空间中的网络策略。
如果使用具有 cluster-admin 角色的用户登录,您可以删除集群中的任何网络策略。
先决条件
-
集群使用支持
NetworkPolicy对象的网络插件,如带有设置了mode: NetworkPolicy的 OpenShift SDN 网络插件。 -
已安装 OpenShift CLI(
oc)。 -
使用具有
admin权限的用户登陆到集群。 - 您在网络策略所在的命名空间中。
流程
要删除网络策略对象,请输入以下命令。成功输出列出了策略对象的名称以及
已删除的状态。oc delete networkpolicy <policy_name> -n <namespace>
$ oc delete networkpolicy <policy_name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<policy_name>- 指定网络策略的名称。
<namespace>- 可选参数。如果您在与当前命名空间不同的命名空间中定义了对象,则参数会特定于命名空间。
成功输出列出了策略对象的名称以及
已删除的状态。
如果使用 cluster-admin 权限登录到 web 控制台,您可以选择在集群上以 YAML 或通过 Actions 菜单从 web 控制台中的策略删除网络策略。
3.5.2. 使用 OpenShift Cluster Manager 删除网络策略 复制链接链接已复制到粘贴板!
您可以删除命名空间中的网络策略。
先决条件
- 已登陆到 OpenShift Cluster Manager。
- 您在 AWS 集群上创建了 Red Hat OpenShift Service。
- 已为集群配置身份提供程序。
- 将您的用户帐户添加到配置的身份提供程序中。
流程
- 从 OpenShift Cluster Manager Web 控制台的 Administrator 视角,在 Networking 下点 NetworkPolicies。
使用以下方法删除您的网络策略:
从 Network Policies 表中删除策略:
- 在 Network Policies 表中,选择您要删除的网络策略行的堆栈菜单,然后点 Delete NetworkPolicy。
使用独立网络策略详情中的 Actions 下拉菜单删除策略:
- 点网络策略的 Actions 下拉菜单。
- 从菜单中选择 Delete NetworkPolicy。
3.6. 为项目定义默认网络策略 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在创建新项目时修改新项目模板,使其自动包含网络策略。如果您还没有新项目的自定义模板,则需要首先创建一个。
3.6.1. 为新项目修改模板 复制链接链接已复制到粘贴板!
作为集群管理员,您可以修改默认项目模板,以便使用自定义要求创建新项目。
创建自己的自定义项目模板:
先决条件
-
您可以使用具有
dedicated-admin权限的账户访问 Red Hat OpenShift Service on AWS 集群。
流程
-
以具有
cluster-admin特权的用户身份登录。 生成默认项目模板:
oc adm create-bootstrap-project-template -o yaml > template.yaml
$ oc adm create-bootstrap-project-template -o yaml > template.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用文本编辑器,通过添加对象或修改现有对象来修改生成的
template.yaml文件。 项目模板必须创建在
openshift-config命名空间中。加载修改后的模板:oc create -f template.yaml -n openshift-config
$ oc create -f template.yaml -n openshift-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Web 控制台或 CLI 编辑项目配置资源。
使用 Web 控制台:
- 导航至 Administration → Cluster Settings 页面。
- 单击 Configuration 以查看所有配置资源。
- 找到 Project 的条目,并点击 Edit YAML。
使用 CLI:
编辑
project.config.openshift.io/cluster资源:oc edit project.config.openshift.io/cluster
$ oc edit project.config.openshift.io/clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow
更新
spec部分,使其包含projectRequestTemplate和name参数,再设置您上传的项目模板的名称。默认名称为project-request。带有自定义项目模板的项目配置资源
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改后,创建一个新项目来验证是否成功应用了您的更改。
3.6.2. 在新项目模板中添加网络策略 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在新项目的默认模板中添加网络策略。Red Hat OpenShift Service on AWS 将自动创建项目中模板中指定的所有 NetworkPolicy 对象。
先决条件
-
集群使用支持
NetworkPolicy对象的默认容器网络接口(CNI)网络插件,如 OVN-Kubernetes。 -
已安装 OpenShift CLI(
oc)。 -
您需要使用具有
cluster-admin权限的用户登陆到集群。 - 您必须已为新项目创建了自定义的默认项目模板。
流程
运行以下命令来编辑新项目的默认模板:
oc edit template <project_template> -n openshift-config
$ oc edit template <project_template> -n openshift-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<project_template>替换为您为集群配置的缺省模板的名称。默认模板名称为project-request。在模板中,将每个
NetworkPolicy对象作为一个元素添加到objects参数中。objects参数可以是一个或多个对象的集合。在以下示例中,
objects参数集合包括几个NetworkPolicy对象。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:创建一个新项目,并确认您的网络策略对象成功创建。
创建一个新项目
oc new-project <project>
$ oc new-project <project>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<project>替换为您要创建的项目的名称。
确认新项目模板中的网络策略对象存在于新项目中:
oc get networkpolicy
$ oc get networkpolicyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出:
NAME POD-SELECTOR AGE allow-from-openshift-ingress <none> 7s allow-from-same-namespace <none> 7s
NAME POD-SELECTOR AGE allow-from-openshift-ingress <none> 7s allow-from-same-namespace <none> 7sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.7. 使用网络策略配置多租户隔离 复制链接链接已复制到粘贴板!
作为集群管理员,您可以配置网络策略以为多租户网络提供隔离功能。
如本节所述配置网络策略,提供了在以前的 Red Hat OpenShift Service on AWS 版本中与 OpenShift SDN 的多租户模式类似的网络隔离。
3.7.1. 使用网络策略配置多租户隔离 复制链接链接已复制到粘贴板!
您可以配置项目,使其与其他项目命名空间中的 pod 和服务分离。
先决条件
-
集群使用支持
NetworkPolicy对象的网络插件,如带有设置了mode: NetworkPolicy的 OpenShift SDN 网络插件。 -
已安装 OpenShift CLI(
oc)。 -
您可以使用具有
admin权限的用户登陆到集群。
流程
创建以下
NetworkPolicy对象:名为
allow-from-openshift-ingress的策略。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意policy-group.network.openshift.io/ingress: ""是 OVN-Kubernetes 的首选命名空间选择器标签。名为
allow-from-openshift-monitoring的策略:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 名为
allow-same-namespace的策略:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 名为
allow-from-kube-apiserver-operator的策略:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如需了解更多详细信息,请参阅 新的
kube-apiserver-operatorWebhook 控制器验证 Webhook 的健康状况。
可选: 要确认当前项目中存在网络策略,请输入以下命令:
oc describe networkpolicy
$ oc describe networkpolicyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 4 章 Red Hat OpenShift Service on AWS 集群的网络验证 复制链接链接已复制到粘贴板!
当您将 Red Hat OpenShift Service on AWS 集群部署到现有的 Virtual Private Cloud (VPC)或创建带有集群新子网的额外机器池时,网络验证检查会自动运行。检查会验证您的网络配置并突出显示错误,允许您在集群部署前解决配置问题。
您还可以手动运行网络验证检查以验证现有集群的配置。
4.1. 了解 Red Hat OpenShift Service on AWS 集群的网络验证 复制链接链接已复制到粘贴板!
当您将 Red Hat OpenShift Service 部署到现有的 Virtual Private Cloud (VPC)或创建带有集群新子网的额外机器池时,网络验证会自动运行。这有助于您在集群部署前识别并解决配置问题。
当使用 Red Hat OpenShift Cluster Manager 准备安装集群时,会在 Virtual Private Cloud (VPC)子网设置页面中将子网输入到子网 ID 字段中运行自动检查。如果您使用带有互动模式的 ROSA CLI (rosa)创建集群,则检查会在提供所需的 VPC 网络信息后运行。如果您在没有互动模式的情况下使用 CLI,则检查会在集群创建前立即开始。
当您添加一个机器池,它带有对于集群来说是新的子网时,自动网络验证会检查子网,以确保在置备机器池前可以使用网络连接。
自动网络验证完成后,会将记录发送到服务日志。记录提供验证检查的结果,包括任何网络配置错误。您可以在部署前解决发现的问题,从而使部署成功的机会更大。
您还可以为现有集群手动运行网络验证。这可让您在配置更改后验证集群的网络配置。有关手动运行网络验证检查的步骤,请参阅手动运行网络验证。
4.2. 网络验证检查的范围 复制链接链接已复制到粘贴板!
网络验证包括以下每个要求:
- 存在父虚拟私有云 (VPC)。
- 所有指定子网都属于 VPC。
-
VPC 已启用了
enableDnsSupport。 -
VPC 已启用了
enableDnsHostnames。
4.3. 绕过自动网络验证 复制链接链接已复制到粘贴板!
如果要将已知网络配置问题部署到现有的 Virtual Private Cloud (VPC)中,可以绕过自动网络验证。
如果您在创建集群时绕过网络验证,集群的支持状态是有限的。安装后,您可以解决这个问题,然后手动运行网络验证。在验证成功后,有限的支持状态会被删除。
当使用 Red Hat OpenShift Cluster Manager 将集群安装到现有的 VPC 时,您可以通过在 Virtual Private Cloud (VPC) 子网设置页面中选择 Bypass network verification 来绕过自动验证。
4.3.1. 使用 CLI 手动运行网络验证 复制链接链接已复制到粘贴板!
您可以使用 ROSA CLI (rosa)手动运行网络验证检查 AWS 集群上的现有 Red Hat OpenShift Service。
运行网络验证时,您可以指定一组 VPC 子网 ID 或集群名称。
先决条件
-
您已在安装主机上安装和配置了最新的 ROSA CLI (
rosa)。 - 在 AWS 集群上已有 Red Hat OpenShift Service。
- 您是集群所有者,或具有集群编辑器角色。
流程
使用以下方法之一验证网络配置:
通过指定集群名称来验证网络配置。自动检测子网 ID:
rosa verify network --cluster <cluster_name>
$ rosa verify network --cluster <cluster_name>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<cluster_name>替换为集群的名称。
输出示例
I: Verifying the following subnet IDs are configured correctly: [subnet-03146b9b52b6024cb subnet-03146b9b52b2034cc] I: subnet-03146b9b52b6024cb: pending I: subnet-03146b9b52b2034cc: passed I: Run the following command to wait for verification to all subnets to complete: rosa verify network --watch --status-only --region us-east-1 --subnet-ids subnet-03146b9b52b6024cb,subnet-03146b9b52b2034cc
I: Verifying the following subnet IDs are configured correctly: [subnet-03146b9b52b6024cb subnet-03146b9b52b2034cc] I: subnet-03146b9b52b6024cb: pending I: subnet-03146b9b52b2034cc: passed I: Run the following command to wait for verification to all subnets to complete: rosa verify network --watch --status-only --region us-east-1 --subnet-ids subnet-03146b9b52b6024cb,subnet-03146b9b52b2034ccCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确保所有子网的验证已完成:
rosa verify network --watch \ --status-only \ --region <region_name> \ --subnet-ids subnet-03146b9b52b6024cb,subnet-03146b9b52b2034cc$ rosa verify network --watch \1 --status-only \2 --region <region_name> \3 --subnet-ids subnet-03146b9b52b6024cb,subnet-03146b9b52b2034cc4 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
I: Checking the status of the following subnet IDs: [subnet-03146b9b52b6024cb subnet-03146b9b52b2034cc] I: subnet-03146b9b52b6024cb: passed I: subnet-03146b9b52b2034cc: passed
I: Checking the status of the following subnet IDs: [subnet-03146b9b52b6024cb subnet-03146b9b52b2034cc] I: subnet-03146b9b52b6024cb: passed I: subnet-03146b9b52b2034cc: passedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 提示要输出验证测试的完整列表,您可以在运行
rosa verify network命令时包含--debug参数。
通过指定 VPC 子网 ID 来验证网络配置。将
<region_name> 替换为您的 AWS 区域,将<AWS_account_ID> 替换为您的 AWS 帐户 ID:rosa verify network --subnet-ids 03146b9b52b6024cb,subnet-03146b9b52b2034cc --region <region_name> --role-arn arn:aws:iam::<AWS_account_ID>:role/my-Installer-Role
$ rosa verify network --subnet-ids 03146b9b52b6024cb,subnet-03146b9b52b2034cc --region <region_name> --role-arn arn:aws:iam::<AWS_account_ID>:role/my-Installer-RoleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
I: Verifying the following subnet IDs are configured correctly: [subnet-03146b9b52b6024cb subnet-03146b9b52b2034cc] I: subnet-03146b9b52b6024cb: pending I: subnet-03146b9b52b2034cc: passed I: Run the following command to wait for verification to all subnets to complete: rosa verify network --watch --status-only --region us-east-1 --subnet-ids subnet-03146b9b52b6024cb,subnet-03146b9b52b2034cc
I: Verifying the following subnet IDs are configured correctly: [subnet-03146b9b52b6024cb subnet-03146b9b52b2034cc] I: subnet-03146b9b52b6024cb: pending I: subnet-03146b9b52b2034cc: passed I: Run the following command to wait for verification to all subnets to complete: rosa verify network --watch --status-only --region us-east-1 --subnet-ids subnet-03146b9b52b6024cb,subnet-03146b9b52b2034ccCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确保所有子网的验证已完成:
rosa verify network --watch --status-only --region us-east-1 --subnet-ids subnet-03146b9b52b6024cb,subnet-03146b9b52b2034cc
$ rosa verify network --watch --status-only --region us-east-1 --subnet-ids subnet-03146b9b52b6024cb,subnet-03146b9b52b2034ccCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
I: Checking the status of the following subnet IDs: [subnet-03146b9b52b6024cb subnet-03146b9b52b2034cc] I: subnet-03146b9b52b6024cb: passed I: subnet-03146b9b52b2034cc: passed
I: Checking the status of the following subnet IDs: [subnet-03146b9b52b6024cb subnet-03146b9b52b2034cc] I: subnet-03146b9b52b6024cb: passed I: subnet-03146b9b52b2034cc: passedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 5 章 网络安全的审计日志记录 复制链接链接已复制到粘贴板!
OVN-Kubernetes 网络插件使用 Open Virtual Network (OVN) 访问控制列表 (ACL) 来管理 AdminNetworkPolicy、BaselineAdminNetworkPolicy、NetworkPolicy 和 EgressFirewall 对象。审计日志记录会公开 NetworkPolicy, EgressFirewall 和 BaselineAdminNetworkPolicy 自定义资源 (CR) 的 allow 和 deny ACL 事件。日志记录还公开 AdminNetworkPolicy (ANP) CR 的 allow, deny, 和 pass ACL 的事件。
审计日志记录仅适用于 OVN-Kubernetes 网络插件。
5.1. 审计配置 复制链接链接已复制到粘贴板!
审计日志记录的配置作为 OVN-Kubernetes 集群网络配置的一部分指定。以下 YAML 演示了审计日志的默认值:
审计日志记录配置
下表描述了审计日志的配置字段。
| 字段 | 类型 | 描述 |
|---|---|---|
|
| 整数 |
每个节点每秒生成一次的消息数量上限。默认值为每秒 |
|
| 整数 |
审计日志的最大大小,以字节为单位。默认值为 |
|
| 整数 | 保留的日志文件的最大数量。 |
|
| 字符串 | 以下附加审计日志目标之一:
|
|
| 字符串 |
syslog 工具,如 as |
5.2. 审计日志记录 复制链接链接已复制到粘贴板!
您可以为审计日志配置目的地,如 syslog 服务器或 UNIX 域套接字。无论任何其他配置如何,审计日志始终保存到集群中的每个 OVN-Kubernetes pod 上的 /var/log/ovn/acl-audit-log。
您可以使用 k8s.ovn.org/acl-logging 部分为每个命名空间启用审计日志记录。在 k8s.ovn.org/acl-logging 部分中,您必须指定 allow、deny 或这两个值来为命名空间启用审计日志记录。
网络策略不支持将 Pass 操作设置为规则。
ACL-logging 实现记录网络的访问控制列表 (ACL) 事件。您可以查看这些日志来分析任何潜在的安全问题。
命名空间注解示例
要查看默认的 ACL 日志记录配置值,请参阅 cluster-network-03-config.yml 文件中的 policyAuditConfig 对象。如果需要,您可以更改此文件中的日志文件参数的 ACL 日志记录配置值。
日志信息格式与 RFC5424 中定义的 syslog 兼容。syslog 工具可配置,默认为 local0。以下示例显示了日志消息中输出的关键参数及其值:
输出参数及其值的日志记录消息示例
<timestamp>|<message_serial>|acl_log(ovn_pinctrl0)|<severity>|name="<acl_name>", verdict="<verdict>", severity="<severity>", direction="<direction>": <flow>
<timestamp>|<message_serial>|acl_log(ovn_pinctrl0)|<severity>|name="<acl_name>", verdict="<verdict>", severity="<severity>", direction="<direction>": <flow>
其中:
-
<timestamp>声明创建日志消息的时间和日期。 -
<message_serial>列出日志消息的序列号。 -
acl_log (ovn_pinctrl0)是一个字面字符串,它会在 OVN-Kubernetes 插件中输出日志消息的位置。 -
<severity>为日志消息设置严重性级别。如果您启用支持allow和deny任务的审计日志记录,则日志消息输出中会显示两个严重性级别。 -
<name>说明由网络策略创建的 OVN Network Bridging Database (nbdb) 中的 ACL-logging 实现的名称。 -
<verdict>可以是allow或drop。 -
<direction>可以是to-lport或from-lport,表示策略应用到 pod 的流量。 -
<flow>显示与OpenFlow协议等效的格式的数据包信息。此参数包含 Open vSwitch (OVS) 字段。
以下示例显示了 flow 参数用来从系统内存提取数据包信息的 OVS 字段:
flow 参数用来提取数据包信息的 OVS 字段示例
<proto>,vlan_tci=0x0000,dl_src=<src_mac>,dl_dst=<source_mac>,nw_src=<source_ip>,nw_dst=<target_ip>,nw_tos=<tos_dscp>,nw_ecn=<tos_ecn>,nw_ttl=<ip_ttl>,nw_frag=<fragment>,tp_src=<tcp_src_port>,tp_dst=<tcp_dst_port>,tcp_flags=<tcp_flags>
<proto>,vlan_tci=0x0000,dl_src=<src_mac>,dl_dst=<source_mac>,nw_src=<source_ip>,nw_dst=<target_ip>,nw_tos=<tos_dscp>,nw_ecn=<tos_ecn>,nw_ttl=<ip_ttl>,nw_frag=<fragment>,tp_src=<tcp_src_port>,tp_dst=<tcp_dst_port>,tcp_flags=<tcp_flags>
其中:
-
<proto>声明协议。有效值为tcp和udp。 -
vlan_tci=0x0000声明 VLAN 标头为0,因为没有为内部 pod 网络流量设置 VLAN ID。 -
<src_mac>指定 Media Access Control (MAC) 地址的源。 -
<source_mac>指定 MAC 地址的目的地。 -
<source_ip>列出源 IP 地址 -
<target_ip>列出目标 IP 地址。 -
<tos_dscp>声明 Differentiated Services Code Point (DSCP) 值,对网络流量进行分类并进行优先级排序。 -
<tos_ecn>声明 Explicit Congestion Notification (ECN) 值,它表示您的网络中的阻塞网络流量。 -
<ip_ttl>声明数据包的 Time To Live (TTP) 信息。 -
<fragment>指定要匹配的 IP 片段或 IP 非碎片。 -
<tcp_src_port>显示 TCP 和 UDP 协议的端口源。 -
<tcp_dst_port>列出 TCP 和 UDP 协议的目的地端口。 -
<tcp_flags>支持多个标示,如SYN,ACK,PSH等。如果您需要设置多个值,则不同的值由竖线 (|) 分隔。UDP 协议不支持此参数。
有关前面的字段描述的更多信息,请转至 ovs-fields 的 OVS 手册页。
网络策略的 ACL 拒绝日志条目示例
2023-11-02T16:28:54.139Z|00004|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:Ingress", verdict=drop, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:01,dl_dst=0a:58:0a:81:02:23,nw_src=10.131.0.39,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=62,nw_frag=no,tp_src=58496,tp_dst=8080,tcp_flags=syn 2023-11-02T16:28:55.187Z|00005|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:Ingress", verdict=drop, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:01,dl_dst=0a:58:0a:81:02:23,nw_src=10.131.0.39,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=62,nw_frag=no,tp_src=58496,tp_dst=8080,tcp_flags=syn 2023-11-02T16:28:57.235Z|00006|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:Ingress", verdict=drop, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:01,dl_dst=0a:58:0a:81:02:23,nw_src=10.131.0.39,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=62,nw_frag=no,tp_src=58496,tp_dst=8080,tcp_flags=syn
2023-11-02T16:28:54.139Z|00004|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:Ingress", verdict=drop, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:01,dl_dst=0a:58:0a:81:02:23,nw_src=10.131.0.39,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=62,nw_frag=no,tp_src=58496,tp_dst=8080,tcp_flags=syn
2023-11-02T16:28:55.187Z|00005|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:Ingress", verdict=drop, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:01,dl_dst=0a:58:0a:81:02:23,nw_src=10.131.0.39,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=62,nw_frag=no,tp_src=58496,tp_dst=8080,tcp_flags=syn
2023-11-02T16:28:57.235Z|00006|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:Ingress", verdict=drop, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:01,dl_dst=0a:58:0a:81:02:23,nw_src=10.131.0.39,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=62,nw_frag=no,tp_src=58496,tp_dst=8080,tcp_flags=syn
下表描述了命名空间注解值:
| 字段 | 描述 |
|---|---|
|
|
阻止任何与 |
|
|
允许命名空间访问与 |
|
|
|
5.3. AdminNetworkPolicy 审计日志记录 复制链接链接已复制到粘贴板!
每个 AdminNetworkPolicy CR 启用了审计日志记录,使用 k8s.ovn.org/acl-logging 键注解 ANP 策略,如下例所示:
例 5.1. AdminNetworkPolicy CR 的注解示例
每当特定的 OVN ACL 达到并满足日志记录注解中设置的操作条件时,都会生成日志。例如,一个事件,其中任何带有标签 tenant: product-development 的命名空间都访问带有标签 tenant: backend-storage 的命名空间,则会生成日志。
ACL 日志记录限制为 60 个字符。如果您的 ANP name 字段较长,日志的其余部分将被截断。
以下是以下示例日志条目的方向索引:
| 方向 | 规则 |
|---|---|
| 入口 |
|
| Egress |
|
例 5.2. ACL 日志项示例,用于带有 Ingress:0 和 Egress:0 的名为 anp-tenant-log 的 AdminNetworkPolicy 的 Allow 操作
2024-06-10T16:27:45.194Z|00052|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Ingress:0", verdict=allow, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:1a,dl_dst=0a:58:0a:80:02:19,nw_src=10.128.2.26,nw_dst=10.128.2.25,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=57814,tp_dst=8080,tcp_flags=syn 2024-06-10T16:28:23.130Z|00059|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Ingress:0", verdict=allow, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:18,dl_dst=0a:58:0a:80:02:19,nw_src=10.128.2.24,nw_dst=10.128.2.25,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=38620,tp_dst=8080,tcp_flags=ack 2024-06-10T16:28:38.293Z|00069|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Egress:0", verdict=allow, severity=alert, direction=from-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:19,dl_dst=0a:58:0a:80:02:1a,nw_src=10.128.2.25,nw_dst=10.128.2.26,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=47566,tp_dst=8080,tcp_flags=fin|ack=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=55704,tp_dst=8080,tcp_flags=ack
2024-06-10T16:27:45.194Z|00052|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Ingress:0", verdict=allow, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:1a,dl_dst=0a:58:0a:80:02:19,nw_src=10.128.2.26,nw_dst=10.128.2.25,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=57814,tp_dst=8080,tcp_flags=syn
2024-06-10T16:28:23.130Z|00059|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Ingress:0", verdict=allow, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:18,dl_dst=0a:58:0a:80:02:19,nw_src=10.128.2.24,nw_dst=10.128.2.25,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=38620,tp_dst=8080,tcp_flags=ack
2024-06-10T16:28:38.293Z|00069|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Egress:0", verdict=allow, severity=alert, direction=from-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:19,dl_dst=0a:58:0a:80:02:1a,nw_src=10.128.2.25,nw_dst=10.128.2.26,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=47566,tp_dst=8080,tcp_flags=fin|ack=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=55704,tp_dst=8080,tcp_flags=ack
例 5.3. ACL 日志项示例,用于带有 Ingress:1 和 Egress:1 的名为 anp-tenant-log 的 AdminNetworkPolicy 的 Pass 操作
2024-06-10T16:33:12.019Z|00075|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Ingress:1", verdict=pass, severity=warning, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:1b,dl_dst=0a:58:0a:80:02:19,nw_src=10.128.2.27,nw_dst=10.128.2.25,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=37394,tp_dst=8080,tcp_flags=ack 2024-06-10T16:35:04.209Z|00081|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Egress:1", verdict=pass, severity=warning, direction=from-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:19,dl_dst=0a:58:0a:80:02:1b,nw_src=10.128.2.25,nw_dst=10.128.2.27,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=34018,tp_dst=8080,tcp_flags=ack
2024-06-10T16:33:12.019Z|00075|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Ingress:1", verdict=pass, severity=warning, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:1b,dl_dst=0a:58:0a:80:02:19,nw_src=10.128.2.27,nw_dst=10.128.2.25,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=37394,tp_dst=8080,tcp_flags=ack
2024-06-10T16:35:04.209Z|00081|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Egress:1", verdict=pass, severity=warning, direction=from-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:19,dl_dst=0a:58:0a:80:02:1b,nw_src=10.128.2.25,nw_dst=10.128.2.27,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=34018,tp_dst=8080,tcp_flags=ack
例 5.4. ACL 日志项示例,用于带有 Ingress:2 和 Egress:2 的名为 anp-tenant-log 的 AdminNetworkPolicy 的 Deny 操作
2024-06-10T16:43:05.287Z|00087|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Egress:2", verdict=drop, severity=alert, direction=from-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:19,dl_dst=0a:58:0a:80:02:18,nw_src=10.128.2.25,nw_dst=10.128.2.24,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=51598,tp_dst=8080,tcp_flags=syn 2024-06-10T16:44:43.591Z|00090|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Ingress:2", verdict=drop, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:1c,dl_dst=0a:58:0a:80:02:19,nw_src=10.128.2.28,nw_dst=10.128.2.25,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=33774,tp_dst=8080,tcp_flags=syn
2024-06-10T16:43:05.287Z|00087|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Egress:2", verdict=drop, severity=alert, direction=from-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:19,dl_dst=0a:58:0a:80:02:18,nw_src=10.128.2.25,nw_dst=10.128.2.24,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=51598,tp_dst=8080,tcp_flags=syn
2024-06-10T16:44:43.591Z|00090|acl_log(ovn_pinctrl0)|INFO|name="ANP:anp-tenant-log:Ingress:2", verdict=drop, severity=alert, direction=to-lport: tcp,vlan_tci=0x0000,dl_src=0a:58:0a:80:02:1c,dl_dst=0a:58:0a:80:02:19,nw_src=10.128.2.28,nw_dst=10.128.2.25,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,tp_src=33774,tp_dst=8080,tcp_flags=syn
下表描述了 ANP 注解:
| 注解 | value |
|---|---|
|
|
您必须至少指定
|
5.4. BaselineAdminNetworkPolicy 审计日志记录 复制链接链接已复制到粘贴板!
使用 k8s.ovn.org/acl-logging 键注解 BANP 策略,在 BaselineAdminNetworkPolicy CR 中启用审计日志记录,如下例所示:
例 5.5. BaselineAdminNetworkPolicy CR 的注解示例
在示例中,一个事件,其中任何带有标签 tenant: dns 的命名空间都访问带有标签 tenant: workload 的命名空间,则会生成日志。
以下是以下示例日志条目的方向索引:
| 方向 | 规则 |
|---|---|
| 入口 |
|
| Egress |
|
例 5.6. ACL allow 日志项示例,用于带有 Ingress:0 的 default BANP 的 Allow 操作
例 5.7. ACL allow 日志项示例,用于带有 Egress:0 和 Ingress:1 的 default BANP 的 Allow 操作
下表描述了 BANP 注解:
| 注解 | value |
|---|---|
|
|
您必须至少指定
|
5.5. 为集群配置出口防火墙和网络策略审计 复制链接链接已复制到粘贴板!
作为集群管理员,您可以自定义集群的审计日志。
先决条件
-
安装 OpenShift CLI(
oc)。 -
使用具有
cluster-admin权限的用户登陆到集群。
流程
要自定义审计日志配置,请输入以下命令:
oc edit network.operator.openshift.io/cluster
$ oc edit network.operator.openshift.io/clusterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 提示您还可以自定义并应用以下 YAML 来配置审计日志记录:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要创建带有网络策略的命名空间,请完成以下步骤:
创建命名空间进行验证:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功输出使用网络策略和创建的状态列出命名空间。
为命名空间创建网络策略:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
networkpolicy.networking.k8s.io/deny-all created networkpolicy.networking.k8s.io/allow-from-same-namespace created
networkpolicy.networking.k8s.io/deny-all created networkpolicy.networking.k8s.io/allow-from-same-namespace createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow
为
default命名空间中的源流量创建 pod:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
verify-audit-logging命名空间中创建两个 pod:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功输出会列出两个 pod,如
pod/client和pod/server,以及创建的状态。要生成流量并生成网络策略审计日志条目,请完成以下步骤:
在
verify-audit-logging命名空间中获取名为server的 pod 的 IP 地址:POD_IP=$(oc get pods server -n verify-audit-logging -o jsonpath='{.status.podIP}')$ POD_IP=$(oc get pods server -n verify-audit-logging -o jsonpath='{.status.podIP}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
default命名空间中名为client的 pod 中 ping 之前命令中的 IP 地址,并确认所有数据包都已丢弃:oc exec -it client -n default -- /bin/ping -c 2 $POD_IP
$ oc exec -it client -n default -- /bin/ping -c 2 $POD_IPCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
PING 10.128.2.55 (10.128.2.55) 56(84) bytes of data. --- 10.128.2.55 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 2041ms
PING 10.128.2.55 (10.128.2.55) 56(84) bytes of data. --- 10.128.2.55 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 2041msCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从
verify-audit-logging命名空间中的客户端 pod 中,pingPOD_IP shell环境变量中存储的 IP 地址,并确认系统允许所有数据包。oc exec -it client -n verify-audit-logging -- /bin/ping -c 2 $POD_IP
$ oc exec -it client -n verify-audit-logging -- /bin/ping -c 2 $POD_IPCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
显示网络策略审计日志中的最新条目:
for pod in $(oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-node --no-headers=true | awk '{ print $1 }') ; do oc exec -it $pod -n openshift-ovn-kubernetes -- tail -4 /var/log/ovn/acl-audit-log.log done$ for pod in $(oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-node --no-headers=true | awk '{ print $1 }') ; do oc exec -it $pod -n openshift-ovn-kubernetes -- tail -4 /var/log/ovn/acl-audit-log.log doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6. 为命名空间启用出口防火墙和网络策略审计日志 复制链接链接已复制到粘贴板!
作为集群管理员,您可以为命名空间启用审计日志。
先决条件
-
安装 OpenShift CLI(
oc)。 -
使用具有
cluster-admin权限的用户登陆到集群。
流程
要为命名空间启用审计日志,请输入以下命令:
oc annotate namespace <namespace> \ k8s.ovn.org/acl-logging='{ "deny": "alert", "allow": "notice" }'$ oc annotate namespace <namespace> \ k8s.ovn.org/acl-logging='{ "deny": "alert", "allow": "notice" }'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<namespace>- 指定命名空间的名称。
提示您还可以应用以下 YAML 来启用审计日志记录:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功输出列出了审计日志记录名称和
注解的状态。
验证
显示审计日志中的最新条目:
for pod in $(oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-node --no-headers=true | awk '{ print $1 }') ; do oc exec -it $pod -n openshift-ovn-kubernetes -- tail -4 /var/log/ovn/acl-audit-log.log done$ for pod in $(oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-node --no-headers=true | awk '{ print $1 }') ; do oc exec -it $pod -n openshift-ovn-kubernetes -- tail -4 /var/log/ovn/acl-audit-log.log doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
2023-11-02T16:49:57.909Z|00028|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:allow-from-same-namespace:Egress:0", verdict=allow, severity=alert, direction=from-lport: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:22,dl_dst=0a:58:0a:81:02:23,nw_src=10.129.2.34,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=8,icmp_code=0 2023-11-02T16:49:57.909Z|00029|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:allow-from-same-namespace:Ingress:0", verdict=allow, severity=alert, direction=to-lport: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:22,dl_dst=0a:58:0a:81:02:23,nw_src=10.129.2.34,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=8,icmp_code=0 2023-11-02T16:49:58.932Z|00030|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:allow-from-same-namespace:Egress:0", verdict=allow, severity=alert, direction=from-lport: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:22,dl_dst=0a:58:0a:81:02:23,nw_src=10.129.2.34,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=8,icmp_code=0 2023-11-02T16:49:58.932Z|00031|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:allow-from-same-namespace:Ingress:0", verdict=allow, severity=alert, direction=to-lport: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:22,dl_dst=0a:58:0a:81:02:23,nw_src=10.129.2.34,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=8,icmp_code=0
2023-11-02T16:49:57.909Z|00028|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:allow-from-same-namespace:Egress:0", verdict=allow, severity=alert, direction=from-lport: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:22,dl_dst=0a:58:0a:81:02:23,nw_src=10.129.2.34,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=8,icmp_code=0 2023-11-02T16:49:57.909Z|00029|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:allow-from-same-namespace:Ingress:0", verdict=allow, severity=alert, direction=to-lport: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:22,dl_dst=0a:58:0a:81:02:23,nw_src=10.129.2.34,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=8,icmp_code=0 2023-11-02T16:49:58.932Z|00030|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:allow-from-same-namespace:Egress:0", verdict=allow, severity=alert, direction=from-lport: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:22,dl_dst=0a:58:0a:81:02:23,nw_src=10.129.2.34,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=8,icmp_code=0 2023-11-02T16:49:58.932Z|00031|acl_log(ovn_pinctrl0)|INFO|name="NP:verify-audit-logging:allow-from-same-namespace:Ingress:0", verdict=allow, severity=alert, direction=to-lport: icmp,vlan_tci=0x0000,dl_src=0a:58:0a:81:02:22,dl_dst=0a:58:0a:81:02:23,nw_src=10.129.2.34,nw_dst=10.129.2.35,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=8,icmp_code=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7. 为命名空间禁用出口防火墙和网络策略审计日志 复制链接链接已复制到粘贴板!
作为集群管理员,您可以禁用命名空间的审计日志。
先决条件
-
安装 OpenShift CLI(
oc)。 -
使用具有
cluster-admin权限的用户登陆到集群。
流程
要为命名空间禁用审计日志,请输入以下命令:
oc annotate --overwrite namespace <namespace> k8s.ovn.org/acl-logging-
$ oc annotate --overwrite namespace <namespace> k8s.ovn.org/acl-logging-Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<namespace>- 指定命名空间的名称。
提示您还可以应用以下 YAML 来禁用审计日志记录:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功输出列出了审计日志记录名称和
注解的状态。
Legal Notice
复制链接链接已复制到粘贴板!
Copyright © 2025 Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.