8.4. Red Hat OpenShift Service on AWS 中的 Ingress Node Firewall Operator
Ingress Node Firewall Operator 允许管理员在节点级别管理防火墙配置。
8.4.1. Ingress Node Firewall Operator
Ingress Node Firewall Operator 通过将守护进程集部署到您在防火墙配置中指定和管理的节点,在节点级别提供入口防火墙规则。要部署守护进程集,请创建一个 IngressNodeFirewallConfig
自定义资源 (CR)。Operator 应用 IngressNodeFirewallConfig
CR 来创建入口节点防火墙守护进程集 daemon
,它在与 nodeSelector
匹配的所有节点上运行。
您可以配置 IngressNodeFirewall
CR 的规则
,并使用 nodeSelector
将值设置为 "true" 的集群。
Ingress Node Firewall Operator 仅支持无状态防火墙规则。
不支持原生 XDP 驱动程序的网络接口控制器 (NIC) 将以较低性能运行。
对于 Red Hat OpenShift Service on AWS 4.14 或更高版本,您必须在 RHEL 9.0 或更高版本上运行 Ingress Node Firewall Operator。
8.4.2. 安装 Ingress Node Firewall Operator
作为集群管理员,您可以使用 Red Hat OpenShift Service on AWS CLI 或 Web 控制台安装 Ingress Node Firewall Operator。
8.4.2.1. 使用 CLI 安装 Ingress Node Firewall Operator
作为集群管理员,您可以使用 CLI 安装 Operator。
前提条件
-
已安装 OpenShift CLI(
oc
)。 - 有管理员特权的帐户。
流程
运行以下命令来创建
openshift-ingress-node-firewall
命名空间:$ cat << EOF| oc create -f - apiVersion: v1 kind: Namespace metadata: labels: pod-security.kubernetes.io/enforce: privileged pod-security.kubernetes.io/enforce-version: v1.24 name: openshift-ingress-node-firewall EOF
运行以下命令来创建
OperatorGroup
CR:$ cat << EOF| oc create -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: ingress-node-firewall-operators namespace: openshift-ingress-node-firewall EOF
订阅 Ingress Node Firewall Operator。
要为 Ingress Node Firewall Operator 创建
Subscription
CR,请输入以下命令:$ cat << EOF| oc create -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: ingress-node-firewall-sub namespace: openshift-ingress-node-firewall spec: name: ingress-node-firewall channel: stable source: redhat-operators sourceNamespace: openshift-marketplace EOF
要验证是否已安装 Operator,请输入以下命令:
$ oc get ip -n openshift-ingress-node-firewall
输出示例
NAME CSV APPROVAL APPROVED install-5cvnz ingress-node-firewall.4.0-202211122336 Automatic true
要验证 Operator 的版本,请输入以下命令:
$ oc get csv -n openshift-ingress-node-firewall
输出示例
NAME DISPLAY VERSION REPLACES PHASE ingress-node-firewall.4.0-202211122336 Ingress Node Firewall Operator 4.0-202211122336 ingress-node-firewall.4.0-202211102047 Succeeded
8.4.2.2. 使用 Web 控制台安装 Ingress Node Firewall Operator
作为集群管理员,您可以使用 Web 控制台安装 Operator。
前提条件
-
已安装 OpenShift CLI(
oc
)。 - 有管理员特权的帐户。
流程
安装 Ingress Node Firewall Operator:
-
在 Red Hat OpenShift Service on AWS web 控制台中,点 Operators
OperatorHub。 - 从可用的 Operator 列表中选择 Ingress Node Firewall Operator,然后点 Install。
- 在 Install Operator 页面中,在 Installed Namespace 下选择 Operator recommended Namespace。
- 点 Install。
-
在 Red Hat OpenShift Service on AWS web 控制台中,点 Operators
验证 Ingress Node Firewall Operator 是否已成功安装:
-
导航到 Operators
Installed Operators 页面。 确保 openshift-ingress-node-firewall 项目中列出的 Ingress Node Firewall Operator 的 Status 为 InstallSucceeded。
注意在安装过程中,Operator 可能会显示 Failed 状态。如果安装过程结束后有 InstallSucceeded 信息,您可以忽略这个 Failed 信息。
如果 Operator 没有 InstallSucceeded 状态,请按照以下步骤进行故障排除:
- 检查 Operator Subscriptions 和 Install Plans 选项卡中的 Status 项中是否有任何错误。
-
进入到 Workloads
Pods 页面,在 openshift-ingress-node-firewall
项目中检查 pod 的日志。 检查 YAML 文件的命名空间。如果缺少注解,您可以使用以下命令将注解
workload.openshift.io/allowed=management
添加到 Operator 命名空间中:$ oc annotate ns/openshift-ingress-node-firewall workload.openshift.io/allowed=management
注意对于单节点 OpenShift 集群,
openshift-ingress-node-firewall
命名空间需要workload.openshift.io/allowed=management
注解。
-
导航到 Operators
8.4.3. 部署 Ingress Node Firewall Operator
前提条件
- 已安装 Ingress Node Firewall Operator。
流程
要拒绝 Ingress Node Firewall Operator,请创建一个 IngressNodeFirewallConfig
自定义资源,该资源将部署 Operator 的守护进程集。您可以通过应用防火墙规则,将一个或多个 IngressNodeFirewall
CRD 部署到节点。
-
在
openshift-ingress-node-firewall
命名空间中创建IngressNodeFirewallConfig
,名为ingressnodefirewallconfig
。 运行以下命令来部署 Ingress Node Firewall Operator 规则:
$ oc apply -f rule.yaml
8.4.3.1. Ingress 节点防火墙配置对象
下表中描述了 Ingress Node Firewall 配置对象的字段:
字段 | 类型 | 描述 |
---|---|---|
|
|
CR 对象的名称。防火墙规则对象的名称必须是 |
|
|
Ingress Firewall Operator CR 对象的命名空间。 |
|
| 通过指定节点标签 (label) 用于目标节点的节点选择约束。例如: spec: nodeSelector: node-role.kubernetes.io/worker: "" 注意
|
|
| 指定 Node Ingress Firewall Operator 使用 eBPF Manager Operator 还是不管理 eBPF 程序。这个功能是一个技术预览功能。 有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。 |
Operator 使用 CR,并在与 nodeSelector
匹配的所有节点上创建一个入口节点防火墙守护进程集。
Ingress Node Firewall Operator 示例配置
以下示例中指定了完整的 Ingress Node 防火墙配置:
Ingress 节点防火墙配置对象示例
apiVersion: ingressnodefirewall.openshift.io/v1alpha1 kind: IngressNodeFirewallConfig metadata: name: ingressnodefirewallconfig namespace: openshift-ingress-node-firewall spec: nodeSelector: node-role.kubernetes.io/worker: ""
Operator 使用 CR,并在与 nodeSelector
匹配的所有节点上创建一个入口节点防火墙守护进程集。
8.4.3.2. Ingress 节点防火墙规则对象
下表中描述了 Ingress Node Firewall 规则对象的字段:
字段 | 类型 | 描述 |
---|---|---|
|
| CR 对象的名称。 |
|
|
此对象的字段指定要应用防火墙规则的接口。例如, |
|
|
您可以使用 |
|
|
|
Ingress 对象配置
ingress
对象的值在下表中定义:
字段 | 类型 | 描述 |
---|---|---|
|
| 允许您设置 CIDR 块。您可以从不同地址系列配置多个 CIDR。 注意
不同的 CIDR 允许您使用相同的顺序规则。如果同一节点有多个 |
|
|
对于每个
将 注意 Ingress 防火墙规则使用阻止任何无效配置的验证 Webhook 进行验证。验证 Webhook 会阻止阻塞任何关键集群服务,如 API 服务器。 |
Ingress 节点防火墙规则对象示例
以下示例中指定了完整的 Ingress Node 防火墙配置:
Ingress 节点防火墙配置示例
apiVersion: ingressnodefirewall.openshift.io/v1alpha1
kind: IngressNodeFirewall
metadata:
name: ingressnodefirewall
spec:
interfaces:
- eth0
nodeSelector:
matchLabels:
<ingress_firewall_label_name>: <label_value> 1
ingress:
- sourceCIDRs:
- 172.16.0.0/12
rules:
- order: 10
protocolConfig:
protocol: ICMP
icmp:
icmpType: 8 #ICMP Echo request
action: Deny
- order: 20
protocolConfig:
protocol: TCP
tcp:
ports: "8000-9000"
action: Deny
- sourceCIDRs:
- fc00:f853:ccd:e793::0/64
rules:
- order: 10
protocolConfig:
protocol: ICMPv6
icmpv6:
icmpType: 128 #ICMPV6 Echo request
action: Deny
- 1
- 节点上必须存在 <label_name> 和 <label_value>,且必须与应用到您希望
ingressfirewallconfig
CR 运行的节点的nodeselector
标签和值匹配。<label_value> 可以是true
或false
。通过使用nodeSelector
标签,您可以针对单独的节点组为目标,以使用ingressfirewallconfig
CR 应用不同的规则。
零信任 Ingress Node Firewall 规则对象示例
零信任 Ingress 节点防火墙规则可为多接口集群提供额外的安全性。例如,您可以使用零信任 Ingress Node Firewall 规则来丢弃除 SSH 之外的特定接口上的网络流量。
以下示例中指定了零信任 Ingress Node Firewall 规则集的完整配置:
用户需要为其提供应用程序使用的所有端口添加到允许列表,以确保正常工作。
零信任 Ingress 节点防火墙规则示例
apiVersion: ingressnodefirewall.openshift.io/v1alpha1 kind: IngressNodeFirewall metadata: name: ingressnodefirewall-zero-trust spec: interfaces: - eth1 1 nodeSelector: matchLabels: <ingress_firewall_label_name>: <label_value> 2 ingress: - sourceCIDRs: - 0.0.0.0/0 3 rules: - order: 10 protocolConfig: protocol: TCP tcp: ports: 22 action: Allow - order: 20 action: Deny 4
eBPF Manager Operator 集成只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
8.4.4. Ingress Node Firewall Operator 集成
Ingress 节点防火墙使用 eBPF 程序来实现其一些关键的防火墙功能。默认情况下,这些 eBPF 程序使用特定于 Ingress 节点防火墙的机制加载到内核中。您可以将 Ingress Node Firewall Operator 配置为使用 eBPF Manager Operator 来加载和管理这些程序。
当启用此集成时,会有以下限制:
- 如果 XDP 不可用,Ingress Node Firewall Operator 使用 TCX,而 TCX 与 bpfman 不兼容。
-
Ingress Node Firewall Operator 守护进程集 pod 会保持在
ContainerCreating
状态,直到应用防火墙规则为止。 - Ingress Node Firewall Operator 守护进程设置 pod 以特权运行。
8.4.5. 配置 Ingress Node Firewall Operator 以使用 eBPF Manager Operator
Ingress 节点防火墙使用 eBPF 程序来实现其一些关键的防火墙功能。默认情况下,这些 eBPF 程序使用特定于 Ingress 节点防火墙的机制加载到内核中。
作为集群管理员,您可以将 Ingress Node Firewall Operator 配置为使用 eBPF Manager Operator 来加载和管理这些程序,这会添加额外的安全性和可观察性功能。
前提条件
-
已安装 OpenShift CLI(
oc
)。 - 有管理员特权的帐户。
- 已安装 Ingress Node Firewall Operator。
- 已安装 eBPF Manager Operator。
流程
将以下标签应用到
ingress-node-firewall-system
命名空间:$ oc label namespace openshift-ingress-node-firewall \ pod-security.kubernetes.io/enforce=privileged \ pod-security.kubernetes.io/warn=privileged --overwrite
编辑名为
ingressnodefirewallconfig
的IngressNodeFirewallConfig
对象并设置ebpfProgramManagerMode
字段:Ingress Node Firewall Operator 配置对象
apiVersion: ingressnodefirewall.openshift.io/v1alpha1 kind: IngressNodeFirewallConfig metadata: name: ingressnodefirewallconfig namespace: openshift-ingress-node-firewall spec: nodeSelector: node-role.kubernetes.io/worker: "" ebpfProgramManagerMode: <ebpf_mode>
其中:
<ebpf_mode
> : 指定 Ingress Node Firewall Operator 是否使用 eBPF Manager Operator 来管理 eBPF 程序。必须为true
或false
。如果未设置,则不会使用 eBPF Manager。
8.4.6. 查看 Ingress Node Firewall Operator 规则
流程
运行以下命令来查看所有当前规则:
$ oc get ingressnodefirewall
选择返回的
<resource>
名称之一,并运行以下命令来查看规则或配置:$ oc get <resource> <name> -o yaml
8.4.7. 对 Ingress Node Firewall Operator 进行故障排除
运行以下命令列出已安装的 Ingress Node Firewall 自定义资源定义 (CRD):
$ oc get crds | grep ingressnodefirewall
输出示例
NAME READY UP-TO-DATE AVAILABLE AGE ingressnodefirewallconfigs.ingressnodefirewall.openshift.io 2022-08-25T10:03:01Z ingressnodefirewallnodestates.ingressnodefirewall.openshift.io 2022-08-25T10:03:00Z ingressnodefirewalls.ingressnodefirewall.openshift.io 2022-08-25T10:03:00Z
运行以下命令,以查看 Ingress Node Firewall Operator 的状态:
$ oc get pods -n openshift-ingress-node-firewall
输出示例
NAME READY STATUS RESTARTS AGE ingress-node-firewall-controller-manager 2/2 Running 0 5d21h ingress-node-firewall-daemon-pqx56 3/3 Running 0 5d21h
以下字段提供有关 Operator 状态的信息:
READY
、STATUS
、AGE
、和RESTARTS
。当 Ingress Node Firewall Operator 将守护进程集部署到分配的节点时,STATUS
字段为Running
。运行以下命令来收集所有入口防火墙节点 pod 的日志:
$ oc adm must-gather – gather_ingress_node_firewall
在 sos 节点的报告中,其中包含位于
/sos_commands/ebpf
的 eBPFbpftool
输出的报告。这些报告包括用于或作为入口防火墙 XDP 处理数据包处理、更新统计信息和发出事件的查找表。