Networking Operators
在 Red Hat OpenShift Service on AWS 中管理特定于网络的 Operator
摘要
第 1 章 AWS Load Balancer Operator
AWS Load Balancer Operator 是红帽支持的 Operator,用户可以选择性地在 SRE 管理的 Red Hat OpenShift Service on AWS 集群上安装。
AWS Load Balancer Operator 创建的负载均衡器不能用于 OpenShift 路由,并且只应用于不需要 OpenShift Route 完整第 7 层功能的单个服务或入口资源。
AWS Load Balancer Operator 用于在 Red Hat OpenShift Service on AWS 集群中安装、管理和配置 AWS Load Balancer Controller。
当创建 Kubernetes Ingress 资源和 AWS Network Load Balancers (NLB) 时,当使用 LoadBalancer 类型创建 Kubernetes Service 资源时,AWS Load Balancer Controller 置备 AWS Application Load Balancers (ALB)。
与默认的 AWS 树内负载均衡器供应商相比,这个控制器会使用 ALBs 和 NLBs 的高级注解开发。一些高级用例有:
- 使用带有 ALB 的原生 Kubernetes Ingress 对象
- 将 ALBs 与 AWS Web 应用程序防火墙(WAF)服务集成
- 指定自定义 NLB 源 IP 范围
- 指定自定义 NLB 内部 IP 地址
1.1. 准备安装 AWS Load Balancer Operator
在安装 AWS Load Balancer Operator 前,请确保集群满足要求,并且 AWS VPC 资源被正确标记。您还可以选择配置一些有用的环境变量。
1.1.1. 集群要求
您的集群必须部署到三个可用区,使用带有三个公共子网的预先存在的 VPC。
这些要求意味着 AWS Load Balancer Operator 可能不适用于某些 PrivateLink 集群。AWS NLBs 可能是此类集群的更好选择。
1.1.2. 设置临时环境变量
您可以选择设置临时环境变量来保存资源标识符和配置详情。使用临时环境变量简化了为 AWS Load Balancer Operator 运行安装命令的过程。
如果您不想使用环境变量来存储某些值,您可以在相关安装命令中手动输入这些值。
先决条件
- 
							已安装 AWS CLI (aws)。
- 
							已安装 OC CLI (oc)。
流程
- 使用 OpenShift CLI ( - oc)以集群管理员身份登录集群。- oc login --token=<token> --server=<cluster_url> - $ oc login --token=<token> --server=<cluster_url>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令来设置环境变量。 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 这些命令创建可在此终端会话中使用的环境变量,以将其值传递给命令行界面。 
- 运行以下命令验证变量值是否已正确设置: - echo "Cluster name: ${CLUSTER_NAME}- $ echo "Cluster name: ${CLUSTER_NAME} Region: ${REGION} OIDC Endpoint: ${OIDC_ENDPOINT} AWS Account ID: ${AWS_ACCOUNT_ID}"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Cluster name: <cluster_id> Region: <region> OIDC Endpoint: oidc.op1.openshiftapps.com/<oidc_id> AWS Account ID: <aws_id> - Cluster name: <cluster_id> Region: <region> OIDC Endpoint: oidc.op1.openshiftapps.com/<oidc_id> AWS Account ID: <aws_id>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
后续步骤
- 使用同一终端会话继续安装 AWS Load Balancer Operator,以确保您的环境变量不会丢失。
1.1.3. 标记 AWS VPC 和子网
在安装 AWS Load Balancer Operator 前,您必须标记 AWS VPC 资源。
先决条件
- 
							已安装 AWS CLI (aws)。
- 
							已安装 OC CLI (oc)。
流程
- 可选:为 AWS VPC 资源设置环境变量。 - export VPC_ID=<vpc-id> export PUBLIC_SUBNET_IDS="<public-subnet-a-id> <public-subnet-b-id> <public-subnet-c-id>" export PRIVATE_SUBNET_IDS="<private-subnet-a-id> <private-subnet-b-id> <private-subnet-c-id>" - $ export VPC_ID=<vpc-id> $ export PUBLIC_SUBNET_IDS="<public-subnet-a-id> <public-subnet-b-id> <public-subnet-c-id>" $ export PRIVATE_SUBNET_IDS="<private-subnet-a-id> <private-subnet-b-id> <private-subnet-c-id>"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 标记您的 VPC 将其与集群关联: - aws ec2 create-tags --resources ${VPC_ID} --tags Key=kubernetes.io/cluster/${CLUSTER_NAME},Value=owned --region ${REGION}- $ aws ec2 create-tags --resources ${VPC_ID} --tags Key=kubernetes.io/cluster/${CLUSTER_NAME},Value=owned --region ${REGION}- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 标记您的公共子网,以允许通过弹性负载平衡角色进行更改,并标记您的专用子网,以便通过内部弹性负载均衡角色进行更改: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行脚本: - bash ${SCRATCH}/tag-subnets.sh- bash ${SCRATCH}/tag-subnets.sh- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
其他资源
- 要在具有多个可用区的 Red Hat OpenShift Service on AWS 集群上设置 Red Hat OpenShift Service,请参阅 AWS 集群上的 multi-AZ Red Hat OpenShift Service on AWS 集群
1.2. 安装 AWS Load Balancer Operator
				您可以使用 OpenShift CLI (oc)安装 AWS Load Balancer Operator。使用 设置环境时使用的同一终端会话来安装 AWS Load Balancer Operator,以使用环境变量。
			
流程
- 为 AWS Load Balancer Operator 在集群中创建一个新项目: - oc new-project aws-load-balancer-operator - $ oc new-project aws-load-balancer-operator- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 为 AWS Load Balancer Operator 创建 AWS IAM 策略。 - 下载适当的 IAM 策略: - curl -o ${SCRATCH}/operator-permission-policy.json https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/refs/heads/main/hack/operator-permission-policy.json- $ curl -o ${SCRATCH}/operator-permission-policy.json https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/refs/heads/main/hack/operator-permission-policy.json- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 为 Operator 创建权限策略: - aws iam create-policy \ --policy-name aws-load-balancer-operator-policy \ --policy-document file://${SCRATCH}/operator-permission-policy.json \ --region ${REGION}- $ aws iam create-policy \ --policy-name aws-load-balancer-operator-policy \ --policy-document file://${SCRATCH}/operator-permission-policy.json \ --region ${REGION}- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 记录输出中的 Operator 策略 ARN。这个过程的其余部分称为 - $OPERATOR_POLICY_ARN。
 
- 为 AWS Load Balancer Operator 创建 AWS IAM 角色: - 为 Operator 角色创建信任策略: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 使用信任策略创建 Operator 角色: - aws iam create-role --role-name "${CLUSTER_NAME}-alb-operator" \ --assume-role-policy-document "file://${SCRATCH}/operator-trust-policy.json"- $ aws iam create-role --role-name "${CLUSTER_NAME}-alb-operator" \ --assume-role-policy-document "file://${SCRATCH}/operator-trust-policy.json"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 记录输出中的 Operator 角色 ARN。这个过程的其余部分称为 - $OPERATOR_ROLE_ARN。
- 关联 Operator 角色和策略: - aws iam attach-role-policy --role-name "${CLUSTER_NAME}-alb-operator" \ --policy-arn $OPERATOR_POLICY_ARN- $ aws iam attach-role-policy --role-name "${CLUSTER_NAME}-alb-operator" \ --policy-arn $OPERATOR_POLICY_ARN- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 通过创建 - OperatorGroup和- 订阅来安装 AWS Load Balancer Operator:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 为 AWS Load Balancer Controller 创建 AWS IAM 策略。 - 下载适当的 IAM 策略: - curl -o ${SCRATCH}/controller-permission-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.12.0/docs/install/iam_policy.json- $ curl -o ${SCRATCH}/controller-permission-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.12.0/docs/install/iam_policy.json- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 为 Controller 创建权限策略: - aws iam create-policy \ --region ${REGION} \ --policy-name aws-load-balancer-controller-policy \ --policy-document file://${SCRATCH}/controller-permission-policy.json- $ aws iam create-policy \ --region ${REGION} \ --policy-name aws-load-balancer-controller-policy \ --policy-document file://${SCRATCH}/controller-permission-policy.json- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 记录输出中的 Controller 策略 ARN。这被称为此进程的其余部分的 - $CONTROLLER_POLICY_ARN。
 
- 为 AWS Load Balancer Controller 创建 AWS IAM 角色: - 为 Controller 角色创建信任策略: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 使用信任策略创建 Controller 角色: - CONTROLLER_ROLE_ARN=$(aws iam create-role --role-name "${CLUSTER_NAME}-albo-controller" \ --assume-role-policy-document "file://${SCRATCH}/controller-trust-policy.json" \ --query Role.Arn --output text) echo ${CONTROLLER_ROLE_ARN}- CONTROLLER_ROLE_ARN=$(aws iam create-role --role-name "${CLUSTER_NAME}-albo-controller" \ --assume-role-policy-document "file://${SCRATCH}/controller-trust-policy.json" \ --query Role.Arn --output text) echo ${CONTROLLER_ROLE_ARN}- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 记录输出中的 Controller 角色 ARN。这个过程的剩余部分被称为 - $CONTROLLER_ROLE_ARN。
- 关联 Controller 角色和策略: - aws iam attach-role-policy \ --role-name "${CLUSTER_NAME}-albo-controller" \ --policy-arn ${CONTROLLER_POLICY_ARN}- $ aws iam attach-role-policy \ --role-name "${CLUSTER_NAME}-albo-controller" \ --policy-arn ${CONTROLLER_POLICY_ARN}- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 部署 AWS Load Balancer Controller 实例: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 如果在此处收到错误,等待一分钟并重试,这意味着 Operator 还没有完成安装。 
- 确认 Operator 和 Controller pod 都在运行: - oc -n aws-load-balancer-operator get pods - $ oc -n aws-load-balancer-operator get pods- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 如果没有看到类似如下的输出,请等待几分钟并重试。 - 输出示例 - NAME READY STATUS RESTARTS AGE aws-load-balancer-controller-cluster-6ddf658785-pdp5d 1/1 Running 0 99s aws-load-balancer-operator-controller-manager-577d9ffcb9-w6zqn 2/2 Running 0 2m4s - NAME READY STATUS RESTARTS AGE aws-load-balancer-controller-cluster-6ddf658785-pdp5d 1/1 Running 0 99s aws-load-balancer-operator-controller-manager-577d9ffcb9-w6zqn 2/2 Running 0 2m4s- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
1.3. 验证 Operator 安装
部署基本示例应用程序并创建入口和负载均衡服务,以确认 AWS Load Balancer Operator 和 Controller 是否已正确部署。
流程
- 创建一个新项目 - oc new-project hello-world - $ oc new-project hello-world- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 根据 - hello-openshift镜像创建一个新的- hello-world应用程序:- oc new-app -n hello-world --image=docker.io/openshift/hello-openshift - $ oc new-app -n hello-world --image=docker.io/openshift/hello-openshift- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 为 AWS Application Load Balancer (ALB)配置 - NodePort服务以连接:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 为应用程序部署 AWS ALB: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 测试对应用程序的 AWS ALB 端点的访问: 注意- ALB 置备需要几分钟时间。如果您收到一个错误,显示 - curl: (6) Could not resolve host,请等待并重试。- ALB_INGRESS=$(oc -n hello-world get ingress hello-openshift-alb \ -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') curl "http://${ALB_INGRESS}"- $ ALB_INGRESS=$(oc -n hello-world get ingress hello-openshift-alb \ -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') $ curl "http://${ALB_INGRESS}"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Hello OpenShift! - Hello OpenShift!- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 为应用程序部署 AWS Network Load Balancer (NLB): - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 测试对应用程序的 NLB 端点的访问: 注意- NLB 置备需要几分钟时间。如果您收到一个错误,显示 - curl: (6) Could not resolve host,请等待并重试。- NLB=$(oc -n hello-world get service hello-openshift-nlb \ -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') curl "http://${NLB}"- $ NLB=$(oc -n hello-world get service hello-openshift-nlb \ -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') $ curl "http://${NLB}"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Hello OpenShift! - Hello OpenShift!- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 现在,您可以删除示例应用程序和 - hello-world命名空间中的所有资源。- oc delete project hello-world - $ oc delete project hello-world- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
1.4. 删除 AWS Load Balancer Operator
如果您不再需要使用 AWS Load Balancer Operator,您可以删除 Operator 并删除任何相关的角色和策略。
流程
- 删除 Operator Subscription: - oc delete subscription aws-load-balancer-operator -n aws-load-balancer-operator - $ oc delete subscription aws-load-balancer-operator -n aws-load-balancer-operator- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 分离并删除相关的 AWS IAM 角色: - aws iam detach-role-policy \ --role-name "<cluster-id>-alb-operator" \ --policy-arn <operator-policy-arn> aws iam delete-role \ --role-name "<cluster-id>-alb-operator" - $ aws iam detach-role-policy \ --role-name "<cluster-id>-alb-operator" \ --policy-arn <operator-policy-arn> $ aws iam delete-role \ --role-name "<cluster-id>-alb-operator"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 删除 AWS IAM 策略: - aws iam delete-policy --policy-arn <operator-policy-arn> - $ aws iam delete-policy --policy-arn <operator-policy-arn>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
第 2 章 Red Hat OpenShift Service on AWS 中的 DNS Operator
			在 Red Hat OpenShift Service on AWS 中,DNS Operator 会部署和管理 CoreDNS 实例,为集群中的 pod 提供名称解析服务,启用基于 DNS 的 Kubernetes 服务发现,并解析内部 cluster.local 名称。
		
默认情况下,这个 Operator 安装在 Red Hat OpenShift Service on AWS 集群上。
2.1. 使用 DNS 转发
				您可以使用以下方法使用 DNS 转发来覆盖 /etc/resolv.conf 文件中的默认转发配置:
			
- 为每个区指定名称服务器 ( - spec.servers)。如果转发区是由 Red Hat OpenShift Service on AWS 管理的入口域,则必须为域授权上游名称服务器。重要- 您必须至少指定一个区。否则,集群可能会丢失功能。 
- 
						提供上游 DNS 服务器列表 (spec.upstreamResolvers)。
- 更改默认转发策略。
					默认域的 DNS 转发配置可以同时在 /etc/resolv.conf 文件和上游 DNS 服务器中指定默认服务器。
				
流程
- 修改名为 - default的 DNS Operator 对象:- oc edit dns.operator/default - $ oc edit dns.operator/default- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 发出上一命令后,Operator 会根据 - spec.servers创建并更新名为- dns-default的配置映射,并使用额外的服务器配置块。重要- 当为 - zones参数指定值时,请确保只转发到特定区域,如您的内网。您必须至少指定一个区。否则,集群可能会丢失功能。- 如果任何服务器都没有与查询匹配的区域,则名称解析会返回上游 DNS 服务器。 - 配置 DNS 转发 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 必须符合rfc6335服务名称语法。
- 2
- 必须符合rfc1123服务名称语法中的子域的定义。集群域cluster.local是对zones字段的无效子域。
- 3
- 定义用于选择forwardPlugin中列出的上游解析器的策略。默认值为Random。您还可以使用RoundRobin, 和Sequential值。
- 4
- 每个forwardPlugin最多允许 15 个upstreams。
- 5
- 您可以使用upstreamResolvers覆盖默认转发策略,并将 DNS 解析转发到默认域的指定 DNS 解析器(上游解析器)。如果没有提供任何上游解析器,DNS 名称查询将进入/etc/resolv.conf中声明的服务器。
- 6
- 决定选择上游中列出的upstreams服务器进行查询的顺序。您可以指定这些值之一:Random、RoundRobin或Sequential。默认值为Sequential。
- 7
- 如果被省略,平台会选择一个默认值,通常是原始客户端请求的协议。设置为TCP,以指定平台应该对所有上游 DNS 请求使用 TCP,即使客户端请求使用了 UDP。
- 8
- 用于配置传输类型、服务器名称和可选自定义 CA 或 CA 捆绑包,以便在将 DNS 请求转发到上游解析器时使用。
- 9
- 您可以指定两个类型的upstreams:SystemResolvConf或Network。SystemResolvConf将上游配置为使用/etc/resolv.conf和Network定义一个Networkresolver。您可以指定其中一个或两者都指定。
- 10
- 如果指定类型是Network,则必须提供 IP 地址。address字段必须是有效的 IPv4 或 IPv6 地址。
- 11
- 如果指定类型是Network,您可以选择性地提供端口。port字段必须是1到65535之间的值。如果您没有为上游指定端口,则默认端口为 853。
 
			Ingress Operator 实现 IngressController API,是负责启用对 Red Hat OpenShift Service on AWS 集群服务的外部访问的组件。
		
默认情况下,这个 Operator 安装在 Red Hat OpenShift Service on AWS 集群上。
在创建 Red Hat OpenShift Service on AWS 集群时,在集群中运行的 Pod 和服务会各自分配自己的 IP 地址。IP 地址可供附近运行的其他容器集和服务访问,但外部客户端无法访问这些 IP 地址。
Ingress Operator 通过部署和管理一个或多个基于 HAProxy 的 Ingress Controller 来处理路由,使外部客户端可以访问您的服务。
Red Hat Site Reliability Engineers (SRE) 为 Red Hat OpenShift Service on AWS 管理 Ingress Operator。虽然您无法更改 Ingress Operator 的设置,但您可以查看默认的 Ingress Controller 配置、状态和日志以及 Ingress Operator 状态。
3.2. 查看默认的 Ingress Controller
Ingress Operator 是 Red Hat OpenShift Service on AWS 的一个核心功能,开箱即用。
				每个 Red Hat OpenShift Service on AWS 新安装都有一个名为 default 的 ingresscontroller。它可以通过额外的 Ingress Controller 来补充。如果删除了默认的 ingresscontroller,Ingress Operator 会在一分钟内自动重新创建。
			
流程
- 查看默认的 Ingress Controller: - oc describe --namespace=openshift-ingress-operator ingresscontroller/default - $ oc describe --namespace=openshift-ingress-operator ingresscontroller/default- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
3.3. 查看 Ingress Operator 状态
您可以查看并检查 Ingress Operator 的状态。
流程
- 查看您的 Ingress Operator 状态: - oc describe clusteroperators/ingress - $ oc describe clusteroperators/ingress- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
3.4. 查看 Ingress Controller 日志
您可以查看 Ingress Controller 日志。
流程
- 查看 Ingress Controller 日志: - oc logs --namespace=openshift-ingress-operator deployments/ingress-operator -c <container_name> - $ oc logs --namespace=openshift-ingress-operator deployments/ingress-operator -c <container_name>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
3.5. 查看 Ingress Controller 状态
您可以查看特定 Ingress Controller 的状态。
流程
- 查看 Ingress Controller 的状态: - oc describe --namespace=openshift-ingress-operator ingresscontroller/<name> - $ oc describe --namespace=openshift-ingress-operator ingresscontroller/<name>- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
3.6. 管理 默认 Ingress Controller 功能
				下表详细介绍了由 Ingress Operator 管理 的默认 Ingress Controller 组件,以及 Red Hat Site Reliability Engineering (SRE)是否维护 Red Hat OpenShift Service on AWS 集群上的此组件。
			
| Ingress 组件 | 管理方 | 默认配置? | 
|---|---|---|
| Scaling Ingress Controller | SRE | 是 | 
| Ingress Operator thread count | SRE | 是 | 
| Ingress Controller 访问日志 | SRE | 是 | 
| Ingress Controller 分片 | SRE | 是 | 
| Ingress Controller 路由准入策略 | SRE | 是 | 
| Ingress Controller 通配符路由 | SRE | 是 | 
| Ingress Controller X-Forwarded 标头 | SRE | 是 | 
| Ingress Controller 路由压缩 | SRE | 是 | 
Ingress Node Firewall Operator 提供了一个无状态的、基于 eBPF 的防火墙,用于管理 Red Hat OpenShift Service on AWS 中的节点级别的入口流量。
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 或更高版本上运行 Ingress Node Firewall Operator。
4.2. 安装 Ingress Node Firewall Operator
作为集群管理员,您可以使用 Red Hat OpenShift Service on AWS CLI 或 Web 控制台安装 Ingress Node Firewall Operator。
4.2.1. 使用 CLI 安装 Ingress Node Firewall Operator
作为集群管理员,您可以使用 CLI 安装 Operator。
先决条件
- 
							已安装 OpenShift CLI(oc)。
- 有管理员特权的帐户。
流程
- 运行以下命令来创建 - openshift-ingress-node-firewall命名空间:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令来创建 - OperatorGroupCR:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 订阅 Ingress Node Firewall Operator。 - 要为 Ingress Node Firewall Operator 创建 - SubscriptionCR,请输入以下命令:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 要验证是否已安装 Operator,请输入以下命令: - oc get ip -n openshift-ingress-node-firewall - $ oc get ip -n openshift-ingress-node-firewall- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - NAME CSV APPROVAL APPROVED install-5cvnz ingress-node-firewall.4.0-202211122336 Automatic true - NAME CSV APPROVAL APPROVED install-5cvnz ingress-node-firewall.4.0-202211122336 Automatic true- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 要验证 Operator 的版本,请输入以下命令: - oc get csv -n openshift-ingress-node-firewall - $ oc get csv -n openshift-ingress-node-firewall- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - 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 - 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- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
4.2.2. 使用 Web 控制台安装 Ingress Node Firewall Operator
作为集群管理员,您可以使用 Web 控制台安装 Operator。
先决条件
- 
							已安装 OpenShift CLI(oc)。
- 有管理员特权的帐户。
流程
- 安装 Ingress Node Firewall Operator: - 在 Red Hat OpenShift Service on AWS web 控制台中,点 Ecosystem → Software Catalog。
- 从可用的 Operator 列表中选择 Ingress Node Firewall Operator,然后点 Install。
- 在 Install Operator 页面中,在 Installed Namespace 下选择 Operator recommended Namespace。
- 点 Install。
 
- 验证 Ingress Node Firewall Operator 是否已成功安装: - 进入到 Ecosystem → 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 - $ oc annotate ns/openshift-ingress-node-firewall workload.openshift.io/allowed=management- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 对于单节点 OpenShift 集群, - openshift-ingress-node-firewall命名空间需要- workload.openshift.io/allowed=management注解。
 
 
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 - $ oc apply -f rule.yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
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 会使用 IngressNodeFirewallConfig 来在所有节点上生成 daemonset。创建之后,可以创建额外的防火墙规则对象。
					
4.3.2. Ingress Node Firewall Operator 示例配置
以下示例中指定了完整的 Ingress Node 防火墙配置:
如何创建 Ingress Node 防火墙配置对象的示例
						Operator 使用 CR 对象,并在与 nodeSelector 匹配的所有节点上创建一个入口节点防火墙守护进程集。
					
4.3.3. Ingress 节点防火墙规则对象
下表中描述了 Ingress Node Firewall 规则对象的字段:
| 字段 | 类型 | 描述 | 
|---|---|---|
| 
									 | 
									 | CR 对象的名称。 | 
| 
									 | 
									 | 
									此对象的字段指定要应用防火墙规则的接口。例如, | 
| 
									 | 
									 | 
									您可以使用  | 
| 
									 | 
									 | 
									 | 
4.3.3.1. Ingress 对象配置
						ingress 对象的值在下表中定义:
					
| 字段 | 类型 | 描述 | 
|---|---|---|
| 
										 | 
										 | 允许您设置 CIDR 块。您可以从不同地址系列配置多个 CIDR。 注意 
											不同的 CIDR 允许您使用相同的顺序规则。如果同一节点有多个  | 
| 
										 | 
										 | 
										对于每个  
										 
										将  注意 Ingress 防火墙规则使用阻止任何无效配置的验证 Webhook 进行验证。验证 Webhook 会阻止阻塞任何关键集群服务,如 API 服务器。 | 
4.3.3.2. Ingress 节点防火墙规则对象示例
以下示例中指定了完整的 Ingress Node 防火墙配置:
Ingress 节点防火墙配置示例
- 1
- 节点上必须存在 <label_name> 和 <label_value>,且必须与应用到您希望ingressfirewallconfigCR 运行的节点的nodeselector标签和值匹配。<label_value> 可以是true或false。通过使用nodeSelector标签,您可以针对单独的节点组为目标,以使用ingressfirewallconfigCR 应用不同的规则。
4.3.3.3. 零信任 Ingress Node Firewall 规则对象示例
零信任 Ingress 节点防火墙规则可为多接口集群提供额外的安全性。例如,您可以使用零信任 Ingress Node Firewall 规则来丢弃除 SSH 之外的特定接口上的网络流量。
以下示例中指定了零信任 Ingress Node Firewall 规则集的完整配置:
用户需要为其提供应用程序使用的所有端口添加到允许列表,以确保正常工作。
零信任 Ingress 节点防火墙规则示例
eBPF Manager Operator 集成只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
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 以特权运行。
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- $ oc label namespace openshift-ingress-node-firewall \ pod-security.kubernetes.io/enforce=privileged \ pod-security.kubernetes.io/warn=privileged --overwrite- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 编辑名为 - ingressnodefirewallconfig的- IngressNodeFirewallConfig对象并设置- ebpfProgramManagerMode字段:- Ingress Node Firewall Operator 配置对象 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 其中: - <ebpf_mode>: 指定 Ingress Node Firewall Operator 是否使用 eBPF Manager Operator 来管理 eBPF 程序。必须为- true或- false。如果未设置,则不会使用 eBPF Manager。
4.6. 查看 Ingress Node Firewall Operator 规则
流程
- 运行以下命令来查看所有当前规则: - oc get ingressnodefirewall - $ oc get ingressnodefirewall- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 选择返回的 - <resource>名称之一,并运行以下命令来查看规则或配置:- oc get <resource> <name> -o yaml - $ oc get <resource> <name> -o yaml- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
4.7. 对 Ingress Node Firewall Operator 进行故障排除
- 运行以下命令列出已安装的 Ingress Node Firewall 自定义资源定义 (CRD): - oc get crds | grep ingressnodefirewall - $ oc get crds | grep ingressnodefirewall- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - 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 - 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- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 运行以下命令,以查看 Ingress Node Firewall Operator 的状态: - oc get pods -n openshift-ingress-node-firewall - $ oc get pods -n openshift-ingress-node-firewall- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - 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 - 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- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 以下字段提供有关 Operator 状态的信息: - READY、- STATUS、- AGE、和- RESTARTS。当 Ingress Node Firewall Operator 将守护进程集部署到分配的节点时,- STATUS字段为- Running。
- 运行以下命令来收集所有入口防火墙节点 pod 的日志: - oc adm must-gather – gather_ingress_node_firewall - $ oc adm must-gather – gather_ingress_node_firewall- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 在 sos 节点的报告中,其中包含位于 - /sos_commands/ebpf的 eBPF- bpftool输出的报告。这些报告包括用于或作为入口防火墙 XDP 处理数据包处理、更新统计信息和发出事件的查找表。
        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.