网络安全性
在 OpenShift Container Platform 中保护网络流量并强制实施网络策略
摘要
第 1 章 了解网络策略 API 复制链接链接已复制到粘贴板!
Kubernetes 提供了两个用户可用于强制实施网络安全的功能。允许用户强制执行网络策略的一个功能是 NetworkPolicy
API,主要用于应用程序开发人员和命名空间租户,通过创建命名空间范围的策略来保护其命名空间。
第二个功能是 AdminNetworkPolicy
,它由两个 API 组成:AdminNetworkPolicy
(ANP) API 和 BaselineAdminNetworkPolicy
(BANP) API。ANP 和 BANP 是为集群和网络管理员设计的,以通过创建集群范围的策略来保护其整个集群。集群管理员可以使用 ANPs 来强制实施优先于 NetworkPolicy
对象的不可覆盖的策略。管理员可以使用 BANP 设置并强制实施可选的集群范围的网络策略规则,当需要时,用户可以使用 NetworkPolicy
对象覆盖它。当一起使用时,ANP、BANP 和网络策略可以实现完整的多租户隔离,管理员可使用这个功能保护集群。
OpenShift Container Platform 中的 OVN-Kubernetes CNI 使用访问控制列表(ACL) Tiers 实施这些网络策略,以评估并应用它们。ACL 按照从 Tier 1 到 Tier 3 的降序进行评估。
第 1 级评估 AdminNetworkPolicy
(ANP)对象。第 2 级评估 NetworkPolicy
对象。第 3 级评估 BaselineAdminNetworkPolicy
(BANP)对象。
首先评估 ANP。当匹配是 ANP allow
或 deny
规则时,集群中的任何现有 NetworkPolicy
和 BaselineAdminNetworkPolicy
(BANP)对象将不会被评估。当匹配是 ANP pass
,评估会从 ACL 的第 1 层移到第 2 层,在其中评估 NetworkPolicy
策略。如果没有 NetworkPolicy
与流量匹配,则评估从第 2 层 ACL 移到评估 BANP 的第 3 层 ACL。
1.1. AdminNetworkPolicy 和 NetworkPolicy 自定义资源之间的主要区别 复制链接链接已复制到粘贴板!
下表解释了集群范围的 AdminNetworkPolicy
API 和命名空间范围 NetworkPolicy
API 之间的主要区别。
策略元素 | AdminNetworkPolicy | NetworkPolicy |
---|---|---|
适用的用户 | 集群管理员 | 命名空间所有者 |
影响范围 | Cluster | Namespaced |
丢弃流量 |
当显式 |
在策略创建时通过隐式 |
委派流量 |
| Not applicable |
允许流量 |
显式 | 所有规则的默认操作都是 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)。作为 OpenShift Container Platform 管理员,您可以在创建命名空间前通过创建网络策略来使用 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)。作为 OpenShift Container Platform 管理员,您可以使用 BANP 来设置并强制实施可选的基准网络策略规则,这些规则被用户使用 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 的默认行为。
2.3. 监控 ANP 和 BANP 复制链接链接已复制到粘贴板!
AdminNetworkPolicy
和 BaselineAdminNetworkPolicy
资源具有可用于监控和管理您的策略的指标。有关指标的详情,请查看下表。
2.3.1. AdminNetworkPolicy 指标 复制链接链接已复制到粘贴板!
Name | 描述 | 解释 |
---|---|---|
| Not applicable |
集群中的 |
| Not applicable |
集群中的 |
|
|
集群中所有 ANP 策略的规则总数,按照 |
|
|
集群中所有 BANP 策略的规则总数,按照 |
|
|
集群中所有 ANP 创建的 OVN 北向数据库(nbdb)对象的总数,按照 |
|
|
集群中所有 BANP 创建的 OVN 北向数据库(nbdb)对象的总数,按照 |
2.4. AdminNetworkPolicy 的出口节点和网络对等点 复制链接链接已复制到粘贴板!
本节介绍 节点
和网络
对等点。管理员可以使用本节中的示例来设计 AdminNetworkPolicy
和 BaselineAdminNetworkPolicy
,以控制其集群中的北向流量。
除了支持 east-west 流量控制外,ANP 和 BANP 还允许管理员控制其北向流量,使集群或流量离开集群或流量到集群中的其他节点。最终用户可以执行以下操作:
-
使用
节点
出口对等点实现对集群节点的出口流量控制 -
使用
节点
或网络
出口对等对 Kubernetes API 服务器实施出口流量控制 -
使用
网络
对等点对集群外的外部目的地实施出口流量控制
对于 ANP 和 BANP,只能为出口规则指定节点
和网络
对等点。
2.4.1.1. 使用节点 peer 控制到集群节点的出口流量 复制链接链接已复制到粘贴板!
使用 节点
对等管理员可以控制从 pod 到集群中节点的出口流量。这样做的好处是,您不必在向集群添加或删除节点时更改策略。
在以下示例中,通过使用节点选择器,允许任何带有restricted
, confidential
, 或 internal
级别安全的命名空间发送的、端口 6443
上的到 Kubernetes API 服务器的出口流量。它还拒绝来自带有 restricted
, confidential
, or internal
安全级别的任何命名空间的、到您的集群中的所有 worker 节点的流量。
例 2.8. 使用 nodes
对等的 ANP Allow
egress 示例
2.4.1.2. 使用网络对等控制到外部目的地的出口流量 复制链接链接已复制到粘贴板!
集群管理员可以使用网络
对等中的 CIDR 范围,并应用一个策略来控制离开 pod 的出口流量,并进入通过 network
字段指定的 CIDR 范围内配置的 IP 地址的目标。
以下示例使用网络
对等,并组合了 ANP 和 BANP 策略来限制出口流量。
请谨慎使用 namespace
字段中的空选择器({})。使用空选择器时,它还选择 OpenShift 命名空间。
如果您在 ANP 或 BANP Deny
规则中使用 0.0.0.0/0
的值,您必须在将 Deny
设置为 0.0.0.0/0
前将更高的优先级 ANP Allow
规则设置为所需的目的地。
例 2.9. 使用网络
对等点的 ANP 和 BANP 示例
使用网络
对等来整合 network-as-egress-peer
ANP 和 默认
的 BANP 来强制以下 egress 策略:
- 所有 pod 都无法通过列出的 IP 地址与外部 DNS 服务器进行通信。
- 所有 pod 都可以与公司的其他内部网通信。
- 所有 pod 都可以与其他 pod、节点和服务通信。
-
所有 pod 都无法与互联网通信。将最后一个 ANP
Pass
规则与强大的 BANPDeny
规则合并会创建一个保护策略来保护集群中的流量。
2.4.1.3. 一起使用节点对等和网络对等 复制链接链接已复制到粘贴板!
集群管理员可以将节点
和网络
对等组合到 ANP 和 BANP 策略中。
2.5. AdminNetworkPolicy 故障排除 复制链接链接已复制到粘贴板!
2.5.1. 检查 ANP 的创建 复制链接链接已复制到粘贴板!
要检查您的 AdminNetworkPolicy
(ANP) 和 BaselineAdminNetworkPolicy
(BANP) 是否已正确创建,请检查以下命令的状态输出: oc describe ap
或 oc describe banp
。
正常状态表示 OVN DB plumbing was successful
和 SetupSucceeded
。
例 2.11. 具有良好状态的 ANP 示例
如果 Plumbing 失败,则会从相应的区控制器报告错误。
例 2.12. 带有错误状态和错误消息的 ANP 示例
有关 nbctl
命令,请参见以下部分来帮助排除不成功的策略。
2.5.1.1. 为 ANP 和 BANP 使用 nbctl 命令 复制链接链接已复制到粘贴板!
要对不成功的设置进行故障排除,请首先查看 OVN 北向数据库 (nbdb) 对象,包括 ACL
、AdressSet
和 Port_Group
。要查看 nbdb,您需要在该节点上的 pod 内部查看该节点数据库中的对象。
先决条件
-
使用具有
cluster-admin
角色的用户访问集群。 -
已安装 OpenShift CLI(
oc
)。
要在集群中运行 ovn nbctl
命令,您必须在相关节点的 "nbdb" 中打开远程 shell。
以下策略用于生成输出。
例 2.13. 用于生成输出的 AdminNetworkPolicy
流程
运行以下命令,使用节点信息列出 pod:
oc get pods -n openshift-ovn-kubernetes -owide
$ oc get pods -n openshift-ovn-kubernetes -owide
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,进入 pod 以查看北向数据库:
oc rsh -c nbdb -n openshift-ovn-kubernetes ovnkube-node-524dt
$ oc rsh -c nbdb -n openshift-ovn-kubernetes ovnkube-node-524dt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来查看 ACL nbdb :
ovn-nbctl find ACL 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,"k8s.ovn.org/name"=cluster-control}'
$ ovn-nbctl find ACL 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,"k8s.ovn.org/name"=cluster-control}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 其中, cluster-control
-
指定您要故障排除的
AdminNetworkPolicy
的名称。 - AdminNetworkPolicy
-
指定类型:
AdminNetworkPolicy
或BaselineAdminNetworkPolicy
。
例 2.14. ACL 的输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意ingress 和 egress 的输出显示策略在 ACL 中的逻辑。例如,每次数据包与提供的
match
匹配时会执行的action
。运行以下命令,为规则检查特定 ACL:
ovn-nbctl find ACL 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,direction=Ingress,"k8s.ovn.org/name"=cluster-control,gress-index="1"}'
$ ovn-nbctl find ACL 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,direction=Ingress,"k8s.ovn.org/name"=cluster-control,gress-index="1"}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 其中,
cluster-control
-
指定 ANP 的
名称
。 入口
-
指定流量的
direction
为类型Ingress
或Egress
。 1
- 指定要查看的规则。
对于示名为
cluster-control
的 ANP 示例,其priority
是34
,以下是Ingress
rule
1 的示例输出:例 2.15. 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 其中,
运行以下命令查看 nbdb 中的地址集:
ovn-nbctl find Address_Set 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,"k8s.ovn.org/name"=cluster-control}'
$ ovn-nbctl find Address_Set 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,"k8s.ovn.org/name"=cluster-control}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 2.16.
Address_Set
的输出示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查规则的具体地址集:
ovn-nbctl find Address_Set 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,direction=Egress,"k8s.ovn.org/name"=cluster-control,gress-index="5"}'
$ ovn-nbctl find Address_Set 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,direction=Egress,"k8s.ovn.org/name"=cluster-control,gress-index="5"}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 2.17.
Address_Set
的输出示例_uuid : 8fd3b977-6e1c-47aa-82b7-e3e3136c4a72 addresses : ["0.0.0.0/0"] external_ids : {direction=Egress, gress-index="5", ip-family=v4, "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Egress:5:v4", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a11452480169090787059
_uuid : 8fd3b977-6e1c-47aa-82b7-e3e3136c4a72 addresses : ["0.0.0.0/0"] external_ids : {direction=Egress, gress-index="5", ip-family=v4, "k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control:Egress:5:v4", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a11452480169090787059
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令查看 nbdb 中的端口组:
ovn-nbctl find Port_Group 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,"k8s.ovn.org/name"=cluster-control}'
$ ovn-nbctl find Port_Group 'external_ids{>=}{"k8s.ovn.org/owner-type"=AdminNetworkPolicy,"k8s.ovn.org/name"=cluster-control}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 2.18.
Port_Group
的输出示例_uuid : f50acf71-7488-4b9a-b7b8-c8a024e99d21 acls : [04f20275-c410-405c-a923-0e677f767889, 0d5e4722-b608-4bb1-b625-23c323cc9926, 1a27d30e-3f96-4915-8ddd-ade7f22c117b, 1a68a5ed-e7f9-47d0-b55c-89184d97e81a, 4b5d836a-e0a3-4088-825e-f9f0ca58e538, 5a6e5bb4-36eb-4209-b8bc-c611983d4624, 5d09957d-d2cc-4f5a-9ddd-b97d9d772023, aa1a224d-7960-4952-bdfb-35246bafbac8, b23a087f-08f8-4225-8c27-4a9a9ee0c407, b7be6472-df67-439c-8c9c-f55929f0a6e0, d14ed5cf-2e06-496e-8cae-6b76d5dd5ccd] external_ids : {"k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a14645450421485494999 ports : [5e75f289-8273-4f8a-8798-8c10f7318833, de7e1b71-6184-445d-93e7-b20acadf41ea]
_uuid : f50acf71-7488-4b9a-b7b8-c8a024e99d21 acls : [04f20275-c410-405c-a923-0e677f767889, 0d5e4722-b608-4bb1-b625-23c323cc9926, 1a27d30e-3f96-4915-8ddd-ade7f22c117b, 1a68a5ed-e7f9-47d0-b55c-89184d97e81a, 4b5d836a-e0a3-4088-825e-f9f0ca58e538, 5a6e5bb4-36eb-4209-b8bc-c611983d4624, 5d09957d-d2cc-4f5a-9ddd-b97d9d772023, aa1a224d-7960-4952-bdfb-35246bafbac8, b23a087f-08f8-4225-8c27-4a9a9ee0c407, b7be6472-df67-439c-8c9c-f55929f0a6e0, d14ed5cf-2e06-496e-8cae-6b76d5dd5ccd] external_ids : {"k8s.ovn.org/id"="default-network-controller:AdminNetworkPolicy:cluster-control", "k8s.ovn.org/name"=cluster-control, "k8s.ovn.org/owner-controller"=default-network-controller, "k8s.ovn.org/owner-type"=AdminNetworkPolicy} name : a14645450421485494999 ports : [5e75f289-8273-4f8a-8798-8c10f7318833, de7e1b71-6184-445d-93e7-b20acadf41ea]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.6. AdminNetworkPolicy 的最佳实践 复制链接链接已复制到粘贴板!
本节为 AdminNetworkPolicy
和 BaselineAdminNetworkPolicy
资源提供最佳实践。
2.6.1. 设计 AdminNetworkPolicy 复制链接链接已复制到粘贴板!
在构建 AdminNetworkPolicy
(ANP) 资源时,您可能会在创建策略时考虑以下内容:
- 您可以创建具有相同优先级的 ANP。如果您使用同一优先级创建两个 ANP,请确保它们不会将重叠规则应用到同一流量。每个值仅有一个规则会被应用,当相同的优先级值有多个规则时,不会保证会应用哪个规则。因为当创建了重叠的 ANP 时,无法保证哪些策略会被优先使用,所以请使用不同的优先级来设置 ANPs。
- 管理员必须创建应用于用户命名空间的 ANP,而不是系统命名空间。
不支持将 ANP 和 BaselineAdminNetworkPolicy
(BANP) 应用到系统命名空间(default
, kube-system
, 任何以 openshift-
开头的命名空间),这样做会使集群无响应并处于无法正常工作的状态。
-
因为支持的优先级范围是
0-100
,所以您可以将您的 ANP 设置为使用一个中间范围,如30-70
。这样就可以为这个范围外保留一些更高和更低的优先级占位符。即使在这个中间范围内,您可能也会希望保留一些空缺,以便随着基础架构的变化,您可以根据需要以正确的优先级插入新的 ANP。如果您打包了 ANP,则可能需要重新创建它们,以适应将来的任何更改。 -
当使用
0.0.0.0/0
或::/0
创建一个强的Deny
策略时,请确保基本流量具有较高优先级Allow
或Pass
规则。 -
当您需要确保一个连接无论在什么情况下都被允许时,使用
Allow
作为您的action
字段。ANP 中的Allow
规则代表连接始终被允许,NetworkPolicy
将被忽略。 -
使用
Pass
作为您的action
字段,将允许或拒绝连接策略委托给NetworkPolicy
层。 - 确保多个规则中的选择器不会重叠,因此同一 IP 不会出现在多个策略中,这可能导致性能和扩展限制。
-
避免将
namedPorts
与PortNumber
和PortRange
结合使用,因为这样会创建 6 个 ACL,并导致集群中的效率降低。
2.6.1.1. 使用 BaselineAdminNetworkPolicy 的注意事项 复制链接链接已复制到粘贴板!
您只能在集群中定义单个
BaselineAdminNetworkPolicy
(BANP) 资源。以下支持用于 BANP,管理员可能在设计其 BANP 中考虑:-
您可以在用户命名空间中为 cluster-local ingress 设置默认的拒绝策略。此 BANP 将强制开发人员添加
NetworkPolicy
对象来允许他们允许的入口流量,如果他们没有为 ingress 添加网络策略,则会被拒绝。 -
您可以在用户命名空间中为 cluster-local egress 设置默认拒绝策略。此 BANP 将强制开发人员添加
NetworkPolicy
对象来允许他们允许的入口流量,如果他们没有为 ingress 添加网络策略,则会被拒绝。 -
您可以为出口设置到集群内 DNS 服务的默认允许策略。此类 BANP 可确保命名空间的用户不必将允许出口
NetworkPolicy
设置为集群内 DNS 服务。 -
您可以设置一个出口策略,允许内部出口流量到所有容器集,但拒绝访问所有外部端点(例如
0.0.0.0/0
和::/0
)。此 BANP 允许用户工作负载向其他集群端点发送流量,但默认不发送到外部端点。然后,开发人员可以使用NetworkPolicy
来允许其应用程序将流量发送到一组明确的外部服务。
-
您可以在用户命名空间中为 cluster-local ingress 设置默认的拒绝策略。此 BANP 将强制开发人员添加
-
确保对 BANP 设置了范围,以便它只拒绝到用户命名空间的流量,而不是系统命名空间。这是因为系统命名空间没有
NetworkPolicy
对象来覆盖 BANP。
2.6.1.2. AdminNetworkPolicy 和 NetworkPolicy 之间的不同 复制链接链接已复制到粘贴板!
-
与
NetworkPolicy
对象不同,您必须使用显式标签在 ANP 和 BANP 中引用工作负载,而不是使用空 ({}
) 捕获所有选择器以避免意外选择流量。
应用到基础架构命名空间的空命名空间选择器可能会导致集群无响应且处于无法正常工作状态。
-
在 ANP 的 API 语义中,您必须在创建策略时显式定义允许或拒绝规则,这与具有隐式 deny 的
NetworkPolicy
对象不同。 -
与
NetworkPolicy
对象不同,AdminNetworkPolicy
对象入口规则仅限于集群内 Pod 和命名空间,因此您无法不需要,从主机网络为 ingress 设置规则。
第 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
字段将不会包括hostNetwork
pod。您必须使用namespaceSelector
字段,podSelector
设置为{}
,以便在创建网络策略时目标hostNetwork
pod。 - 网络策略无法阻止来自 localhost 或来自其驻留的节点的流量。
以下示例 NetworkPolicy
对象演示了支持不同的情景:
拒绝所有流量:
要使项目默认为拒绝流量,请添加一个匹配所有 pod 但不接受任何流量的
NetworkPolicy
对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 只允许 OpenShift Container Platform Ingress Controller 的连接:
要使项目只允许 OpenShift Container Platform Ingress Controller 的连接,请添加以下
NetworkPolicy
对象。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 只接受项目中 pod 的连接:
重要要允许同一命名空间中的
hostNetwork
pod 的入站连接,您需要将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.podSelector
spec 的网络策略,使用带有多个ingress
或egress
规则的一个网络策略比带有ingress
或egress
子集的多个网络策略更高效。 每个基于
podSelector
或namespaceSelector
spec 的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.podSelector
spec。如果不同的网络策略有相同的ingress
或egress
规则,则创建一个带有通用的spec.podSelector
spec 可能更有效率。例如,以下两个策略有不同的规则: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. 创建网络策略 复制链接链接已复制到粘贴板!
作为具有 admin
角色的用户,您可以为命名空间创建网络策略。
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>.yaml
Copy 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.yaml
Copy 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.yaml
Copy 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.yaml
Copy 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=80
Copy 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 -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 shell 中运行以下命令,并观察该服务是否允许请求:
wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.default
Copy 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.yaml
Copy 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=80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
prod
命名空间:oc create namespace prod
$ oc create namespace prod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来标记
prod
命名空间:oc label namespace/prod purpose=production
$ oc label namespace/prod purpose=production
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
dev
命名空间:oc create namespace dev
$ oc create namespace dev
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来标记
dev
命名空间:oc label namespace/dev purpose=testing
$ oc label namespace/dev purpose=testing
Copy 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 -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 shell 中运行以下命令,并观察请求的原因。例如,预期的输出状态为
wget:下载超时
。wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.default
Copy 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 -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 shell 中运行以下命令,并观察是否允许请求:
wget -qO- --timeout=2 http://web.default
# wget -qO- --timeout=2 http://web.default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3. 查看网络策略 复制链接链接已复制到粘贴板!
以具有 admin
角色的用户,您可以查看命名空间的网络策略。
3.3.1. 示例 NetworkPolicy 对象 复制链接链接已复制到粘贴板!
下文解释了示例 NetworkPolicy 对象:
3.3.2. 使用 CLI 查看网络策略 复制链接链接已复制到粘贴板!
您可以检查命名空间中的网络策略。
如果使用具有 cluster-admin
角色的用户登录,您可以查看集群中的任何网络策略。
前提条件
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
admin
权限的用户登陆到集群。 - 您在网络策略所在的命名空间中。
流程
列出命名空间中的网络策略:
要查看命名空间中定义的网络策略对象,请输入以下命令:
oc get networkpolicy
$ oc get networkpolicy
Copy 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-namespace
Copy 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.4. 编辑网络策略 复制链接链接已复制到粘贴板!
作为具有 admin
角色的用户,您可以编辑命名空间的现有网络策略。
3.4.1. 编辑网络策略 复制链接链接已复制到粘贴板!
您可以编辑命名空间中的网络策略。
如果使用具有 cluster-admin
角色的用户登录,则可以在集群中的任何命名空间中编辑网络策略。
先决条件
-
集群使用支持
NetworkPolicy
对象的网络插件,如带有设置了mode: NetworkPolicy
的 OpenShift SDN 网络插件。 -
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
admin
权限的用户登陆到集群。 - 您在网络策略所在的命名空间中。
流程
可选: 要列出一个命名空间中的网络策略对象,请输入以下命令:
oc get networkpolicy
$ oc get networkpolicy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<namespace>
- 可选: 如果对象在与当前命名空间不同的命名空间中定义,使用它来指定命名空间。
编辑网络策略对象。
如果您在文件中保存了网络策略定义,请编辑该文件并进行必要的更改,然后输入以下命令。
oc apply -n <namespace> -f <policy_file>.yaml
$ oc apply -n <namespace> -f <policy_file>.yaml
Copy 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. 删除网络策略 复制链接链接已复制到粘贴板!
以具有 admin
角色的用户,您可以从命名空间中删除网络策略。
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.6. 为项目定义默认网络策略 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在创建新项目时修改新项目模板,使其自动包含网络策略。如果您还没有新项目的自定义模板,则需要首先创建一个。
3.6.1. 为新项目修改模板 复制链接链接已复制到粘贴板!
作为集群管理员,您可以修改默认项目模板,以便使用自定义要求创建新项目。
创建自己的自定义项目模板:
先决条件
-
可以使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。
流程
-
以具有
cluster-admin
特权的用户身份登录。 生成默认项目模板:
oc adm create-bootstrap-project-template -o yaml > template.yaml
$ oc adm create-bootstrap-project-template -o yaml > template.yaml
Copy 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-config
Copy 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/cluster
Copy 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. 在新项目模板中添加网络策略 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在新项目的默认模板中添加网络策略。OpenShift Container Platform 将自动创建项目中模板中指定的所有 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-config
Copy 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 networkpolicy
Copy 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> 7s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.7. 使用网络策略配置多租户隔离 复制链接链接已复制到粘贴板!
作为集群管理员,您可以配置网络策略以为多租户网络提供隔离功能。
本节所述配置网络策略提供了在以前版本的 OpenShift Container Platform 中与 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-operator
Webhook 控制器验证 Webhook 的健康状况。
可选: 要确认当前项目中存在网络策略,请输入以下命令:
oc describe networkpolicy
$ oc describe networkpolicy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.7.2. 后续步骤 复制链接链接已复制到粘贴板!
第 4 章 网络安全的审计日志记录 复制链接链接已复制到粘贴板!
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 网络插件。
4.1. 审计配置 复制链接链接已复制到粘贴板!
审计日志记录的配置作为 OVN-Kubernetes 集群网络配置的一部分指定。以下 YAML 演示了审计日志的默认值:
审计日志记录配置
下表描述了审计日志的配置字段。
字段 | 类型 | 描述 |
---|---|---|
| 整数 |
每个节点每秒生成一次的消息数量上限。默认值为每秒 |
| 整数 |
审计日志的最大大小,以字节为单位。默认值为 |
| 整数 | 保留的日志文件的最大数量。 |
| 字符串 | 以下附加审计日志目标之一:
|
| 字符串 |
syslog 工具,如 as |
4.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
下表描述了命名空间注解值:
字段 | 描述 |
---|---|
|
阻止任何与 |
|
允许命名空间访问与 |
|
|
4.3. AdminNetworkPolicy 审计日志记录 复制链接链接已复制到粘贴板!
每个 AdminNetworkPolicy
CR 启用了审计日志记录,使用 k8s.ovn.org/acl-logging
键注解 ANP 策略,如下例所示:
例 4.1. AdminNetworkPolicy
CR 的注解示例
每当特定的 OVN ACL 达到并满足日志记录注解中设置的操作条件时,都会生成日志。例如,一个事件,其中任何带有标签 tenant: product-development
的命名空间都访问带有标签 tenant: backend-storage
的命名空间,则会生成日志。
ACL 日志记录限制为 60 个字符。如果您的 ANP name
字段较长,日志的其余部分将被截断。
以下是以下示例日志条目的方向索引:
方向 | 规则 |
---|---|
入口 |
|
Egress |
|
例 4.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
例 4.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
例 4.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 |
---|---|
|
您必须至少指定
|
4.4. BaselineAdminNetworkPolicy 审计日志记录 复制链接链接已复制到粘贴板!
使用 k8s.ovn.org/acl-logging
键注解 BANP 策略,在 BaselineAdminNetworkPolicy
CR 中启用审计日志记录,如下例所示:
例 4.5. BaselineAdminNetworkPolicy
CR 的注解示例
在示例中,一个事件,其中任何带有标签 tenant: dns
的命名空间都访问带有标签 tenant: workload
的命名空间,则会生成日志。
以下是以下示例日志条目的方向索引:
方向 | 规则 |
---|---|
入口 |
|
Egress |
|
例 4.6. ACL allow 日志项示例,用于带有 Ingress:0
的 default
BANP 的 Allow
操作
例 4.7. ACL allow 日志项示例,用于带有 Egress:0
和 Ingress:1
的 default
BANP 的 Allow
操作
下表描述了 BANP 注解:
注解 | value |
---|---|
|
您必须至少指定
|
4.5. 为集群配置出口防火墙和网络策略审计 复制链接链接已复制到粘贴板!
作为集群管理员,您可以自定义集群的审计日志。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
使用具有
cluster-admin
权限的用户登陆到集群。
流程
要自定义审计日志配置,请输入以下命令:
oc edit network.operator.openshift.io/cluster
$ oc edit network.operator.openshift.io/cluster
Copy 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 created
Copy 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_IP
Copy 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 2041ms
Copy 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_IP
Copy 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 done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.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 done
Copy 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=0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.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 成功输出列出了审计日志记录名称和
注解
的状态。
第 5 章 Egress 防火墙 复制链接链接已复制到粘贴板!
5.1. 查看项目的出口防火墙 复制链接链接已复制到粘贴板!
作为集群管理员,您可以列出任何现有出口防火墙的名称,并查看特定出口防火墙的流量规则。
5.1.1. 查看 EgressFirewall 对象 复制链接链接已复制到粘贴板!
您可以查看集群中的 EgressFirewall 对象。
先决条件
- 使用 OVN-Kubernetes 网络插件的集群。
-
安装 OpenShift 命令行界面 (CLI),通常称为
oc
。 - 您必须登录集群。
流程
可选: 要查看集群中定义的 EgressFirewall 对象的名称,请输入以下命令:
oc get egressfirewall --all-namespaces
$ oc get egressfirewall --all-namespaces
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要检查策略,请输入以下命令。将
<policy_name>
替换为要检查的策略名称。oc describe egressfirewall <policy_name>
$ oc describe egressfirewall <policy_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2. 为项目编辑出口防火墙 复制链接链接已复制到粘贴板!
作为集群管理员,您可以修改现有出口防火墙的网络流量规则。
5.2.1. 编辑 EgressFirewall 对象 复制链接链接已复制到粘贴板!
作为集群管理员,您可以更新一个项目的出口防火墙。
先决条件
- 使用 OVN-Kubernetes 网络插件的集群。
-
安装 OpenShift CLI (
oc
) 。 - 您需要使用集群管理员身份登陆到集群。
流程
查找项目的 EgressFirewall 对象的名称。将
<project>
替换为项目的名称。oc get -n <project> egressfirewall
$ oc get -n <project> egressfirewall
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果您在创建出口网络防火墙时没有保存 EgressFirewall 对象的副本,请输入以下命令来创建副本。
oc get -n <project> egressfirewall <name> -o yaml > <filename>.yaml
$ oc get -n <project> egressfirewall <name> -o yaml > <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<project>
替换为项目的名称。将<name>
替换为 Pod 的名称。将<filename>
替换为要将 YAML 保存到的文件的名称。修改策略规则后,请输入以下命令替换 EgressFirewall 对象。将
<filename>
替换为包含更新的 EgressFirewall 对象的文件名称。oc replace -f <filename>.yaml
$ oc replace -f <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3. 从项目中删除出口防火墙 复制链接链接已复制到粘贴板!
作为集群管理员,您可以从项目中删除出口防火墙,从而删除对项目的离开 OpenShift Container Platform 集群的网络流量的限制。
5.3.1. 删除 EgressFirewall 对象 复制链接链接已复制到粘贴板!
作为集群管理员,您可以从项目中删除出口防火墙。
先决条件
- 使用 OVN-Kubernetes 网络插件的集群。
-
安装 OpenShift CLI (
oc
) 。 - 您需要使用集群管理员身份登陆到集群。
流程
查找项目的 EgressFirewall 对象的名称。将
<project>
替换为项目的名称。oc get -n <project> egressfirewall
$ oc get -n <project> egressfirewall
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令删除 EgressFirewall 对象。将
<project>
替换为项目名称,<name>
替换为对象名称。oc delete -n <project> egressfirewall <name>
$ oc delete -n <project> egressfirewall <name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4. 为项目配置出口防火墙 复制链接链接已复制到粘贴板!
作为集群管理员,您可以为项目创建一个出口防火墙,用于限制离开 OpenShift Container Platform 集群的出口流量。
5.4.1. 出口防火墙在一个项目中的工作原理 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用一个出口防火墙来限制集群内的一些 pod 或所有 pod 可以访问的外部主机。出口防火墙适用于以下情况:
- pod 只能连接到内部主机,且无法开始连接到公共互联网。
- pod 只能连接到公共互联网,且无法启动到 OpenShift Container Platform 集群以外的内部主机的连接。
- pod 无法访问 OpenShift Container Platform 集群外的特定内部子网或主机。
- pod 只能连接到特定的外部主机。
例如,您可以允许某一个项目访问指定的 IP 范围,但拒绝其他项目对同一 IP 范围的访问。或者您可以限制应用程序开发人员从 Python pip 的镜像点进行更新,并强制要求更新只能来自于批准的源。
出口防火墙不适用于主机网络命名空间。出口防火墙规则不会影响任何启用了主机网络的 pod。
您可以通过创建一个 EgressFirewall 自定义资源(CR)对象来配置出口防火墙策略。出口防火墙与满足以下任一条件的网络流量匹配:
- CIDR 格式的 IP 地址范围
- 解析为 IP 地址的 DNS 名称
- 端口号
- 协议是以下协议之一: TCP、UDP 和 SCTP
如果您的出口防火墙包含 0.0.0.0/0
的拒绝规则,则规则会阻止对 OpenShift Container Platform API 服务器的访问。您必须为每个 IP 地址添加允许规则,或使用出口策略规则中的 nodeSelector
类型允许规则来连接到 API 服务器。
以下示例演示了确保 API 服务器访问所需的出口防火墙规则的顺序:
要查找 API 服务器的 IP 地址,请运行 oc get ep kubernetes -n default
。
如需更多信息,请参阅 BZ#1988324。
出口防火墙规则不适用于通过路由器的网络流量。任何有权创建 Route CR 对象的用户,都可以通过创建指向禁止的目的地的路由来绕过出口防火墙策略规则。
5.4.1.1. 出口防火墙的限制 复制链接链接已复制到粘贴板!
出口防火墙有以下限制:
- 项目不能有一个以上的 EgressFirewall 对象。
- 每个项目最多可定义一个具有最多 8,000 个规则的 EgressFirewall 对象。
-
如果您使用 OVN-Kubernetes 网络插件,并且为集群的
Network
自定义资源中的routingViaHost
参数配置了false
,则出口防火墙规则会影响返回入口回复。如果出口防火墙规则丢弃入口回复目的地 IP,流量将被丢弃。
违反这些限制会导致项目的出口防火墙出现问题。因此,所有外部网络流量都会丢弃,这可能会导致您的机构出现安全风险。
您可以在 kube-node-lease
、kube-public
、kube-system
、openshift
和 openshift-
项目中创建一个 Egress Firewall 资源。
5.4.1.2. 出口防火墙策略规则的匹配顺序 复制链接链接已复制到粘贴板!
OVN-Kubernetes 网络插件根据您定义规则的第一个到最后的顺序评估出口防火墙策略规则。第一个与 pod 的出口连接匹配的规则会被应用。该插件会忽略该连接的任何后续规则。
5.4.1.3. 域名服务器(DNS)解析 复制链接链接已复制到粘贴板!
如果您在 egress 防火墙策略规则中使用 DNS 名称,则正确解析域名会受到以下限制:
- 域名更新会根据生存时间(TTL)持续时间进行轮询。默认情况下,持续时间为 30 分钟。当出口防火墙控制器查询本地名称服务器以获取域名时,如果响应包含 TTL 且 TTL 小于 30 分钟,控制器会将该 DNS 名称的持续时间设置为返回的值。每个 DNS 名称都会在 DNS 记录的 TTL 过期后查询。
- 在需要时,pod 必须通过相同的本地名称服务器解析域名。否则,egress 防火墙控制器和 pod 已知的域的 IP 地址可能会有所不同。如果主机名的 IP 地址不同,则不会应用出口防火墙的一致性强制。
- 因为出口防火墙控制器和 pod 异步轮询相同的本地名称服务器,所以 pod 可能会在出口控制器执行前获取更新的 IP 地址,从而导致竞争条件。由于这个限制,仅建议在 EgressFirewall 对象中使用域名来更改 IP 地址的域。
在出口防火墙策略中使用 DNS 名称不会影响通过 CoreDNS 的本地 DNS 解析。
如果您的出口防火墙策略使用域名,并且外部 DNS 服务器处理受影响 pod 的 DNS 解析,则必须包含允许访问 DNS 服务器的 IP 地址的出口防火墙规则。
5.4.1.3.1. 改进了 DNS 解析并解析通配符域名 复制链接链接已复制到粘贴板!
在某些情况下,与 DNS 记录关联的 IP 地址会频繁更改,或者您可能希望在出口(egress)防火墙策略规则中指定通配符域名。
在这种情况下,OVN-Kubernetes 集群管理器为每个出口防火墙策略规则中使用的每个唯一 DNS 名称创建一个 DNSNameResolver
自定义资源对象。此自定义资源存储以下信息:
改进了出口防火墙规则的 DNS 解析只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
DNSNameResolver
CR 定义示例
如果在 DNS 解析 DNS 名称的过程中,查询中的 DNS 名称与 DNSNameResolver
CR 中定义的任何名称匹配,那么在 CR status
字段中会相应地更新之前的信息。如果 DNS 通配符名称查找失败,会在默认的 TTL 为 30 分钟后重试请求。
OVN-Kubernetes 集群管理器监视对 EgressFirewall
自定义资源对象的更新,并在更新发生时创建、修改或删除与这些出口防火墙策略关联的 DNSNameResolver
CR。
不要直接修改 DNSNameResolver
自定义资源。这可能导致出口防火墙的不需要的行为。
5.4.2. EgressFirewall 自定义资源(CR)对象 复制链接链接已复制到粘贴板!
您可以为出口防火墙定义一个或多个规则。规则是一个 Allow
规则,也可以是一个 Deny
规则,它包括规则适用的流量规格。
以下 YAML 描述了 EgressFirewall CR 对象:
EgressFirewall 对象
5.4.2.1. EgressFirewall 规则 复制链接链接已复制到粘贴板!
以下 YAML 描述了一个出口防火墙规则对象。用户可以选择 CIDR 格式的 IP 地址范围、域名,或使用 nodeSelector
允许或拒绝出口流量。egress
小节需要一个包括一个或多个对象的数组。
出口策略规则小节
端口小节
ports: - port: <port> protocol: <protocol>
ports:
- port: <port>
protocol: <protocol>
5.4.2.2. EgressFirewall CR 对象示例 复制链接链接已复制到粘贴板!
以下示例定义了几个出口防火墙策略规则:
- 1
- 出口防火墙策略规则对象的集合。
以下示例定义了一个策略规则,即如果流量使用 TCP 协议和目标端口 80
,或任何协议和目标端口 443
,则拒绝通过 172.16.1.1/32
IP 地址到主机的流量。
5.4.2.3. EgressFirewall 的 nodeSelector 示例 复制链接链接已复制到粘贴板!
作为一个集群管理员,您可以使用 nodeSelector
指定标签来允许或拒绝集群中节点的出口流量。标签可以应用到一个或多个节点。以下是带有 region=east
标签的示例:
除了为每个节点 IP 地址添加手动规则外,使用节点选择器创建标签,允许出口防火墙后面的 pod 访问主机网络 pod。
5.4.3. 创建出口防火墙策略对象 复制链接链接已复制到粘贴板!
作为集群管理员,您可以为项目创建一个出口防火墙策略对象。
如果项目已经定义了 EgressFirewall 对象,您必须编辑现有策略来更改出口防火墙规则。
先决条件
- 使用 OVN-Kubernetes 网络插件的集群。
-
安装 OpenShift CLI (
oc
) 。 - 您需要使用集群管理员身份登陆到集群。
流程
创建策略规则:
-
创建一个
<policy_name>.yaml
文件,其中<policy_name>
描述出口策略规则。 - 在您创建的文件中,定义出口策略对象。
-
创建一个
运行以下命令来创建策略对象。将
<policy_name>
替换为策略的名称,<project>
替换为规则应用到的项目。oc create -f <policy_name>.yaml -n <project>
$ oc create -f <policy_name>.yaml -n <project>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功输出列出了 egressfirewall.k8s.ovn.org/v1 名称
以及创建
的状态。-
可选:保存
<policy_name>.yaml
文件,以便在以后进行修改。
第 6 章 配置 IPsec 加密 复制链接链接已复制到粘贴板!
通过启用 IPsec,您可以加密节点之间的内部 pod 到 pod 集群流量,以及集群外部的 pod 和 IPsec 端点之间的外部流量。OVN-Kubernetes 集群网络上的节点之间的所有 pod 到 pod 网络流量都使用 IPsec 传输模式 加密。
默认禁用 IPsec。您可以在安装集群安装过程中或安装后启用 IPsec。有关集群安装的详情,请参阅 OpenShift Container Platform 安装概述。
当 libreswan
和 NetworkManager-libreswan
软件包有不同的 OpenShift Container Platform 版本时,将集群升级到 OpenShift Container Platform 4.17 会导致两个连续的计算节点重新引导操作。对于第一次重启,Cluster Network Operator (CNO)将 IPsec 配置应用到计算节点。对于第二个重启,Machine Config Operator (MCO)会将最新的机器配置应用到集群。
要将 CNO 和 MCO 更新合并到单一节点重启后,请完成以下任务:
-
在升级集群前,在对计算节点进行分组的
MachineConfigPools
自定义资源(CR)中将paused
参数设置为true
。 -
在升级集群后,将参数设置为
false
。
如需更多信息,请参阅 执行 Control Plane Only 更新。
OpenShift Container Platform 集群中 IPsec 存在以下支持限制:
- 在 IBM Cloud® 上,IPsec 仅支持 NAT-T。在此平台上不支持 Encapsulating Security Payload (ESP)。
- 如果您的集群在 Red Hat OpenShift Container Platform 中使用 托管的 control plane,则 IPsec 不支持 pod 到 pod,以及到外部主机的 IPsec 加密。
- 如果有一个或多个接口附加到 Open vSwitch (OVS),则不支持在任何网络接口中使用 ESP 硬件卸载。为集群启用 IPsec 会触发将 IPsec 与附加到 OVS 的接口搭配使用。默认情况下,OpenShift Container Platform 在附加到 OVS 的任何接口上禁用 ESP 硬件卸载。
- 如果您为未附加到 OVS 的网络接口启用了 IPsec,集群管理员必须在未附加到 OVS 的每个接口上手动禁用 ESP 硬件卸载。
-
Red Hat Enterprise Linux (RHEL)计算节点上不支持 IPsec,因为主机和每个计算节点上存在的
ovn-ipsec
容器间的libreswan
不兼容问题。请参阅(OCPBUGS-53316)。
以下列表概述了 IPsec 文档中的关键任务:
- 在集群安装后启用和禁用 IPsec。
- 为集群和外部主机之间的流量配置 IPsec 加密。
- 验证 IPsec 是否加密不同节点上的 pod 之间的流量。
6.1. 操作模式 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform 集群中使用 IPsec 时,您可以从以下操作模式中选择:
模式 | 描述 | default |
---|---|---|
| 没有流量被加密。这是集群的默认设置。 | 是 |
| pod 到 pod 的流量被加密,如"由 pod 到 pod IPsec 加密的网络流量类型"中所述。完成 IPsec 所需的配置步骤后,可以加密到外部节点的流量。 | 否 |
| 完成 IPsec 所需的配置步骤后,可以加密到外部节点的流量。 | 否 |
6.2. 先决条件 复制链接链接已复制到粘贴板!
对于将流量加密到外部主机的 IPsec 支持,请确保您满足以下先决条件:
-
在 OVN-Kubernetes 网络插件的
ovnKubernetesConfig.gatewayConfig
规格中设置routingViaHost=true
。 安装 NMState Operator。指定 IPsec 配置需要这个 Operator。如需更多信息,请参阅 Kubernetes NMState Operator。
注意NMState Operator 仅在 Google Cloud Platform (GCP) 上支持来配置 IPsec。
-
已安装 Butane 工具 (
butane
)。要安装 Butane,请参阅安装 Butane。
这些先决条件需要将证书添加到主机 NSS 数据库中,并配置 IPsec 与外部主机进行通信。
6.3. 启用 IPsec 时的网络连接要求 复制链接链接已复制到粘贴板!
您必须配置机器之间的网络连接,以允许 OpenShift Container Platform 集群组件进行通信。每台机器都必须能够解析集群中所有其他机器的主机名。
协议 | port | 描述 |
---|---|---|
UDP |
| IPsec IKE 数据包 |
| IPsec NAT-T 数据包 | |
ESP | N/A | IPsec Encapsulating Security Payload(ESP) |
6.4. pod 到 pod 流量的 IPsec 加密 复制链接链接已复制到粘贴板!
对于 pod 到 pod 流量的 IPsec 加密,以下小节描述了加密哪些特定的 pod 到 pod 的流量,使用什么加密协议,以及如何处理 X.509 证书。这些部分不适用于集群和外部主机之间的 IPsec 加密,您必须为特定的外部网络基础架构手动配置。
6.4.1. 由 pod 到 pod IPsec 加密的网络流量类型 复制链接链接已复制到粘贴板!
启用 IPsec 后,只有 pod 间的以下网络流量会被加密:
- 集群网络的不同节点上的 pod 间的流量
- 从主机网络上的 pod 流量到集群网络上的 pod
以下流量流没有加密:
- 集群网络上同一节点上的 pod 间的流量
- 主机网络上的 pod 间的流量
- 从集群网络上的 pod 流量到主机网络上的 pod
下图中显示了加密和未加密的流程:
6.4.2. 加密协议和 IPsec 模式 复制链接链接已复制到粘贴板!
使用的加密机制是 AES-GCM-16-256
。完整性检查值(ICV)为 16
字节。密钥长度为 256
位。
使用的 IPsec 模式是 传输模式,这是通过向原始数据包的 IP 标头添加封装安全 Payload (ESP) 标头来加密端到端通信的模式。OpenShift Container Platform 目前不支持 pod 到 pod 通信的 IPsec Tunnel 模式。
6.4.3. 安全证书生成和轮转 复制链接链接已复制到粘贴板!
Cluster Network Operator(CNO)生成自签名 X.509 证书颁发机构(CA),该颁发机构(CA)用于加密。来自每个节点的证书签名请求(CSR)由 CNO 自动实现。
CA 的有效期为 10 年。独立节点证书的有效期为 5 年,并在 4 年半后自动轮转。
6.5. 外部流量的 IPsec 加密 复制链接链接已复制到粘贴板!
OpenShift Container Platform 支持使用 IPsec 来加密用于外部主机的流量,确保传输过程中数据的保密性和完整性。此功能依赖于您必须提供的 X.509 证书。
6.5.1. 支持的平台 复制链接链接已复制到粘贴板!
在以下平台上支持此功能:
- 裸机
- Google Cloud Platform (GCP)
- Red Hat OpenStack Platform(RHOSP)
- VMware vSphere
如果您有 Red Hat Enterprise Linux (RHEL)计算节点,则它们不支持对外部流量的 IPsec 加密。
如果您的集群在 Red Hat OpenShift Container Platform 中使用托管的 control plane,则不支持将流量加密到外部主机的 IPsec。
6.5.2. 限制: 复制链接链接已复制到粘贴板!
确保观察到以下限制:
- 在为外部流量配置 IPsec 时,NMState Operator 目前不支持 IPv6 配置。
-
提供的证书捆绑包中的证书通用名称(CN)不能以
ovs_
前缀开头,因为这个命名可以与每个节点的网络安全服务(NSS)数据库中的 pod 到 pod 的 IPsec CN 名称冲突。
6.6. 启用 IPsec 加密 复制链接链接已复制到粘贴板!
作为集群管理员,您可以在集群和外部 IPsec 端点之间,启用 pod 到 pod IPsec 加密和 IPsec 加密。
您可以使用以下模式之一配置 IPsec:
-
Full
:pod 到 pod 和外部流量的加密 -
External
:对外部流量进行加密
如果以 Full
模式配置 IPsec,还必须完成"为外部流量配置 IPsec 加密"过程。
先决条件
-
安装 OpenShift CLI (
oc
) 。 -
以具有
cluster-admin
权限的用户身份登录集群。 -
您已将集群 MTU 的大小减少为
46
字节,以允许 IPsec ESP 标头的开销。
流程
要启用 IPsec 加密,请输入以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
External
以加密到外部主机的流量,或者指定Full
来加密 pod 到 pod 流量,以及可选的到外部主机的流量。默认情况下禁用 IPsec。
- 完成"为外部流量配置 IPsec 加密"流程,使用 IPsec 加密外部流量。
验证
要查找 OVN-Kubernetes data plane pod 的名称,请输入以下命令:
oc get pods -n openshift-ovn-kubernetes -l=app=ovnkube-node
$ oc get pods -n openshift-ovn-kubernetes -l=app=ovnkube-node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证您在集群中启用了 IPsec:
注意作为集群管理员,当您以
Full
模式配置 IPsec 时,您可以验证您是否在集群中的 pod 之间启用了 IPsec。此步骤不会验证 IPsec 是否在集群和外部主机间工作。oc -n openshift-ovn-kubernetes rsh ovnkube-node-<XXXXX> ovn-nbctl --no-leader-only get nb_global . ipsec
$ oc -n openshift-ovn-kubernetes rsh ovnkube-node-<XXXXX> ovn-nbctl --no-leader-only get nb_global . ipsec
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中: &
lt;XXXXX
> 指定上一步中 pod 的随机字符序列。命令的成功输出显示状态为
true
。
6.7. 为外部流量配置 IPsec 加密 复制链接链接已复制到粘贴板!
作为集群管理员,要使用 IPsec 加密外部流量,您必须为网络基础架构配置 IPsec,包括提供 PKCS#12 证书。因为这个流程使用 Butane 创建机器配置,所以必须安装 butane
命令。
应用机器配置后,Machine Config Operator 会重新引导集群中受影响的节点,以推出新机器配置。
先决条件
-
安装 OpenShift CLI (
oc
) 。 -
您已在本地计算机上安装了
butane
工具。 - 在集群中安装了 NMState Operator。
-
以具有
cluster-admin
权限的用户身份登录集群。 - 您有一个 IPsec 端点的现存的 PKCS#12 证书,以及一个 PEM 格式的 CA 证书。
-
您在集群中的
Full
或External
模式中启用了 IPsec。 -
您必须在 OVN-Kubernetes 网络插件的
ovnKubernetesConfig.gatewayConfig
规格中将routingViaHost
参数设置为true
。
流程
使用 NMState Operator 节点网络配置策略创建 IPsec 配置。如需更多信息,请参阅 Libreswan 作为 IPsec VPN 实现。
要识别 IPsec 端点的集群节点的 IP 地址,请输入以下命令:
oc get nodes
$ oc get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建名为
ipsec-config.yaml
的文件,其中包含 NMState Operator 的节点网络配置策略,如下例所示。有关NodeNetworkConfigurationPolicy
对象的概述,请参阅 Kubernetes NMState 项目。NMState IPsec 传输配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NMState IPsec 隧道配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要配置 IPsec 接口,请输入以下命令:
oc create -f ipsec-config.yaml
$ oc create -f ipsec-config.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
提供以下证书文件以添加到每个主机上的网络安全服务(NSS)数据库中。这些文件在后续步骤中作为 Butane 配置的一部分导入。
-
left_server.p12
:IPsec 端点的证书捆绑包 -
ca.pem
:您使用签名证书的证书颁发机构
-
创建机器配置以将证书添加到集群中:
要为 control plane 和 worker 节点创建 Butane 配置文件,请输入以下命令:
注意您在配置文件中指定的 Butane 版本应与 OpenShift Container Platform 版本匹配,并且始终以
0
结尾。例如,4.17.0
。有关 Butane 的信息,请参阅"使用 Butane 创建机器配置"。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将您在上一步中创建的 Butane 文件转换为机器配置,请输入以下命令:
for role in master worker; do butane -d . 99-ipsec-${role}-endpoint-config.bu -o ./99-ipsec-$role-endpoint-config.yaml done
$ for role in master worker; do butane -d . 99-ipsec-${role}-endpoint-config.bu -o ./99-ipsec-$role-endpoint-config.yaml done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要将机器配置应用到集群,请输入以下命令:
for role in master worker; do oc apply -f 99-ipsec-${role}-endpoint-config.yaml done
$ for role in master worker; do oc apply -f 99-ipsec-${role}-endpoint-config.yaml done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要当 Machine Config Operator (MCO) 更新每个机器配置池中的机器时,它会逐一重启每个节点。在外部 IPsec 连接可用前,您必须等待所有节点更新。
输入以下命令检查机器配置池状态:
oc get mcp
$ oc get mcp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功更新的节点具有以下状态:
UPDATED=true
、UPDATING=false
、DEGRADED=false
。注意默认情况下,MCO 会一次在一个池中更新一个机器,从而导致迁移总时间随着集群大小的增加而增加。
要确认 IPsec 机器配置已被成功推出,请输入以下命令:
确认创建 IPsec 机器配置:
oc get mc | grep ipsec
$ oc get mc | grep ipsec
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
80-ipsec-master-extensions 3.2.0 6d15h 80-ipsec-worker-extensions 3.2.0 6d15h
80-ipsec-master-extensions 3.2.0 6d15h 80-ipsec-worker-extensions 3.2.0 6d15h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认 control plane 节点的 IPsec 扩展的应用程序。示例输出将显示
2
。oc get mcp master -o yaml | grep 80-ipsec-master-extensions -c
$ oc get mcp master -o yaml | grep 80-ipsec-master-extensions -c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认计算节点的 IPsec 扩展的应用程序。示例输出将显示
2
。oc get mcp worker -o yaml | grep 80-ipsec-worker-extensions -c
$ oc get mcp worker -o yaml | grep 80-ipsec-worker-extensions -c
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.8. 为外部 IPsec 端点禁用 IPsec 加密 复制链接链接已复制到粘贴板!
作为集群管理员,您可以删除外部主机的现有 IPsec 隧道。
先决条件
-
安装 OpenShift CLI (
oc
) 。 -
以具有
cluster-admin
权限的用户身份登录集群。 -
您在集群中的
Full
或External
模式中启用了 IPsec。
流程
使用以下 YAML 创建名为
remove-ipsec-tunnel.yaml
的文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
name
- 指定节点网络配置策略的名称。
node_name
- 指定您要删除的 IPsec 隧道的节点名称。
tunnel_name
- 指定现有 IPsec 隧道的接口名称。
要删除 IPsec 隧道,请输入以下命令:
oc apply -f remove-ipsec-tunnel.yaml
$ oc apply -f remove-ipsec-tunnel.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.9. 禁用 IPsec 加密 复制链接链接已复制到粘贴板!
作为集群管理员,您可以禁用 IPsec 加密。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
使用具有
cluster-admin
权限的用户登陆到集群。
流程
要禁用 IPsec 加密,请输入以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
可选:您可以将集群 MTU 的大小增加
46
个字节,因为 IP 数据包中不再有 IPsec ESP 标头的开销。
6.10. 其他资源 复制链接链接已复制到粘贴板!
- 在 Red Hat Enterprise Linux (RHEL) 10 中配置使用 IPsec 的 VPN
- 安装 Butane
- 关于 OVN-Kubernetes Container Network Interface (CNI) 网络插件
- 更改集群网络的 MTU
- Network [operator.openshift.io/v1] API
第 7 章 零信任网络 复制链接链接已复制到粘贴板!
零信任(Zero trust)一个设计安全基础架构的方法,它基于内部的环境,其中的每个交流行为都从一个不受信任的状态开始。这与传统的架构不同。传统架构可能会根据交流是否是在防火墙内发起的来确定其信任性。更具体地说,零信任会尝试缩小安全基础架构中的漏洞(依赖隐式信任模型和一次性身份验证)。
OpenShift Container Platform 可以为平台上运行的容器添加一些零信任网络功能,而无需更改容器或它们中运行的软件。红帽提供的几种产品进一步增加了容器的零信任网络功能。如果您能够更改容器中运行的软件,则还有红帽支持的其他项目,可以添加进一步的功能。
探索零信任网络的以下目标功能。
7.1. 信任的根 复制链接链接已复制到粘贴板!
公共证书和私钥对于零信任网络至关重要。它们用来识别另一个组件、验证和保护流量的安全组件。证书由其他证书签名,存在到根证书颁发机构 (CA) 的信任链。参与网络的所有内容需要最终具有 root CA 的公钥,以便它可以验证信任链。对于面向公共的项,通常是全局已知的根 CA,其密钥与操作系统、Web 浏览器等一起分发。但是,如果私有 CA 的证书被分发到所有方,则可以针对一个集群或一个机构运行私有 CA。
利用:
- OpenShift Container Platform:OpenShift 在安装时会创建一个集群 CA,用于保护集群资源。但是,OpenShift Container Platform 也可以在集群中为服务证书创建和签署证书,并在请求时可以将集群 CA 捆绑包注入 pod。由 OpenShift Container Platform 创建并签名的服务证书具有 26 个月的生存时间 (TTL),并在 13 个月内自动轮转。如有必要,也可以手动轮转它们。
- OpenShift cert-manager Operator :cert-manager 允许您请求由外部信任根签名的密钥。有许多可配置的签发者可以与外部签发者集成,以及与委派的签名证书一起运行的方法。cert-manager API 可供零信任网络中的其他软件使用,以请求必要的证书(如 Red Hat OpenShift Service Mesh),或者可由客户软件直接使用。
7.2. 流量身份验证和加密 复制链接链接已复制到粘贴板!
确保网络上的所有流量都加密,并且端点是可识别的。例如,Mutual TLS 或 mTLS,这是 mutual 身份验证的方法。
利用:
- OpenShift Container Platform:使用透明 pod-to-pod IPsec,可以通过 IP 地址识别流量的源和目标。这可以实现对出口流量使用 IPsec 加密。通过使用 egress IP 功能,流量的源 IP 地址可用于识别集群中的流量源。
- Red Hat OpenShift Service Mesh: 提供强大的 mTLS 功能,这些功能可以透明地增加离开 pod 的流量以提供身份验证和加密。
- OpenShift cert-manager Operator:使用自定义资源定义 (CRD) 请求可挂载用于 SSL/TLS 协议的证书。
7.3. 身份识别和验证 复制链接链接已复制到粘贴板!
在使用 CA 最小化证书后,您可以通过验证连接端的另一端的连接身份验证一个用户或客户端机器来建立信任关系。这还需要管理证书生命周期,以便在被破坏时限制使用。
利用:
- OpenShift Container Platform:集群签名的服务证书,以确保客户端与可信端点通信。这要求服务使用 SSL/TLS,并且客户端使用集群 CA。客户端身份必须使用某种其他方法提供。
- Red Hat Single Sign-On:提供与企业用户目录或第三方身份提供程序的请求身份验证集成。
- Red Hat OpenShift Service Mesh: 将连接透明升级到 mTLS、自动轮转、自定义证书过期以及请求使用 JSON Web 令牌 (JWT) 的身份验证。
- OpenShift cert-manager Operator :创建和管理证书,供应用程序使用。证书可以由 CRD 控制并挂载为 secret,也可以更改应用程序以直接与 cert-manager API 交互。
7.4. 服务间的授权 复制链接链接已复制到粘贴板!
务必要根据请求者的身份控制对服务的访问。这由平台完成,不需要每个应用程序来实现它。这样可以更好地审核和检查策略。
利用:
-
OpenShift Container Platform:可以使用 Kubernetes
NetworkPolicy
和AdminNetworkPolicy
对象在平台的网络层中强制实施隔离。 - Red Hat OpenShift Service Mesh: 使用标准 Istio 对象 对流量的复杂 L4 和 L7 控制,并使用 mTLS 识别流量源和目标,然后根据该信息应用策略。
7.5. 事务级验证 复制链接链接已复制到粘贴板!
除了识别和验证连接的功能外,控制单个事务的访问也很有用。这可包括源、可观察性和语义验证的速率限制。
利用:
- Red Hat OpenShift Service Mesh: 执行对请求的 L7 检查,拒绝 HTTP 请求、事务级 可观察性和报告。Service Mesh 还可使用 JWT 提供基于请求的身份验证。
7.6. 风险评估 复制链接链接已复制到粘贴板!
随着集群中的安全策略数量增加,策略允许和拒绝的视觉化变得越来越重要。这些工具可让您更轻松地创建、视觉化和管理集群安全策略。
利用:
-
Red Hat OpenShift Service Mesh: 使用 OpenShift Web 控制台创建和视觉化 Kubernetes
NetworkPolicy
和AdminNetworkPolicy
,以及 OpenShift NetworkingEgressFirewall
对象。 - Red Hat Advanced Cluster Security for Kubernetes :对象的高级视觉化。
7.7. 站点范围内的策略实施和分发 复制链接链接已复制到粘贴板!
在集群中部署应用程序后,管理组成安全规则的所有对象就变得困难。务必要应用站点范围的策略,并审核部署的对象是否符合策略。这应该允许将某些权限委派给定义的绑定内的用户和集群管理员,并应允许例外策略。
利用:
7.8. 持续的可观察性,以及重新检查评估 复制链接链接已复制到粘贴板!
运行的集群后,您希望能够观察流量,并使用定义的规则验证流量是否被端口。这对入侵检测、共识非常重要,有助于操作负载管理。
利用:
- Network Observability Operator:允许检查、监控和警报到集群中的 pod 和节点的网络连接。
- Red Hat Advanced Cluster Management (RHACM) for Kubernetes: 监控、收集和评估系统级事件,如进程执行、网络连接和流以及特权升级。它可以决定集群的基线,然后检测异常活动并提醒您。
- Red Hat OpenShift Service Mesh : 可以监控进入和离开 pod 的流量。
- Red Hat OpenShift distributed tracing 平台 :对于适当的检测应用程序,您可以看到与特定操作关联的所有流量,因为它被分成到微服务的子请求。这可让您识别分布式应用程序中的瓶颈。
7.9. 端点安全性 复制链接链接已复制到粘贴板!
务必要信任在集群中运行服务的软件没有被破坏。例如,您可能需要确保在可信硬件上运行认证的镜像,并有策略只允许基于端点特征或来自端点特征的连接。
利用:
- OpenShift Container Platform:Secureboot 可以确保集群中的节点正在运行可信软件,因此平台本身(包括容器运行时)没有被篡改。您可以将 OpenShift Container Platform 配置为仅运行 由特定签名签名的镜像。
- Red Hat Trusted Artifact Signer:这可用于可信构建链并生成已签名的容器镜像。
7.10. 在集群外扩展信任 复制链接链接已复制到粘贴板!
您可能希望通过允许集群到子域的 mint CA 来在集群外扩展信任。或者,您可能希望 attest 到集群中的工作负载身份到远程端点。
利用:
- OpenShift cert-manager Operator:您可以使用 cert-manager 管理委派的 CA,以便可以在不同集群之间或通过您的机构分发信任。
- Red Hat OpenShift Service Mesh: 可以使用 SPIFFE 为在远程或本地集群中运行的端点提供远程测试工作负载。
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.