Networking Operators
在 OpenShift Container Platform 中管理网络特定的 Operator
摘要
第 1 章 Kubernetes NMState Operator 复制链接链接已复制到粘贴板!
Kubernetes NMState Operator 提供了一个 Kubernetes API,用于使用 NMState 在 OpenShift Container Platform 集群的节点上执行状态驱动的网络配置。Kubernetes NMState Operator 为用户提供了在集群节点上配置各种网络接口类型、DNS 和路由的功能。另外,集群节点中的守护进程会定期向 API 服务器报告每个节点的网络接口状态。
红帽在裸机、IBM Power®、IBM Z®、IBM® LinuxONE、VMware vSphere 和 Red Hat OpenStack Platform (RHOSP) 安装上的生产环境中支持 Kubernetes NMState Operator。
红帽支持在 Microsoft Azure 上使用 Kubernetes NMState Operator,但有使用限制。支持仅限于将系统中的 DNS 服务器配置为安装后任务。
在 OpenShift Container Platform 中使用 NMState 之前,必须安装 Kubernetes NMState Operator。安装 Kubernetes NMState Operator 后,您可以完成以下任务:
- 观察和更新节点网络状态和配置
-
有关创建包含自定义
br-ex
网桥的清单对象,以了解有关这些任务的更多信息,请参阅附加资源部分
在 OpenShift Container Platform 中使用 NMState 之前,必须安装 Kubernetes NMState Operator。
Kubernetes NMState Operator 更新二级 NIC 的网络配置。Operator 无法更新主 NIC 的网络配置,或更新大多数内部网络中的 br-ex
网桥。
在裸机平台上,只有在将 br-ex
网桥设置为机器配置时,才支持使用 Kubernetes NMState Operator 更新 br-ex
网桥网络配置。要将 br-ex
网桥更新为安装后任务,您必须将 br-ex
网桥设置为集群的 NodeNetworkConfigurationPolicy
自定义资源 (CR) 的 NMState 配置中的接口。如需更多信息,请参阅安装后配置中的创建包含自定义 br-ex 网桥的清单对象。
OpenShift Container Platform 使用 nmstate
来报告并配置节点网络的状态。这样便可通过将单个配置清单应用到集群来修改网络策略配置,例如在所有节点上创建 Linux 网桥。
节点网络由以下对象监控和更新:
NodeNetworkState
- 报告该节点上的网络状态。
NodeNetworkConfigurationPolicy
-
描述节点上请求的网络配置。您可以通过将
NodeNetworkConfigurationPolicy
CR 应用到集群来更新节点网络配置,包括添加和删除网络接口 。 NodeNetworkConfigurationEnactment
- 报告每个节点上采用的网络策略。
1.1. 安装 Kubernetes NMState Operator 复制链接链接已复制到粘贴板!
您可以使用 web 控制台或 CLI 安装 Kubernetes NMState Operator。
1.1.1. 使用 Web 控制台安装 Kubernetes NMState Operator 复制链接链接已复制到粘贴板!
您可以使用 web 控制台安装 Kubernetes NMState Operator。安装 Kubernetes NMState Operator 后,Operator 将 NMState State Controller 部署为在所有集群节点中的守护进程集。
先决条件
-
您以具有
cluster-admin
权限的用户身份登录。
流程
- 选择 Operators → OperatorHub。
-
在 All Items 下面的搜索字段中, 输入
nmstate
并点 Enter 来搜索 Kubernetes NMState Operator。 - 点 Kubernetes NMState Operator 搜索结果。
- 点 Install 打开 Install Operator 窗口。
- 点 Install 安装 Operator。
- Operator 安装完成后,点 View Operator。
-
在 Provided APIs 下,点 Create Instance 打开对话框以创建
kubernetes-nmstate
实例。 在对话框的 Name 字段中,确保实例的名称是
nmstate.
注意名称限制是一个已知问题。该实例是整个集群的单个实例。
- 接受默认设置并点 Create 创建实例。
1.1.2. 使用 CLI 安装 Kubernetes NMState Operator 复制链接链接已复制到粘贴板!
您可以使用 OpenShift CLI(oc)
安装 Kubernetes NMState Operator。安装后,Operator 可将 NMState State Controller 部署为在所有集群节点中的守护进程集。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您以具有
cluster-admin
权限的用户身份登录。
流程
创建
nmstate
Operator 命名空间:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
OperatorGroup
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 订阅
nmstate
Operator:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认
nmstate
Operator 部署的ClusterServiceVersion
(CSV) 状态等于Succeeded
:oc get clusterserviceversion -n openshift-nmstate \ -o custom-columns=Name:.metadata.name,Phase:.status.phase
$ oc get clusterserviceversion -n openshift-nmstate \ -o custom-columns=Name:.metadata.name,Phase:.status.phase
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
nmstate
Operator 实例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的集群因为 DNS 连接问题导致 DNS 健康检查探测出现问题,您可以在
NMState
CRD 中添加以下 DNS 主机名配置,以便在可以解决这些问题的健康检查中构建:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将 DNS 主机名配置应用到集群网络。确保将
<filename>
替换为 CRD 文件的名称。$ oc apply -f <filename>.yaml
$ oc apply -f <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,监控
nmstate
CRD,直到资源达到Available
条件。确保为 the-timeout 选项设置了一个值
,以便在此设置的最大等待时间中没有满足Available
条件时,命令会超时并生成错误消息。$ oc wait --for=condition=Available nmstate/nmstate --timeout=600s
$ oc wait --for=condition=Available nmstate/nmstate --timeout=600s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
输入以下命令验证 NMState Operator 的所有 pod 是否具有
Running
状态:oc get pod -n openshift-nmstate
$ oc get pod -n openshift-nmstate
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.1.3. 查看 Kubernetes NMState Operator 收集的指标 复制链接链接已复制到粘贴板!
Kubernetes NMState Operator kubernetes-nmstate-operator
可以从 kubernetes_nmstate_features_applied
组件收集指标,并将其公开为可随时使用的指标。作为查看指标的用例,请考虑创建 NodeNetworkConfigurationPolicy
自定义资源且您要确认策略处于活跃状态的情况。
kubernetes_nmstate_features_applied
指标不是一个 API,可能会在 OpenShift Container Platform 版本之间有所变化。
在 Developer 和 Administrator 视角中, Metrics UI 包括所选项目的一些预定义 CPU、内存、带宽和网络数据包查询。您可以对项目的 CPU、内存、带宽、网络数据包和应用程序指标运行自定义 Prometheus Query Language (PromQL) 查询。
以下示例演示了一个 NodeNetworkConfigurationPolicy
清单示例,它应用到 OpenShift Container Platform 集群:
NodeNetworkConfigurationPolicy
清单会公开指标,并使其可用于 Cluster Monitoring Operator (CMO)。以下示例显示了一些公开的指标:
先决条件
-
已安装 OpenShift CLI(
oc
)。 - 已以管理员身份登录到 web 控制台并安装 Kubernetes NMState Operator。
- 对于您要查看指标的项目,您可以作为开发者或具有查看权限的用户访问集群。
- 您已为用户定义的项目启用了监控。
- 您已在用户定义的项目中部署了服务。
-
您已创建了
NodeNetworkConfigurationPolicy
清单,并将其应用到集群。
流程
如果要从 OpenShift Container Platform Web 控制台中的 Developer 视角查看指标,请完成以下任务:
- 点 Observe。
-
要查看特定项目的指标,请在 Project: 列表中选择该项目。例如,
openshift-nmstate
。 - 点 Metrics 选项卡。
要在图表中视觉化指标,请从 Select query 列表中选择查询,或者通过选择 Show PromQL 根据所选查询创建自定义 PromQL 查询。
注意在 Developer 视角中,您一次只能运行一个查询。
如果要从 OpenShift Container Platform Web 控制台中的 Administrator 视角查看指标,请完成以下任务:
- 点 Observe → Metrics。
-
在 Expression 字段中输入
kubernetes_nmstate_features_applied
。 - 点 Add query,然后点 Run query。
要探索视觉化的指标,请执行以下操作之一:
要放大图表并更改时间范围,请执行以下任何任务:
- 要可视化选择时间范围,请单击并拖动图表。
- 要选择时间范围,请使用控制台左上角的菜单。
- 要重置时间范围,请选择 Reset Zoom。
- 要显示所有查询在特定时间点的输出,请将鼠标光标停留在图表中的对应点上。查询输出显示在弹出窗口中。
1.2. 卸载 Kubernetes NMState Operator 复制链接链接已复制到粘贴板!
您可以使用 Operator Lifecycle Manager (OLM)卸载 Kubernetes NMState Operator,但设计 OLM 不会删除任何关联的自定义资源定义(CRD)、自定义资源(CR)或 API Services。
在从 OLM 使用的 Subcription
资源卸载 Kubernetes NMState Operator 前,请确定要删除的 Kubernetes NMState Operator 资源。此标识可确保您可以在不影响正在运行的集群的情况下删除资源。
如果您需要重新安装 Kubernetes NMState Operator,请参阅"使用 CLI 安装 Kubernetes NMState Operator"或"使用 web 控制台安装 Kubernetes NMState Operator"。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
已安装
jq
CLI 工具。 -
您以具有
cluster-admin
权限的用户身份登录。
流程
运行以下命令,从
Subcription
资源取消订阅 Kubernetes NMState Operator:oc delete --namespace openshift-nmstate subscription kubernetes-nmstate-operator
$ oc delete --namespace openshift-nmstate subscription kubernetes-nmstate-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查找与 Kubernetes NMState Operator 关联的
ClusterServiceVersion
(CSV) 资源:oc get --namespace openshift-nmstate clusterserviceversion
$ oc get --namespace openshift-nmstate clusterserviceversion
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出 CSV 资源的输出示例
NAME DISPLAY VERSION REPLACES PHASE kubernetes-nmstate-operator.v4.18.0 Kubernetes NMState Operator 4.18.0 Succeeded
NAME DISPLAY VERSION REPLACES PHASE kubernetes-nmstate-operator.v4.18.0 Kubernetes NMState Operator 4.18.0 Succeeded
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 CSV 资源。删除文件后,OLM 会删除其为 Operator 创建的某些资源,如
RBAC
。oc delete --namespace openshift-nmstate clusterserviceversion kubernetes-nmstate-operator.v4.18.0
$ oc delete --namespace openshift-nmstate clusterserviceversion kubernetes-nmstate-operator.v4.18.0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除
nmstate
CR 和任何关联的Deployment
资源:oc -n openshift-nmstate delete nmstate nmstate
$ oc -n openshift-nmstate delete nmstate nmstate
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete --all deployments --namespace=openshift-nmstate
$ oc delete --all deployments --namespace=openshift-nmstate
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
nmstate
CR 后,从console.operator.openshift.io/cluster
CR 中删除nmstate-console-plugin
控制台插件名称。运行以下命令,存储在启用插件列表中存在
nmstate-console-plugin
条目的位置。以下命令使用jq
CLI 工具将条目的索引存储在名为INDEX
的环境变量中:INDEX=$(oc get console.operator.openshift.io cluster -o json | jq -r '.spec.plugins | to_entries[] | select(.value == "nmstate-console-plugin") | .key')
INDEX=$(oc get console.operator.openshift.io cluster -o json | jq -r '.spec.plugins | to_entries[] | select(.value == "nmstate-console-plugin") | .key')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下 patch 命令,从
console.operator.openshift.io/cluster
CR 中删除nmstate-console-plugin
条目:oc patch console.operator.openshift.io cluster --type=json -p "[{\"op\": \"remove\", \"path\": \"/spec/plugins/$INDEX\"}]"
$ oc patch console.operator.openshift.io cluster --type=json -p "[{\"op\": \"remove\", \"path\": \"/spec/plugins/$INDEX\"}]"
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
INDEX
是辅助变量。您可以为此变量指定不同的名称。
运行以下命令删除所有自定义资源定义 (CRD),如
nmstates.nmstate.io
:oc delete crd nmstates.nmstate.io
$ oc delete crd nmstates.nmstate.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete crd nodenetworkconfigurationenactments.nmstate.io
$ oc delete crd nodenetworkconfigurationenactments.nmstate.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete crd nodenetworkstates.nmstate.io
$ oc delete crd nodenetworkstates.nmstate.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete crd nodenetworkconfigurationpolicies.nmstate.io
$ oc delete crd nodenetworkconfigurationpolicies.nmstate.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除命名空间:
oc delete namespace kubernetes-nmstate
$ oc delete namespace kubernetes-nmstate
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4. 后续步骤 复制链接链接已复制到粘贴板!
第 2 章 AWS Load Balancer Operator 复制链接链接已复制到粘贴板!
2.1. AWS Load Balancer Operator 发行注记 复制链接链接已复制到粘贴板!
AWS Load Balancer (ALB) Operator 部署和管理 AWSLoadBalancerController
资源的实例。
AWS Load Balancer (ALB) Operator 仅在 x86_64
构架中被支持。
本发行注记介绍了 OpenShift Container Platform 中的 AWS Load Balancer Operator 的开发。
如需 AWS Load Balancer Operator 的概述,请参阅 OpenShift Container Platform 中的 AWS Load Balancer Operator。
AWS Load Balancer Operator 目前不支持 AWS GovCloud。
2.1.1. AWS Load Balancer Operator 1.2.0 复制链接链接已复制到粘贴板!
以下公告可用于 AWS Load Balancer Operator 版本 1.2.0 :
2.1.1.1. 主要变化 复制链接链接已复制到粘贴板!
- 此发行版本支持 AWS Load Balancer Controller 版本 2.8.2。
-
在这个版本中,
Infrastructure
资源中定义的平台标签将添加到控制器创建的所有 AWS 对象中。
2.1.2. AWS Load Balancer Operator 1.1.1 复制链接链接已复制到粘贴板!
以下公告可用于 AWS Load Balancer Operator 版本 1.1.1:
2.1.3. AWS Load Balancer Operator 1.1.0 复制链接链接已复制到粘贴板!
AWS Load Balancer Operator 版本 1.1.0 支持 AWS Load Balancer Controller 版本 2.4.4。
以下公告可用于 AWS Load Balancer Operator 版本 1.1.0:
2.1.3.1. 主要变化 复制链接链接已复制到粘贴板!
- 此发行版本使用 Kubernetes API 版本 0.27.2。
2.1.3.2. 新功能 复制链接链接已复制到粘贴板!
- AWS Load Balancer Operator 现在支持使用 Cloud Credential Operator 的标准化安全令牌服务 (STS) 流。
2.1.3.3. 程序错误修复 复制链接链接已复制到粘贴板!
FIPS 兼容集群必须使用 TLS 版本 1.2。在以前的版本中,AWS Load Balancer Controller 的 Webhook 只接受 TLS 1.3 作为最小版本,从而导致在与 FIPS 兼容的集群中出现以下错误:
remote error: tls: protocol version not supported
remote error: tls: protocol version not supported
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,AWS Load Balancer Controller 接受 TLS 1.2 作为最小 TLS 版本,从而解决了这个问题。(OCPBUGS-14846)
2.1.4. AWS Load Balancer Operator 1.0.1 复制链接链接已复制到粘贴板!
以下公告可用于 AWS Load Balancer Operator 版本 1.0.1:
2.1.5. AWS Load Balancer Operator 1.0.0 复制链接链接已复制到粘贴板!
现在,AWS Load Balancer Operator 已正式发布。AWS Load Balancer Operator 版本 1.0.0 支持 AWS Load Balancer Controller 版本 2.4.4。
以下公告可用于 AWS Load Balancer Operator 版本 1.0.0:
AWS Load Balancer (ALB) Operator 版本 1.x.x 无法从技术预览版本 0.x.x 自动升级。要从早期版本升级,您必须卸载 ALB 操作对象并删除 aws-load-balancer-operator
命名空间。
2.1.5.1. 主要变化 复制链接链接已复制到粘贴板!
-
此发行版本使用新的
v1
API 版本。
2.1.5.2. 程序错误修复 复制链接链接已复制到粘贴板!
- 在以前的版本中,AWS Load Balancer Operator 置备的控制器无法正确将配置用于集群范围代理。这些设置现在对控制器正确应用。(OCPBUGS-4052, OCPBUGS-5295)
2.1.6. 早期版本 复制链接链接已复制到粘贴板!
AWS Load Balancer Operator 的两个最早版本作为技术预览提供。这些版本不应在生产环境中使用。有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
以下公告可用于 AWS Load Balancer Operator 版本 0.2.0 :
以下公告可用于 AWS Load Balancer Operator 版本 0.0.1:
AWS Load Balancer Operator 部署和管理 AWS Load Balancer Controller。您可以使用 OpenShift Container Platform Web 控制台或 CLI 安装来自 OperatorHub 的 AWS Load Balancer Operator。
2.2.1. AWS Load Balancer Operator 的注意事项 复制链接链接已复制到粘贴板!
在安装和使用 AWS Load Balancer Operator 前查看以下限制:
- IP 流量模式仅适用于 AWS Elastic Kubernetes Service (EKS)。AWS Load Balancer Operator 禁用 AWS Load Balancer Controller 的 IP 流量模式。禁用 IP 流量模式后,AWS Load Balancer Controller 无法使用 pod 就绪度。
-
AWS Load Balancer Operator 将命令行标记(如
--disable-ingress-class-annotation
和--disable-ingress-group-name-annotation
)添加到 AWS Load Balancer Controller。因此,AWS Load Balancer Operator 不允许在Ingress
资源中使用kubernetes.io/ingress.class
和alb.ingress.kubernetes.io/group.name
注解。 -
您已配置了 AWS Load Balancer Operator,使 SVC 类型是
NodePort
(而不是LoadBalancer
或ClusterIP
)。
2.2.2. AWS Load Balancer Operator 复制链接链接已复制到粘贴板!
如果缺少 kubernetes.io/role/elb
标签,AWS Load Balancer Operator 可以标记公共子网。另外,AWS Load Balancer Operator 从底层 AWS 云检测到以下信息:
- 托管 Operator 的集群的虚拟私有云 (VPC) 的 ID。
- 发现 VPC 的公共和私有子网。
AWS Load Balancer Operator 支持类型为 LoadBalancer
的 Kubernetes 服务资源,使用只有 instance
目标类型的 Network Load Balancer (NLB)。
流程
要从 OperatorHub 部署 AWS Load Balancer Operator on-demand,请运行以下命令创建一个
Subscription
对象:oc -n aws-load-balancer-operator get sub aws-load-balancer-operator --template='{{.status.installplan.name}}{{"\n"}}'
$ oc -n aws-load-balancer-operator get sub aws-load-balancer-operator --template='{{.status.installplan.name}}{{"\n"}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查安装计划的状态是否为
Complete
:oc -n aws-load-balancer-operator get ip <install_plan_name> --template='{{.status.phase}}{{"\n"}}'
$ oc -n aws-load-balancer-operator get ip <install_plan_name> --template='{{.status.phase}}{{"\n"}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,查看
aws-load-balancer-operator-controller-manager
部署的状态:oc get -n aws-load-balancer-operator deployment/aws-load-balancer-operator-controller-manager
$ oc get -n aws-load-balancer-operator deployment/aws-load-balancer-operator-controller-manager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-operator-controller-manager 1/1 1 1 23h
NAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-operator-controller-manager 1/1 1 1 23h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以配置 AWS Load Balancer Operator,以便在 AWS VPC 集群中置备 AWS Application Load Balancer。AWS Outposts 不支持 AWS Network Load Balancers。因此,AWS Load Balancer Operator 无法在 Outpost 中置备 Network Load Balancers。
您可以在云子网或 Outpost 子网中创建 AWS Application Load Balancer。云中的 Application Load Balancer 可以附加到基于云的计算节点,而 Outpost 中的 Application Load Balancer 可以附加到边缘计算节点。您必须使用 Outpost 子网或 VPC 子网来注解 Ingress 资源,但不能同时注解两者。
先决条件
- 您已将 AWS VPC 集群扩展到 Outpost。
-
已安装 OpenShift CLI(
oc
)。 - 已安装 AWS Load Balancer Operator 并创建了 AWS Load Balancer Controller。
流程
将
Ingress
资源配置为使用指定的子网:Ingress
资源配置示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定要使用的子网。
- 要在 Outpost 中使用 Application Load Balancer,请指定 Outpost 子网 ID。
- 要在云中使用 Application Load Balancer,您必须在不同的可用区中指定至少两个子网。
2.3. 为 AWS Load Balancer Operator 准备 AWS STS 集群 复制链接链接已复制到粘贴板!
您可以在使用安全令牌服务 (STS) 的集群中安装 Amazon Web Services (AWS) Load Balancer Operator。在安装 Operator 前,按照以下步骤准备集群。
AWS Load Balancer Operator 依赖于 CredentialsRequest
对象来引导 Operator 和 AWS Load Balancer Controller。AWS Load Balancer Operator 等待所需的 secret 创建并可用。
2.3.1. 先决条件 复制链接链接已复制到粘贴板!
-
已安装 OpenShift CLI(
oc
)。 您知道集群的基础架构 ID。要显示此 ID,请在 CLI 中运行以下命令:
oc get infrastructure cluster -o=jsonpath="{.status.infrastructureName}"
$ oc get infrastructure cluster -o=jsonpath="{.status.infrastructureName}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您知道集群的 OpenID Connect (OIDC) DNS 信息。要显示此信息,请在 CLI 中输入以下命令:
oc get authentication.config cluster -o=jsonpath="{.spec.serviceAccountIssuer}"
$ oc get authentication.config cluster -o=jsonpath="{.spec.serviceAccountIssuer}"
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
https://rh-oidc.s3.us-east-1.amazonaws.com/28292va7ad7mr9r4he1fb09b14t59t4f
是 OIDC DNS 的一个示例。
-
已登陆到 AWS Web 控制台,进入到 IAM → Access management → Identity provider,以及 OIDC Amazon Resource Name (ARN) 信息。一个 OIDC ARN 示例为
arn:aws:iam::777777777777:oidc-provider/<oidc_dns_url>
。
2.3.2. 为 AWS Load Balancer Operator 创建 IAM 角色 复制链接链接已复制到粘贴板!
需要额外的 Amazon Web Services (AWS) Identity 和 Access Management (IAM) 角色,才能在使用 STS 的集群中安装 AWS Load Balancer Operator。需要 IAM 角色与子网和虚拟私有云(VPC)交互。AWS Load Balancer Operator 使用 IAM 角色生成 CredentialsRequest
对象来引导其自身。
您可以使用以下选项创建 IAM 角色:
-
使用 Cloud Credential Operator 实用程序 (
ccoctl
) 和预定义的CredentialsRequest
对象。 - 使用 AWS CLI 和预定义的 AWS 清单。
如果您的环境不支持 ccoctl
命令,请使用 AWS CLI。
2.3.2.1. 使用 Cloud Credential Operator 实用程序创建 AWS IAM 角色 复制链接链接已复制到粘贴板!
您可以使用 Cloud Credential Operator 实用程序(ccoctl
) 为 AWS Load Balancer Operator 创建 AWS IAM 角色。AWS IAM 角色与子网和虚拟私有云 (VPC) 交互。
先决条件
-
您必须提取并准备
ccoctl
二进制文件。
流程
运行以下命令,下载
CredentialsRequest
自定义资源 (CR) 并将其存储在目录中:curl --create-dirs -o <credentials_requests_dir>/operator.yaml https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/operator-credentials-request.yaml
$ curl --create-dirs -o <credentials_requests_dir>/operator.yaml https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/operator-credentials-request.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用
ccoctl
实用程序创建 AWS IAM 角色:ccoctl aws create-iam-roles \ --name <name> \ --region=<aws_region> \ --credentials-requests-dir=<credentials_requests_dir> \ --identity-provider-arn <oidc_arn>
$ ccoctl aws create-iam-roles \ --name <name> \ --region=<aws_region> \ --credentials-requests-dir=<credentials_requests_dir> \ --identity-provider-arn <oidc_arn>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
2023/09/12 11:38:57 Role arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-operator created 2023/09/12 11:38:57 Saved credentials configuration to: /home/user/<credentials_requests_dir>/manifests/aws-load-balancer-operator-aws-load-balancer-operator-credentials.yaml 2023/09/12 11:38:58 Updated Role policy for Role <name>-aws-load-balancer-operator-aws-load-balancer-operator created
2023/09/12 11:38:57 Role arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-operator created
1 2023/09/12 11:38:57 Saved credentials configuration to: /home/user/<credentials_requests_dir>/manifests/aws-load-balancer-operator-aws-load-balancer-operator-credentials.yaml 2023/09/12 11:38:58 Updated Role policy for Role <name>-aws-load-balancer-operator-aws-load-balancer-operator created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 请注意为 AWS Load Balancer Operator 创建的 AWS IAM 角色的 Amazon Resource Name (ARN),如
arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-operator
。
注意AWS IAM 角色名称的长度必须小于或等于 12 个字符。
2.3.2.2. 使用 AWS CLI 创建 AWS IAM 角色 复制链接链接已复制到粘贴板!
您可以使用 AWS 命令行界面为 AWS Load Balancer Operator 创建 IAM 角色。IAM 角色用于与子网和虚拟私有云 (VPC) 交互。
先决条件
-
您必须有权访问 AWS 命令行界面 (
aws
)。
流程
运行以下命令,使用身份提供程序生成信任策略文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用生成的信任策略创建 IAM 角色:
aws iam create-role --role-name albo-operator --assume-role-policy-document file://albo-operator-trust-policy.json
$ aws iam create-role --role-name albo-operator --assume-role-policy-document file://albo-operator-trust-policy.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
ROLE arn:aws:iam::<aws_account_number>:role/albo-operator 2023-08-02T12:13:22Z ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-controller-manager PRINCIPAL arn:aws:iam:<aws_account_number>:oidc-provider/<cluster_oidc_endpoint>
ROLE arn:aws:iam::<aws_account_number>:role/albo-operator 2023-08-02T12:13:22Z
1 ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-controller-manager PRINCIPAL arn:aws:iam:<aws_account_number>:oidc-provider/<cluster_oidc_endpoint>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 为 AWS Load Balancer Operator 创建的 AWS IAM 角色的 ARN,如
arn:aws:iam::777777777777:role/albo-operator
。
运行以下命令,下载 AWS Load Balancer Operator 的权限策略:
curl -o albo-operator-permission-policy.json https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/operator-permission-policy.json
$ curl -o albo-operator-permission-policy.json https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/operator-permission-policy.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将 AWS Load Balancer Controller 的权限策略附加到 IAM 角色:
aws iam put-role-policy --role-name albo-operator --policy-name perms-policy-albo-operator --policy-document file://albo-operator-permission-policy.json
$ aws iam put-role-policy --role-name albo-operator --policy-name perms-policy-albo-operator --policy-document file://albo-operator-permission-policy.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.3. 为 AWS Load Balancer Operator 配置 ARN 角色 复制链接链接已复制到粘贴板!
您可以将 AWS Load Balancer Operator 的 Amazon 资源名称 (ARN) 角色配置为环境变量。您可以使用 CLI 配置 ARN 角色。
先决条件
-
已安装 OpenShift CLI(
oc
)。
流程
运行以下命令来创建
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 运行以下命令来创建
OperatorGroup
对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
Subscription
对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
CredentialsRequest
中使用的 ARN 角色,以便为 AWS Load Balancer Operator 置备 AWS 凭证。一个<albo_role_arn>
示例是arn:aws:iam::<aws_account_number>:role/albo-operator
。
注意AWS Load Balancer Operator 会在进入
Available
状态前等待创建 secret。
2.3.4. 为 AWS Load Balancer Controller 创建 IAM 角色 复制链接链接已复制到粘贴板!
AWS Load Balancer Controller 的 CredentialsRequest
对象必须使用手动置备的 IAM 角色设置。
您可以使用以下选项创建 IAM 角色:
-
使用 Cloud Credential Operator 实用程序 (
ccoctl
) 和预定义的CredentialsRequest
对象。 - 使用 AWS CLI 和预定义的 AWS 清单。
如果您的环境不支持 ccoctl
命令,请使用 AWS CLI。
您可以使用 Cloud Credential Operator 实用程序(ccoctl
) 为 AWS Load Balancer Controller 创建 AWS IAM 角色。AWS IAM 角色用于与子网和虚拟私有云 (VPC) 交互。
先决条件
-
您必须提取并准备
ccoctl
二进制文件。
流程
运行以下命令,下载
CredentialsRequest
自定义资源 (CR) 并将其存储在目录中:curl --create-dirs -o <credentials_requests_dir>/controller.yaml https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/controller/controller-credentials-request.yaml
$ curl --create-dirs -o <credentials_requests_dir>/controller.yaml https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/hack/controller/controller-credentials-request.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用
ccoctl
实用程序创建 AWS IAM 角色:ccoctl aws create-iam-roles \ --name <name> \ --region=<aws_region> \ --credentials-requests-dir=<credentials_requests_dir> \ --identity-provider-arn <oidc_arn>
$ ccoctl aws create-iam-roles \ --name <name> \ --region=<aws_region> \ --credentials-requests-dir=<credentials_requests_dir> \ --identity-provider-arn <oidc_arn>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
2023/09/12 11:38:57 Role arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-controller created 2023/09/12 11:38:57 Saved credentials configuration to: /home/user/<credentials_requests_dir>/manifests/aws-load-balancer-operator-aws-load-balancer-controller-credentials.yaml 2023/09/12 11:38:58 Updated Role policy for Role <name>-aws-load-balancer-operator-aws-load-balancer-controller created
2023/09/12 11:38:57 Role arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-controller created
1 2023/09/12 11:38:57 Saved credentials configuration to: /home/user/<credentials_requests_dir>/manifests/aws-load-balancer-operator-aws-load-balancer-controller-credentials.yaml 2023/09/12 11:38:58 Updated Role policy for Role <name>-aws-load-balancer-operator-aws-load-balancer-controller created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 请注意为 AWS Load Balancer Controller 创建的 AWS IAM 角色的 Amazon Resource Name (ARN),如
arn:aws:iam::777777777777:role/<name>-aws-load-balancer-operator-aws-load-balancer-controller
。
注意AWS IAM 角色名称的长度必须小于或等于 12 个字符。
2.3.4.2. 使用 AWS CLI 为控制器创建 AWS IAM 角色 复制链接链接已复制到粘贴板!
您可以使用 AWS 命令行界面为 AWS Load Balancer Controller 创建 AWS IAM 角色。AWS IAM 角色用于与子网和虚拟私有云 (VPC) 交互。
先决条件
-
您必须有权访问 AWS 命令行界面 (
aws
)。
流程
运行以下命令,使用身份提供程序生成信任策略文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用生成的信任策略创建 AWS IAM 角色:
aws iam create-role --role-name albo-controller --assume-role-policy-document file://albo-controller-trust-policy.json
$ aws iam create-role --role-name albo-controller --assume-role-policy-document file://albo-controller-trust-policy.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
ROLE arn:aws:iam::<aws_account_number>:role/albo-controller 2023-08-02T12:13:22Z ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-operator-controller-manager PRINCIPAL arn:aws:iam:<aws_account_number>:oidc-provider/<cluster_oidc_endpoint>
ROLE arn:aws:iam::<aws_account_number>:role/albo-controller 2023-08-02T12:13:22Z
1 ASSUMEROLEPOLICYDOCUMENT 2012-10-17 STATEMENT sts:AssumeRoleWithWebIdentity Allow STRINGEQUALS system:serviceaccount:aws-load-balancer-operator:aws-load-balancer-operator-controller-manager PRINCIPAL arn:aws:iam:<aws_account_number>:oidc-provider/<cluster_oidc_endpoint>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- AWS Load Balancer Controller 的 AWS IAM 角色的 ARN,如
arn:aws:iam::777777777777:role/albo-controller
。
运行以下命令,下载 AWS Load Balancer Controller 的权限策略:
curl -o albo-controller-permission-policy.json https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/assets/iam-policy.json
$ curl -o albo-controller-permission-policy.json https://raw.githubusercontent.com/openshift/aws-load-balancer-operator/main/assets/iam-policy.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将 AWS Load Balancer Controller 的权限策略附加到 AWS IAM 角色:
aws iam put-role-policy --role-name albo-controller --policy-name perms-policy-albo-controller --policy-document file://albo-controller-permission-policy.json
$ aws iam put-role-policy --role-name albo-controller --policy-name perms-policy-albo-controller --policy-document file://albo-controller-permission-policy.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建定义
AWSLoadBalancerController
对象的 YAML 文件:sample-aws-lb-manual-creds.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4. 安装 AWS Load Balancer Operator 复制链接链接已复制到粘贴板!
AWS Load Balancer Operator 部署和管理 AWS Load Balancer Controller。您可以使用 OpenShift Container Platform Web 控制台或 CLI 安装来自 OperatorHub 的 AWS Load Balancer Operator。
2.4.1. 使用 Web 控制台安装 AWS Load Balancer Operator 复制链接链接已复制到粘贴板!
您可以使用 Web 控制台安装 AWS Load Balancer Operator。
先决条件
-
已作为具有
cluster-admin
权限的用户身份登录 OpenShift Container Platform Web 控制台。 - 集群被配置为使用 AWS 作为平台类型和云供应商。
- 如果您使用安全令牌服务(STS)或用户置备的基础架构,请按照相关的准备步骤操作。例如,如果您使用 AWS 安全令牌服务,请参阅使用 AWS 安全令牌服务(STS) "在集群中准备 AWS Load Balancer Operator"。
流程
- 在 OpenShift Container Platform Web 控制台中进入 Operators → OperatorHub。
- 选择 AWS Load Balancer Operator。您可以使用 Filter by keyword 文本框,或者使用过滤器列表从 Operator 列表搜索 AWS Load Balancer Operator。
-
选择
aws-load-balancer-operator
命名空间。 在 Install Operator 页面中,选择以下选项:
- 更新频道为 stable-v1。
- 安装模式 为 All namespaces on the cluster (default)。
-
Installed Namespace 为
aws-load-balancer-operator
。如果aws-load-balancer-operator
命名空间不存在,它会在 Operator 安装过程中创建。 - 选择 Update approval 为 Automatic 或 Manual。默认情况下,Update approval 设置为 Automatic。如果选择自动更新,Operator Lifecycle Manager(OLM)将自动升级 Operator 的运行实例,而无需任何干预。如果选择手动更新,OLM 将创建一个更新请求。作为集群管理员,您必须手动批准该更新请求,以便将 Operator 更新至新版本。
- 点 Install。
验证
- 在 Installed Operators 仪表板中验证 AWS Load Balancer Operator 的 Status 显示为 Succeeded。
2.4.2. 使用 CLI 安装 AWS Load Balancer Operator 复制链接链接已复制到粘贴板!
您可以使用 CLI 安装 AWS Load Balancer Operator。
先决条件
-
以具有
cluster-admin
权限的用户身份登录 OpenShift Container Platform Web 控制台。 - 集群被配置为使用 AWS 作为平台类型和云供应商。
-
已登陆到 OpenShift CLI (
oc
)。
流程
创建一个
Namespace
对象:创建定义
Namespace
对象的 YAML 文件:namespace.yaml
文件示例apiVersion: v1 kind: Namespace metadata: name: aws-load-balancer-operator
apiVersion: v1 kind: Namespace metadata: name: aws-load-balancer-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
Namespace
对象:oc apply -f namespace.yaml
$ oc apply -f namespace.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建一个
OperatorGroup
对象:创建定义
OperatorGroup
对象的 YAML 文件:operatorgroup.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
OperatorGroup
对象:oc apply -f operatorgroup.yaml
$ oc apply -f operatorgroup.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建
Subscription
对象:创建定义
Subscription
对象的 YAML 文件:subscription.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
Subscription
对象:oc apply -f subscription.yaml
$ oc apply -f subscription.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
从订阅中获取安装计划的名称:
oc -n aws-load-balancer-operator \ get subscription aws-load-balancer-operator \ --template='{{.status.installplan.name}}{{"\n"}}'
$ oc -n aws-load-balancer-operator \ get subscription aws-load-balancer-operator \ --template='{{.status.installplan.name}}{{"\n"}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查安装计划的状态:
oc -n aws-load-balancer-operator \ get ip <install_plan_name> \ --template='{{.status.phase}}{{"\n"}}'
$ oc -n aws-load-balancer-operator \ get ip <install_plan_name> \ --template='{{.status.phase}}{{"\n"}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出必须是
Complete
。
2.4.3. 创建 AWS Load Balancer Controller 复制链接链接已复制到粘贴板!
您只能在集群中安装 AWSLoadBalancerController
对象的单个实例。您可以使用 CLI 创建 AWS Load Balancer Controller。AWS Load Balancer Operator 只协调名为 resource 的集群
。
先决条件
-
您已创建了
echoserver
命名空间。 -
您可以访问 OpenShift CLI(
oc
)。
流程
创建定义
AWSLoadBalancerController
对象的 YAML 文件:sample-aws-lb.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 定义
AWSLoadBalancerController
对象。 - 2
- 定义 AWS Load Balancer Controller 名称。此实例名称作为后缀添加到所有相关资源。
- 3
- 配置 AWS Load Balancer Controller 的子网标记方法。以下值有效:
-
Auto
:AWS Load Balancer Operator 决定属于集群的子网,并相应地标记它们。如果内部子网上不存在内部子网标签,Operator 无法正确确定角色。 -
Manual
:您可以使用适当的角色标签手动标记属于集群的子网。如果在用户提供的基础架构上安装集群,则使用这个选项。
-
- 4
- 定义在置备 AWS 资源时 AWS Load Balancer Controller 使用的标签。
- 5
- 定义入口类名称。默认值为
alb
。 - 6
- 指定 AWS Load Balancer Controller 的副本数。
- 7
- 将注解指定为 AWS Load Balancer Controller 的附加组件。
- 8
- 启用
alb.ingress.kubernetes.io/wafv2-acl-arn
注解。
运行以下命令来创建
AWSLoadBalancerController
对象:oc create -f sample-aws-lb.yaml
$ oc create -f sample-aws-lb.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建定义
Deployment
资源的 YAML 文件:sample-aws-lb.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建定义
Service
资源的 YAML 文件:service-albo.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建定义
Ingress
资源的 YAML 文件:ingress-albo.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,将
Ingress
资源的状态保存到HOST
变量中:HOST=$(oc get ingress -n echoserver echoserver --template='{{(index .status.loadBalancer.ingress 0).hostname}}')
$ HOST=$(oc get ingress -n echoserver echoserver --template='{{(index .status.loadBalancer.ingress 0).hostname}}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
Ingress
资源的状态:curl $HOST
$ curl $HOST
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5. 配置 AWS Load Balancer Operator 复制链接链接已复制到粘贴板!
2.5.1. 信任集群范围代理的证书颁发机构 复制链接链接已复制到粘贴板!
您可以在 AWS Load Balancer Operator 中配置集群范围代理。配置集群范围代理后,Operator Lifecycle Manager (OLM) 会使用 HTTP_PROXY
、HTTPS_PROXY
和 NO_PROXY
等环境变量自动更新 Operator 的所有部署。这些变量由 AWS Load Balancer Operator 填充给受管控制器。
运行以下命令,创建配置映射以在
aws-load-balancer-operator
命名空间中包含证书颁发机构 (CA) 捆绑包:oc -n aws-load-balancer-operator create configmap trusted-ca
$ oc -n aws-load-balancer-operator create configmap trusted-ca
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将可信 CA 捆绑包注入配置映射中,请运行以下命令将
config.openshift.io/inject-trusted-cabundle=true
标签添加到配置映射中:oc -n aws-load-balancer-operator label cm trusted-ca config.openshift.io/inject-trusted-cabundle=true
$ oc -n aws-load-balancer-operator label cm trusted-ca config.openshift.io/inject-trusted-cabundle=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,更新 AWS Load Balancer Operator 订阅以访问 AWS Load Balancer Operator 部署中的配置映射:
oc -n aws-load-balancer-operator patch subscription aws-load-balancer-operator --type='merge' -p '{"spec":{"config":{"env":[{"name":"TRUSTED_CA_CONFIGMAP_NAME","value":"trusted-ca"}],"volumes":[{"name":"trusted-ca","configMap":{"name":"trusted-ca"}}],"volumeMounts":[{"name":"trusted-ca","mountPath":"/etc/pki/tls/certs/albo-tls-ca-bundle.crt","subPath":"ca-bundle.crt"}]}}}'
$ oc -n aws-load-balancer-operator patch subscription aws-load-balancer-operator --type='merge' -p '{"spec":{"config":{"env":[{"name":"TRUSTED_CA_CONFIGMAP_NAME","value":"trusted-ca"}],"volumes":[{"name":"trusted-ca","configMap":{"name":"trusted-ca"}}],"volumeMounts":[{"name":"trusted-ca","mountPath":"/etc/pki/tls/certs/albo-tls-ca-bundle.crt","subPath":"ca-bundle.crt"}]}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 部署 AWS Load Balancer Operator 后,运行以下命令来验证 CA 捆绑包是否已添加到
aws-load-balancer-operator-controller-manager
部署中:oc -n aws-load-balancer-operator exec deploy/aws-load-balancer-operator-controller-manager -c manager -- bash -c "ls -l /etc/pki/tls/certs/albo-tls-ca-bundle.crt; printenv TRUSTED_CA_CONFIGMAP_NAME"
$ oc -n aws-load-balancer-operator exec deploy/aws-load-balancer-operator-controller-manager -c manager -- bash -c "ls -l /etc/pki/tls/certs/albo-tls-ca-bundle.crt; printenv TRUSTED_CA_CONFIGMAP_NAME"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
-rw-r--r--. 1 root 1000690000 5875 Jan 11 12:25 /etc/pki/tls/certs/albo-tls-ca-bundle.crt trusted-ca
-rw-r--r--. 1 root 1000690000 5875 Jan 11 12:25 /etc/pki/tls/certs/albo-tls-ca-bundle.crt trusted-ca
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:通过运行以下命令,每次 configmap 发生变化时重启 AWS Load Balancer Operator 的部署:
oc -n aws-load-balancer-operator rollout restart deployment/aws-load-balancer-operator-controller-manager
$ oc -n aws-load-balancer-operator rollout restart deployment/aws-load-balancer-operator-controller-manager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.2. 在 AWS Load Balancer 中添加 TLS 终止 复制链接链接已复制到粘贴板!
您可以将域的流量路由到服务的 pod,并在 AWS 负载均衡器中添加 TLS 终止。
先决条件
-
您可以访问 OpenShift CLI(
oc
)。
流程
创建定义
AWSLoadBalancerController
资源的 YAML 文件:add-tls-termination-albc.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 定义入口类名称。如果集群中没有 ingress 类,AWS Load Balancer Controller 会创建一个。如果
spec.controller
设置为ingress.k8s.aws/alb
,AWS Load Balancer Controller 会协调额外的入口类值。
创建定义
Ingress
资源的 YAML 文件:add-tls-termination-ingress.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.3. 通过单个 AWS Load Balancer 创建多个入口资源 复制链接链接已复制到粘贴板!
您可以通过单个 AWS Load Balancer 将流量路由到属于单个域一部分的、带有多个 ingress 资源的不同服务。每个 ingress 资源提供了域的不同端点。
先决条件
-
您可以访问 OpenShift CLI(
oc
)。
流程
创建一个
IngressClassParams
资源 YAML 文件,如sample-single-lb-params.yaml
,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
IngressClassParams
资源:oc create -f sample-single-lb-params.yaml
$ oc create -f sample-single-lb-params.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
IngressClass
资源 YAML 文件,如sample-single-lb-class.yaml
,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
IngressClass
资源:oc create -f sample-single-lb-class.yaml
$ oc create -f sample-single-lb-class.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
AWSLoadBalancerController
资源 YAML 文件,如sample-single-lb.yaml
,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 定义
IngressClass
资源的名称。
运行以下命令来创建
AWSLoadBalancerController
资源:oc create -f sample-single-lb.yaml
$ oc create -f sample-single-lb.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
Ingress
资源 YAML 文件,如sample-multiple-ingress.yaml
,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
Ingress
资源:oc create -f sample-multiple-ingress.yaml
$ oc create -f sample-multiple-ingress.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.4. AWS Load Balancer Operator 日志 复制链接链接已复制到粘贴板!
您可以使用 oc logs
命令查看 AWS Load Balancer Operator 日志。
流程
运行以下命令,查看 AWS Load Balancer Operator 的日志:
oc logs -n aws-load-balancer-operator deployment/aws-load-balancer-operator-controller-manager -c manager
$ oc logs -n aws-load-balancer-operator deployment/aws-load-balancer-operator-controller-manager -c manager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 3 章 eBPF manager Operator 复制链接链接已复制到粘贴板!
3.1. 关于 eBPF Manager Operator 复制链接链接已复制到粘贴板!
eBPF Manager Operator 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
3.1.1. 关于扩展 Berkeley Packet Filter (eBPF) 复制链接链接已复制到粘贴板!
eBPF 扩展原始 Berkeley Packet 过滤器,用于高级网络流量过滤。它充当 Linux 内核中的虚拟机,允许您运行沙盒程序来响应网络数据包、系统调用或内核功能等事件。
3.1.2. 关于 eBPF Manager Operator 复制链接链接已复制到粘贴板!
eBPF Manager 简化了 Kubernetes 中的 eBPF 程序的管理和部署,以及增强使用 eBPF 程序的安全性。它利用 Kubernetes 自定义资源定义 (CRD) 来管理打包为 OCI 容器镜像的 eBPF 程序。这种方法有助于通过限制特定用户可部署的程序类型来划分部署权限并增强安全性。
eBPF Manager 是一个软件堆栈,用于在 Kubernetes 中管理 eBPF 程序。它有助于在 Kubernetes 集群中对 eBPF 程序进行加载、卸载、修改和监控。它包括守护进程、CRD、代理和 Operator:
- bpfman
- 通过 gRPC API 管理 eBPF 程序的系统守护进程。
- eBPF CRD
- 一组 CRD,如 XdpProgram 和 TcProgram 用于加载 eBPF 程序,以及一个代表载入程序状态的由 bpfman 生成的 CRD (BpfProgram)。
- bpfman-agent
- 在 daemonset 容器中运行,确保每个节点上的 eBPF 程序处于所需的状态。
- bpfman-operator
- 使用 Operator SDK 管理集群中的 bpfman-agent 和 CRD 的生命周期。
eBPF Manager Operator 提供以下功能:
- 通过一个控制的守护进程来集中 eBPF 程序加载功能以增强安全性。eBPF Manager 具有升级的特权,因此应用程序不需要这些权限。 eBPF 程序控制遵循标准的 Kubernetes 基于角色的访问控制 (RBAC)机制,它可以允许或拒绝应用程序对用于管理 eBPF 程序加载和卸载的不同 eBPF Manager CRD 的访问。
- 提供对活跃 eBPF 程序的详细可见性,提高了您在系统中调试问题的能力。
- 可以使来自不同源的多个 eBPF 程序共存,使用 libxdp 等协议用于 XDP 和 TC 程序,从而增强了互操作性。
- 简化 Kubernetes 中 eBPF 程序的部署和生命周期管理。开发人员可以专注于程序交互,而不是生命周期管理,支持现有 eBPF 库,如 Cilium、libbpf 和 Aya。
3.1.4. 后续步骤 复制链接链接已复制到粘贴板!
3.2. 安装 eBPF Manager Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 OpenShift Container Platform CLI 或 Web 控制台安装 eBPF Manager Operator。
eBPF Manager Operator 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
3.2.1. 使用 CLI 安装 eBPF Manager Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 CLI 安装 Operator。
先决条件
-
已安装 OpenShift CLI(
oc
)。 - 有管理员特权的帐户。
流程
运行以下命令来创建
bpfman
命名空间:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
OperatorGroup
CR:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 订阅 eBPF Manager Operator。
要为 eBPF Manager Operator 创建
Subscription
CR,请输入以下命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要验证是否已安装 Operator,请输入以下命令:
oc get ip -n bpfman
$ oc get ip -n bpfman
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CSV APPROVAL APPROVED install-ppjxl security-profiles-operator.v0.8.5 Automatic true
NAME CSV APPROVAL APPROVED install-ppjxl security-profiles-operator.v0.8.5 Automatic true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要验证 Operator 的版本,请输入以下命令:
oc get csv -n bpfman
$ oc get csv -n bpfman
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME DISPLAY VERSION REPLACES PHASE bpfman-operator.v0.5.0 eBPF Manager Operator 0.5.0 bpfman-operator.v0.4.2 Succeeded
NAME DISPLAY VERSION REPLACES PHASE bpfman-operator.v0.5.0 eBPF Manager Operator 0.5.0 bpfman-operator.v0.4.2 Succeeded
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.2. 使用 Web 控制台安装 eBPF Manager Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 Web 控制台安装 eBPF Manager Operator。
先决条件
-
已安装 OpenShift CLI(
oc
)。 - 有管理员特权的帐户。
流程
安装 eBPF Manager Operator:
- 在 OpenShift Container Platform Web 控制台中,点击 Operators → OperatorHub。
- 从可用的 Operator 列表中选择 eBPF Manager Operator,如果提示输入 Show community Operator,请点 Continue。
- 点 Install。
- 在 Install Operator 页面中,在 Installed Namespace 下选择 Operator recommended Namespace。
- 点 Install。
验证 eBPF Manager Operator 是否已成功安装:
- 导航到 Operators → Installed Operators 页面。
确保 openshift-ingress-node-firewall 项目中列出的 eBPF Manager Operator 的 Status 为 InstallSucceeded。
注意在安装过程中,Operator 可能会显示 Failed 状态。如果安装过程结束后有 InstallSucceeded 信息,您可以忽略这个 Failed 信息。
如果 Operator 没有 InstallSucceeded 状态,请按照以下步骤进行故障排除:
- 检查 Operator Subscriptions 和 Install Plans 选项卡中的 Status 项中是否有任何错误。
-
进入到 Workloads → Pods 页面,在
bpfman
项目中检查 pod 的日志。
3.2.3. 后续步骤 复制链接链接已复制到粘贴板!
3.3. 部署 eBPF 程序 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 eBPF Manager Operator 部署容器化 eBPF 应用程序。
对于此流程中部署的 eBPF 程序示例,示例清单执行以下操作:
首先,它创建基本的 Kubernetes 对象,如 Namespace
、ServiceAccount
和 ClusterRoleBinding
。它还创建一个 XdpProgram
对象,它是 eBPF Manager 提供的自定义资源定义(CRD) 来加载 eBPF XDP 程序。每种程序类型都有自己的 CRD,但它们的作用类似。如需更多信息,请参阅在 Kubernetes 上加载 eBPF 程序。
其次,它会创建一个守护进程集,运行一个用户空间程序,该程序读取 eBPF 程序生成的 eBPF 映射信息。此 eBPF 映射是使用 Container Storage Interface (CSI) 驱动程序挂载的卷。通过在容器中挂载 eBPF 映射来实现在主机上访问它的效果,应用程序 pod 可以在没有特权的情况下访问 eBPF 映射。有关如何配置 CSI 的更多信息,请参阅在 Kubernetes 上部署 eBPF 的应用程序。
eBPF Manager Operator 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
3.3.1. 部署容器化的 eBPF 程序 复制链接链接已复制到粘贴板!
作为集群管理员,您可以将 eBPF 程序部署到集群中的节点。在此过程中,在 go-xdp-counter
命名空间中安装了一个容器化的 eBPF 程序示例。
先决条件
-
已安装 OpenShift CLI(
oc
)。 - 有管理员特权的帐户。
- 已安装 eBPF Manager Operator。
流程
要下载清单,请输入以下命令:
curl -L https://github.com/bpfman/bpfman/releases/download/v0.5.1/go-xdp-counter-install-selinux.yaml -o go-xdp-counter-install-selinux.yaml
$ curl -L https://github.com/bpfman/bpfman/releases/download/v0.5.1/go-xdp-counter-install-selinux.yaml -o go-xdp-counter-install-selinux.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要部署示例 eBPF 应用程序,请输入以下命令:
oc create -f go-xdp-counter-install-selinux.yaml
$ oc create -f go-xdp-counter-install-selinux.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要确认 eBPF 示例应用程序已被成功部署,请输入以下命令:
oc get all -o wide -n go-xdp-counter
$ oc get all -o wide -n go-xdp-counter
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要确认示例 XDP 程序正在运行,请输入以下命令:
oc get xdpprogram go-xdp-counter-example
$ oc get xdpprogram go-xdp-counter-example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME BPFFUNCTIONNAME NODESELECTOR STATUS go-xdp-counter-example xdp_stats {} ReconcileSuccess
NAME BPFFUNCTIONNAME NODESELECTOR STATUS go-xdp-counter-example xdp_stats {} ReconcileSuccess
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要确认 XDP 程序正在收集数据,请输入以下命令:
oc logs <pod_name> -n go-xdp-counter
$ oc logs <pod_name> -n go-xdp-counter
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<pod_name>
替换为 XDP 程序 pod 的名称,如go-xdp-counter-ds-4m9cw
。输出示例
2024/08/13 15:20:06 15016 packets received 2024/08/13 15:20:06 93581579 bytes received ...
2024/08/13 15:20:06 15016 packets received 2024/08/13 15:20:06 93581579 bytes received ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 4 章 外部 DNS Operator 复制链接链接已复制到粘贴板!
4.1. 外部 DNS Operator 发行注记 复制链接链接已复制到粘贴板!
External DNS Operator 部署并管理 ExternalDNS
,以便为从外部 DNS 供应商到 OpenShift Container Platform 的服务和路由提供名称解析。
External DNS Operator 仅在 x86_64
架构上被支持。
本发行注记介绍了 OpenShift Container Platform 中外部 DNS Operator 的开发。
4.1.1. 外部 DNS Operator 1.3.0 复制链接链接已复制到粘贴板!
以下公告可用于外部 DNS Operator 版本 1.3.0 :
此更新包括更新到上游项目的 0.14.2 版本。
4.1.1.1. 程序错误修复 复制链接链接已复制到粘贴板!
在以前的版本中,ExternalDNS Operator 无法在 HCP 集群中部署操作对象。在这个版本中,Operator 以 running 和 ready 状态部署操作对象。(OCPBUGS-37059)
在以前的版本中,ExternalDNS Operator 没有使用 RHEL 9 作为其构建或基础镜像。在这个版本中,RHEL9 是基础。(OCPBUGS-41683)
在以前的版本中,godoc 为 Infoblox 供应商有一个有问题的链接。在这个版本中,godoc 被修改为准确性。有些链接在其它链接被 GitHub permalinks 替换时会被删除。(OCPBUGS-36797)
4.1.2. 外部 DNS Operator 1.2.0 复制链接链接已复制到粘贴板!
以下公告可用于外部 DNS Operator 版本 1.2.0 :
4.1.2.1. 新功能 复制链接链接已复制到粘贴板!
- External DNS Operator 现在支持 AWS 共享 VPC。如需更多信息,请参阅使用共享 VPC 在不同的 AWS 帐户中创建 DNS 记录。
4.1.2.2. 程序错误修复 复制链接链接已复制到粘贴板!
-
操作对象的更新策略从
Rolling
改为Recreate
。(OCPBUGS-3630)
4.1.3. 外部 DNS Operator 1.1.1 复制链接链接已复制到粘贴板!
以下公告可用于外部 DNS Operator 版本 1.1.1:
4.1.4. 外部 DNS Operator 1.1.0 复制链接链接已复制到粘贴板!
此发行版本包含来自上游项目 0.13.1 版本的操作对象的变基。以下公告可用于外部 DNS Operator 版本 1.1.0:
4.1.4.1. 程序错误修复 复制链接链接已复制到粘贴板!
-
在以前的版本中,ExternalDNS Operator 为卷强制有一个空的
defaultMode
值,这会导致因为与 OpenShift API 冲突而造成恒定的更新。现在,defaultMode
值不会被强制,操作对象部署不会持续更新。(OCPBUGS-2793)
4.1.5. 外部 DNS Operator 1.0.1 复制链接链接已复制到粘贴板!
以下公告可用于外部 DNS Operator 版本 1.0.1:
4.1.6. 外部 DNS Operator 1.0.0 复制链接链接已复制到粘贴板!
以下公告可用于 External DNS Operator 版本 1.0.0:
4.1.6.1. 程序错误修复 复制链接链接已复制到粘贴板!
- 在以前的版本中,External DNS Operator 在 ExternalDNS 操作对象 pod 部署中发出有关违反 restricted SCC 策略的警告。这个问题已解决。(BZ#2086408)
4.2. 了解外部 DNS Operator 复制链接链接已复制到粘贴板!
External DNS Operator 部署并管理 ExternalDNS
,以便为从外部 DNS 供应商到 OpenShift Container Platform 的服务和路由提供名称解析。
4.2.1. 外部 DNS Operator 复制链接链接已复制到粘贴板!
External DNS Operator 从 olm.openshift.io
API 组实现外部 DNS API。External DNS Operator 更新服务、路由和外部 DNS 供应商。
先决条件
-
已安装
yq
CLI 工具。
流程
您可以根据 OperatorHub 的要求部署外部 DNS Operator。部署外部 DNS Operator 会创建一个 Subscription
对象。
运行以下命令,检查安装计划的名称,如
install-zcvlr
:oc -n external-dns-operator get sub external-dns-operator -o yaml | yq '.status.installplan.name'
$ oc -n external-dns-operator get sub external-dns-operator -o yaml | yq '.status.installplan.name'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查安装计划的状态是否为
Complete
:oc -n external-dns-operator get ip <install_plan_name> -o yaml | yq '.status.phase'
$ oc -n external-dns-operator get ip <install_plan_name> -o yaml | yq '.status.phase'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,查看
external-dns-operator
部署的状态:oc get -n external-dns-operator deployment/external-dns-operator
$ oc get -n external-dns-operator deployment/external-dns-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY UP-TO-DATE AVAILABLE AGE external-dns-operator 1/1 1 1 23h
NAME READY UP-TO-DATE AVAILABLE AGE external-dns-operator 1/1 1 1 23h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.2. 查看外部 DNS Operator 日志 复制链接链接已复制到粘贴板!
您可以使用 oc logs
命令查看外部 DNS Operator 日志。
流程
运行以下命令,查看外部 DNS Operator 的日志:
oc logs -n external-dns-operator deployment/external-dns-operator -c external-dns-operator
$ oc logs -n external-dns-operator deployment/external-dns-operator -c external-dns-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.2.1. 外部 DNS Operator 域名限制 复制链接链接已复制到粘贴板!
External DNS Operator 使用 TXT registry,它为 TXT 记录添加前缀。这可减少 TXT 记录的域名的最大长度。没有对应的 TXT 记录时无法出现 DNS 记录,因此 DNS 记录的域名必须遵循与 TXT 记录相同的限制。例如,一个 <domain_name_from_source>
DNS 记录会导致一个 external-dns-<record_type>-<domain_name_from_source>
TXT 记录。
外部 DNS Operator 生成的 DNS 记录的域名有以下限制:
记录类型 | 字符数 |
---|---|
CNAME | 44 |
AzureDNS 上的通配符 CNAME 记录 | 42 |
A | 48 |
AzureDNS 上的通配符 A 记录 | 46 |
如果生成的域名超过任何域名限制,则外部 DNS Operator 日志中会出现以下错误:
time="2022-09-02T08:53:57Z" level=error msg="Failure in zone test.example.io. [Id: /hostedzone/Z06988883Q0H0RL6UMXXX]" time="2022-09-02T08:53:57Z" level=error msg="InvalidChangeBatch: [FATAL problem: DomainLabelTooLong (Domain label is too long) encountered with 'external-dns-a-hello-openshift-aaaaaaaaaa-bbbbbbbbbb-ccccccc']\n\tstatus code: 400, request id: e54dfd5a-06c6-47b0-bcb9-a4f7c3a4e0c6"
time="2022-09-02T08:53:57Z" level=error msg="Failure in zone test.example.io. [Id: /hostedzone/Z06988883Q0H0RL6UMXXX]"
time="2022-09-02T08:53:57Z" level=error msg="InvalidChangeBatch: [FATAL problem: DomainLabelTooLong (Domain label is too long) encountered with 'external-dns-a-hello-openshift-aaaaaaaaaa-bbbbbbbbbb-ccccccc']\n\tstatus code: 400, request id: e54dfd5a-06c6-47b0-bcb9-a4f7c3a4e0c6"
4.3. 安装 External DNS Operator 复制链接链接已复制到粘贴板!
您可以在云供应商环境中安装外部 DNS Operator,如 AWS、Azure 和 GCP。
4.3.1. 使用 OperatorHub 安装 External DNS Operator 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform OperatorHub 安装外部 DNS Operator。
流程
- 在 OpenShift Container Platform Web 控制台中点 Operators → OperatorHub。
- 点 External DNS Operator。您可以使用 Filter by keyword 文本框或过滤器列表从 Operator 列表中搜索 External DNS Operator。
-
选择
external-dns-operator
命名空间。 - 在 External DNS Operator 页面中,点 Install。
在 Install Operator 页面中,确保选择了以下选项:
- 将频道更新为 stable-v1。
- 安装模式为 A specific name on the cluster。
-
安装的命名空间为
external-dns-operator
。如果命名空间external-dns-operator
不存在,它会在 Operator 安装过程中创建。 - 将 Approval Strategy 选为 Automatic 或 Manual。默认情况下,批准策略设置为 Automatic。
- 点 Install。
如果选择了 Automatic 更新,Operator Lifecycle Manager(OLM)将自动升级 Operator 的运行实例,而无需任何干预。
如果选择 手动 更新,则 OLM 会创建一个更新请求。作为集群管理员,您必须手动批准该更新请求,才可将 Operator 更新至新版本。
验证
验证 External DNS Operator 是否在 Installed Operators 仪表板上显示 Status 为 Succeeded。
4.3.2. 使用 CLI 安装 External DNS Operator 复制链接链接已复制到粘贴板!
您可以使用 CLI 安装 External DNS Operator
先决条件
-
以具有
cluster-admin
权限的用户身份登录 OpenShift Container Platform Web 控制台。 -
已登陆到 OpenShift CLI (
oc
)。
流程
创建一个
Namespace
对象:创建定义
Namespace
对象的 YAML 文件:namespace.yaml
文件示例apiVersion: v1 kind: Namespace metadata: name: external-dns-operator
apiVersion: v1 kind: Namespace metadata: name: external-dns-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
Namespace
对象:oc apply -f namespace.yaml
$ oc apply -f namespace.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建一个
OperatorGroup
对象:创建定义
OperatorGroup
对象的 YAML 文件:operatorgroup.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
OperatorGroup
对象:oc apply -f operatorgroup.yaml
$ oc apply -f operatorgroup.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建
Subscription
对象:创建定义
Subscription
对象的 YAML 文件:subscription.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
Subscription
对象:oc apply -f subscription.yaml
$ oc apply -f subscription.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,从订阅获取安装计划的名称:
oc -n external-dns-operator \ get subscription external-dns-operator \ --template='{{.status.installplan.name}}{{"\n"}}'
$ oc -n external-dns-operator \ get subscription external-dns-operator \ --template='{{.status.installplan.name}}{{"\n"}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证安装计划的状态是否为
Complete
:oc -n external-dns-operator \ get ip <install_plan_name> \ --template='{{.status.phase}}{{"\n"}}'
$ oc -n external-dns-operator \ get ip <install_plan_name> \ --template='{{.status.phase}}{{"\n"}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证
external-dns-operator
pod 的状态是否为Running
:oc -n external-dns-operator get pod
$ oc -n external-dns-operator get pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE external-dns-operator-5584585fd7-5lwqm 2/2 Running 0 11m
NAME READY STATUS RESTARTS AGE external-dns-operator-5584585fd7-5lwqm 2/2 Running 0 11m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证订阅的目录源是否为
redhat-operators
:oc -n external-dns-operator get subscription
$ oc -n external-dns-operator get subscription
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令检查
external-dns-operator
版本:oc -n external-dns-operator get csv
$ oc -n external-dns-operator get csv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4. 外部 DNS Operator 配置参数 复制链接链接已复制到粘贴板!
External DNS Operator 包括以下配置参数。
4.4.1. 外部 DNS Operator 配置参数 复制链接链接已复制到粘贴板!
External DNS Operator 包括以下配置参数:
参数 | 描述 |
---|---|
| 启用云供应商的类型。 |
|
允许您根据域指定 DNS 区域。如果没有指定区, zones: - "myzoneid"
|
|
允许您根据域指定 AWS 区域。如果没有指定域, |
|
允许您指定 DNS 记录、
|
4.5. 在 AWS 上创建 DNS 记录 复制链接链接已复制到粘贴板!
您可以使用 External DNS Operator 在 AWS 和 AWS GovCloud 上创建 DNS 记录。
您可以使用 Red Hat External DNS Operator 在 AWS 公共托管区上创建 DNS 记录。您可以使用相同的说明在 AWS GovCloud 的托管区上创建 DNS 记录。
流程
运行以下命令,检查用户配置文件,如
system:admin
。用户配置集必须有权访问kube-system
命名空间。如果没有凭证,您可以从kube-system
命名空间中获取凭证,运行以下命令来使用云供应商客户端:oc whoami
$ oc whoami
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
kube-system
命名空间中存在的 aws-creds secret 中获取值。export AWS_ACCESS_KEY_ID=$(oc get secrets aws-creds -n kube-system --template={{.data.aws_access_key_id}} | base64 -d)
$ export AWS_ACCESS_KEY_ID=$(oc get secrets aws-creds -n kube-system --template={{.data.aws_access_key_id}} | base64 -d)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow export AWS_SECRET_ACCESS_KEY=$(oc get secrets aws-creds -n kube-system --template={{.data.aws_secret_access_key}} | base64 -d)
$ export AWS_SECRET_ACCESS_KEY=$(oc get secrets aws-creds -n kube-system --template={{.data.aws_secret_access_key}} | base64 -d)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取路由来检查域:
oc get routes --all-namespaces | grep console
$ oc get routes --all-namespaces | grep console
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
openshift-console console console-openshift-console.apps.testextdnsoperator.apacshift.support console https reencrypt/Redirect None openshift-console downloads downloads-openshift-console.apps.testextdnsoperator.apacshift.support downloads http edge/Redirect None
openshift-console console console-openshift-console.apps.testextdnsoperator.apacshift.support console https reencrypt/Redirect None openshift-console downloads downloads-openshift-console.apps.testextdnsoperator.apacshift.support downloads http edge/Redirect None
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取 DNS 区域列表,并找到与您之前查询的路由域对应的 DNS 区域:
aws route53 list-hosted-zones | grep testextdnsoperator.apacshift.support
$ aws route53 list-hosted-zones | grep testextdnsoperator.apacshift.support
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
HOSTEDZONES terraform /hostedzone/Z02355203TNN1XXXX1J6O testextdnsoperator.apacshift.support. 5
HOSTEDZONES terraform /hostedzone/Z02355203TNN1XXXX1J6O testextdnsoperator.apacshift.support. 5
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为
路由
源创建ExternalDNS
资源:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 定义外部 DNS 资源的名称。
- 2
- 默认情况下,所有托管区都被选为潜在的目标。您可以包括需要的托管区。
- 3
- 目标区的域匹配必须是完全准确的(与正则表达式匹配不同)。
- 4
- 指定您要更新的区域的确切域。路由的主机名必须是指定域的子域。
- 5
- 定义
AWS Route53
DNS 供应商。 - 6
- 定义 DNS 记录源的选项。
- 7
- 定义 OpenShift
路由
资源,作为在之前指定的 DNS 供应商中创建的 DNS 记录来源。 - 8
- 如果源是
OpenShiftRoute
,您可以传递 OpenShift Ingress Controller 名称。外部 DNS Operator 在创建 CNAME 记录时,选择该路由器的规范主机名作为目标。
使用以下命令,检查为 OCP 路由创建的记录:
aws route53 list-resource-record-sets --hosted-zone-id Z02355203TNN1XXXX1J6O --query "ResourceRecordSets[?Type == 'CNAME']" | grep console
$ aws route53 list-resource-record-sets --hosted-zone-id Z02355203TNN1XXXX1J6O --query "ResourceRecordSets[?Type == 'CNAME']" | grep console
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5.2. 使用共享 VPC 在不同的 AWS 帐户中创建 DNS 记录 复制链接链接已复制到粘贴板!
您可以使用 ExternalDNS Operator 使用共享 Virtual Private Cloud (VPC)在不同的 AWS 帐户中创建 DNS 记录。通过使用共享 VPC,组织可将资源从多个项目连接到通用 VPC 网络。然后,机构可以使用 VPC 共享在多个 AWS 帐户间使用单个 Route 53 实例。
先决条件
- 您已创建了两个 Amazon AWS 帐户:一个 VPC 和配置了 Route 53 私有托管区(帐户 A),另一个用于安装集群(帐户 B)。
- 您已创建了具有帐户 B 的相应权限的 IAM 策略和 IAM 角色,以便在帐户 A 的 Route 53 托管区中创建 DNS 记录。
- 您已在帐户 B 上安装了帐户 A 的集群。
- 您已在帐户 B 的集群中安装了 ExternalDNS Operator。
流程
运行以下命令,获取您创建的 IAM 角色的 Role ARN,以允许帐户 B 访问帐户 A 的 Route 53 托管区:
aws --profile account-a iam get-role --role-name user-rol1 | head -1
$ aws --profile account-a iam get-role --role-name user-rol1 | head -1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
ROLE arn:aws:iam::1234567890123:role/user-rol1 2023-09-14T17:21:54+00:00 3600 / AROA3SGB2ZRKRT5NISNJN user-rol1
ROLE arn:aws:iam::1234567890123:role/user-rol1 2023-09-14T17:21:54+00:00 3600 / AROA3SGB2ZRKRT5NISNJN user-rol1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,找到用于帐户 A 凭证的私有托管区:
aws --profile account-a route53 list-hosted-zones | grep testextdnsoperator.apacshift.support
$ aws --profile account-a route53 list-hosted-zones | grep testextdnsoperator.apacshift.support
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
HOSTEDZONES terraform /hostedzone/Z02355203TNN1XXXX1J6O testextdnsoperator.apacshift.support. 5
HOSTEDZONES terraform /hostedzone/Z02355203TNN1XXXX1J6O testextdnsoperator.apacshift.support. 5
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
ExternalDNS
对象:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定 Role ARN,以便在帐户 A 中创建 DNS 记录。
使用以下命令,检查为 OpenShift Container Platform (OCP) 路由创建的记录:
aws --profile account-a route53 list-resource-record-sets --hosted-zone-id Z02355203TNN1XXXX1J6O --query "ResourceRecordSets[?Type == 'CNAME']" | grep console-openshift-console
$ aws --profile account-a route53 list-resource-record-sets --hosted-zone-id Z02355203TNN1XXXX1J6O --query "ResourceRecordSets[?Type == 'CNAME']" | grep console-openshift-console
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6. 在 Azure 上创建 DNS 记录 复制链接链接已复制到粘贴板!
您可以使用外部 DNS Operator 在 Azure 上创建 DNS 记录。
不支持在支持 Microsoft Entra Workload ID 的集群或在 Microsoft Azure Government (MAG) 区域中运行的集群中使用 External DNS Operator。
4.6.1. 在 Azure DNS 区域中创建 DNS 记录 复制链接链接已复制到粘贴板!
您可以使用 External DNS Operator 在 Azure 的公共或私有 DNS 区域上创建域名服务器(DNS)记录。
先决条件
- 您必须具有管理员特权。
-
admin
用户必须有权访问kube-system
命名空间。
流程
运行以下命令,从
kube-system
命名空间中获取凭证以使用云供应商客户端:CLIENT_ID=$(oc get secrets azure-credentials -n kube-system --template={{.data.azure_client_id}} | base64 -d) CLIENT_SECRET=$(oc get secrets azure-credentials -n kube-system --template={{.data.azure_client_secret}} | base64 -d) RESOURCE_GROUP=$(oc get secrets azure-credentials -n kube-system --template={{.data.azure_resourcegroup}} | base64 -d) SUBSCRIPTION_ID=$(oc get secrets azure-credentials -n kube-system --template={{.data.azure_subscription_id}} | base64 -d) TENANT_ID=$(oc get secrets azure-credentials -n kube-system --template={{.data.azure_tenant_id}} | base64 -d)
$ CLIENT_ID=$(oc get secrets azure-credentials -n kube-system --template={{.data.azure_client_id}} | base64 -d) $ CLIENT_SECRET=$(oc get secrets azure-credentials -n kube-system --template={{.data.azure_client_secret}} | base64 -d) $ RESOURCE_GROUP=$(oc get secrets azure-credentials -n kube-system --template={{.data.azure_resourcegroup}} | base64 -d) $ SUBSCRIPTION_ID=$(oc get secrets azure-credentials -n kube-system --template={{.data.azure_subscription_id}} | base64 -d) $ TENANT_ID=$(oc get secrets azure-credentials -n kube-system --template={{.data.azure_tenant_id}} | base64 -d)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来登录到 Azure:
az login --service-principal -u "${CLIENT_ID}" -p "${CLIENT_SECRET}" --tenant "${TENANT_ID}"
$ az login --service-principal -u "${CLIENT_ID}" -p "${CLIENT_SECRET}" --tenant "${TENANT_ID}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来获取路由列表:
oc get routes --all-namespaces | grep console
$ oc get routes --all-namespaces | grep console
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
openshift-console console console-openshift-console.apps.test.azure.example.com console https reencrypt/Redirect None openshift-console downloads downloads-openshift-console.apps.test.azure.example.com downloads http edge/Redirect None
openshift-console console console-openshift-console.apps.test.azure.example.com console https reencrypt/Redirect None openshift-console downloads downloads-openshift-console.apps.test.azure.example.com downloads http edge/Redirect None
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取 DNS 区域列表。
对于公共 DNS 区域,请运行以下命令:
az network dns zone list --resource-group "${RESOURCE_GROUP}"
$ az network dns zone list --resource-group "${RESOURCE_GROUP}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于私有 DNS 区域,请运行以下命令:
az network private-dns zone list -g "${RESOURCE_GROUP}"
$ az network private-dns zone list -g "${RESOURCE_GROUP}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建一个 YAML 文件,如
external-dns-sample-azure.yaml
,该文件定义ExternalDNS
对象:external-dns-sample-azure.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
故障排除
检查为路由创建的记录。
对于公共 DNS 区域,请运行以下命令:
az network dns record-set list -g "${RESOURCE_GROUP}" -z "${ZONE_NAME}" | grep console
$ az network dns record-set list -g "${RESOURCE_GROUP}" -z "${ZONE_NAME}" | grep console
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于私有 DNS 区域,请运行以下命令:
az network private-dns record-set list -g "${RESOURCE_GROUP}" -z "${ZONE_NAME}" | grep console
$ az network private-dns record-set list -g "${RESOURCE_GROUP}" -z "${ZONE_NAME}" | grep console
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7. 在 GCP 上创建 DNS 记录 复制链接链接已复制到粘贴板!
您可以使用 External DNS Operator 在 Google Cloud Platform (GCP) 上创建 DNS 记录。
不支持在启用了 GCP Workload Identity 的集群上使用 External DNS Operator。有关 GCP Workload Identity 的更多信息,请参阅 GCP Workload Identity。
4.7.1. 在 GCP 公共管理区上创建 DNS 记录 复制链接链接已复制到粘贴板!
您可以使用 External DNS Operator 在 GCP 公共受管区上创建 DNS 记录。
先决条件
- 您必须具有管理员特权。
流程
运行以下命令,将
gcp-credentials
secret 复制到encoded-gcloud.json
文件中:oc get secret gcp-credentials -n kube-system --template='{{$v := index .data "service_account.json"}}{{$v}}' | base64 -d - > decoded-gcloud.json
$ oc get secret gcp-credentials -n kube-system --template='{{$v := index .data "service_account.json"}}{{$v}}' | base64 -d - > decoded-gcloud.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令导出 Google 凭证:
export GOOGLE_CREDENTIALS=decoded-gcloud.json
$ export GOOGLE_CREDENTIALS=decoded-gcloud.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下命令激活您的帐户:
gcloud auth activate-service-account <client_email as per decoded-gcloud.json> --key-file=decoded-gcloud.json
$ gcloud auth activate-service-account <client_email as per decoded-gcloud.json> --key-file=decoded-gcloud.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来设置项目:
gcloud config set project <project_id as per decoded-gcloud.json>
$ gcloud config set project <project_id as per decoded-gcloud.json>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来获取路由列表:
oc get routes --all-namespaces | grep console
$ oc get routes --all-namespaces | grep console
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
openshift-console console console-openshift-console.apps.test.gcp.example.com console https reencrypt/Redirect None openshift-console downloads downloads-openshift-console.apps.test.gcp.example.com downloads http edge/Redirect None
openshift-console console console-openshift-console.apps.test.gcp.example.com console https reencrypt/Redirect None openshift-console downloads downloads-openshift-console.apps.test.gcp.example.com downloads http edge/Redirect None
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,获取受管区域的列表,如
qe-cvs4g-private-zone test.gcp.example.com
:gcloud dns managed-zones list | grep test.gcp.example.com
$ gcloud dns managed-zones list | grep test.gcp.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 YAML 文件,如
external-dns-sample-gcp.yaml
,该文件定义ExternalDNS
对象:external-dns-sample-gcp.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,检查为 OpenShift Container Platform 路由创建的 DNS 记录:
gcloud dns record-sets list --zone=qe-cvs4g-private-zone | grep console
$ gcloud dns record-sets list --zone=qe-cvs4g-private-zone | grep console
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.8. 在 Infoblox 上创建 DNS 记录 复制链接链接已复制到粘贴板!
您可以使用 External DNS Operator 在 Infoblox 上创建 DNS 记录。
4.8.1. 在 Infoblox 上的公共 DNS 区域中创建 DNS 记录 复制链接链接已复制到粘贴板!
您可以使用 External DNS Operator 在 Infoblox 上的公共 DNS 区域上创建 DNS 记录。
先决条件
-
您可以访问 OpenShift CLI(
oc
)。 - 您可以访问 Infoblox UI。
流程
运行以下命令,使用 Infoblox 凭证创建
secret
对象:oc -n external-dns-operator create secret generic infoblox-credentials --from-literal=EXTERNAL_DNS_INFOBLOX_WAPI_USERNAME=<infoblox_username> --from-literal=EXTERNAL_DNS_INFOBLOX_WAPI_PASSWORD=<infoblox_password>
$ oc -n external-dns-operator create secret generic infoblox-credentials --from-literal=EXTERNAL_DNS_INFOBLOX_WAPI_USERNAME=<infoblox_username> --from-literal=EXTERNAL_DNS_INFOBLOX_WAPI_PASSWORD=<infoblox_password>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来获取路由列表:
oc get routes --all-namespaces | grep console
$ oc get routes --all-namespaces | grep console
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
openshift-console console console-openshift-console.apps.test.example.com console https reencrypt/Redirect None openshift-console downloads downloads-openshift-console.apps.test.example.com downloads http edge/Redirect None
openshift-console console console-openshift-console.apps.test.example.com console https reencrypt/Redirect None openshift-console downloads downloads-openshift-console.apps.test.example.com downloads http edge/Redirect None
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 YAML 文件,如
external-dns-sample-infoblox.yaml
,该文件定义ExternalDNS
对象:external-dns-sample-infoblox.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,在 Infoblox 上创建
ExternalDNS
资源:oc create -f external-dns-sample-infoblox.yaml
$ oc create -f external-dns-sample-infoblox.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过 Infoblox UI,检查为
console
路由创建的 DNS 记录:- 点 Data Management → DNS → Zones。
- 选择区域名称。
4.9. 在外部 DNS Operator 上配置集群范围代理 复制链接链接已复制到粘贴板!
配置集群范围代理后,Operator Lifecycle Manager (OLM) 会触发对使用 HTTP_PROXY
、HTTPS_PROXY
和 NO_PROXY
环境变量的新内容的所有部署的 Operator 的自动更新。
4.9.1. 信任集群范围代理的证书颁发机构 复制链接链接已复制到粘贴板!
您可以将外部 DNS Operator 配置为信任集群范围代理的证书颁发机构。
流程
运行以下命令,创建配置映射以在
external-dns-operator
命名空间中包含 CA 捆绑包:oc -n external-dns-operator create configmap trusted-ca
$ oc -n external-dns-operator create configmap trusted-ca
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将可信 CA 捆绑包注入配置映射中,请运行以下命令将
config.openshift.io/inject-trusted-cabundle=true
标签添加到配置映射中:oc -n external-dns-operator label cm trusted-ca config.openshift.io/inject-trusted-cabundle=true
$ oc -n external-dns-operator label cm trusted-ca config.openshift.io/inject-trusted-cabundle=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令更新外部 DNS Operator 的订阅:
oc -n external-dns-operator patch subscription external-dns-operator --type='json' -p='[{"op": "add", "path": "/spec/config", "value":{"env":[{"name":"TRUSTED_CA_CONFIGMAP_NAME","value":"trusted-ca"}]}}]'
$ oc -n external-dns-operator patch subscription external-dns-operator --type='json' -p='[{"op": "add", "path": "/spec/config", "value":{"env":[{"name":"TRUSTED_CA_CONFIGMAP_NAME","value":"trusted-ca"}]}}]'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
部署外部 DNS Operator 后,通过运行以下命令验证是否将可信 CA 环境变量作为
trusted-ca
添加至external-dns-operator
部署中:oc -n external-dns-operator exec deploy/external-dns-operator -c external-dns-operator -- printenv TRUSTED_CA_CONFIGMAP_NAME
$ oc -n external-dns-operator exec deploy/external-dns-operator -c external-dns-operator -- printenv TRUSTED_CA_CONFIGMAP_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 5 章 MetalLB Operator 复制链接链接已复制到粘贴板!
5.1. 关于 MetalLB 和 MetalLB Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以将 MetalLB Operator 添加到集群中,以便在将 LoadBalancer
类型服务添加到集群中时,MetalLB 可为该服务添加外部 IP 地址。外部 IP 地址添加到集群的主机网络中。
5.1.1. 何时使用 MetalLB 复制链接链接已复制到粘贴板!
当您有裸机集群或类似裸机的基础架构时,使用 MetalLB 有价值,并且您希望通过外部 IP 地址对应用程序进行容错访问。
您必须配置网络基础架构,以确保外部 IP 地址的网络流量从客户端路由到集群的主机网络。
使用 MetalLB Operator 部署 MetalLB 后,当添加类型为 LoadBalancer
的服务时,MetalLB 提供了一个平台原生负载均衡器。
当外部流量通过 MetalLB LoadBalancer
服务进入 OpenShift Container Platform 集群时,返回到客户端的流量具有负载均衡器的外部 IP 地址作为源 IP。
在 layer2 模式中的 MetalLB 操作通过使用与 IP 故障转移类似的机制提供对故障切换的支持。但是,MetalLB 利用基于 gosip 的协议来识别节点故障实例,而不依赖于虚拟路由器冗余协议 (VRRP) 和 keepalived。当检测到故障转移时,另一个节点会假定领导节点的角色,并且分配了一个 gratuitous ARP 消息来广播此更改。
MetalLB 在 layer3 或边框网关协议 (BGP) 模式下操作,将故障检测委派给网络。OpenShift Container Platform 节点建立连接的 BGP 路由器或路由器将识别任何节点故障并终止到该节点的路由。
最好使用 MetalLB 而不是 IP 故障转移来确保 pod 和服务的高可用性。
5.1.2. MetalLB Operator 自定义资源 复制链接链接已复制到粘贴板!
MetalLB Operator 为以下自定义资源监控自己的命名空间:
MetalLB
-
当您在集群中添加
MetalLB
自定义资源时,MetalLB Operator 会在集群中部署 MetalLB。Operator 只支持单个自定义资源实例。如果删除了实例,Operator 会从集群中删除 MetalLB。 IPAddressPool
MetalLB 需要一个或多个 IP 地址池,您可以在添加类型为
LoadBalancer
的服务时分配给服务。一个IPAddressPool
,包含 IP 地址列表。列表可以是使用范围设置的单个 IP 地址,如 1.1.1.1-1.1.1.1、以 CIDR 表示法指定的范围、指定为起始和结束地址的范围,或者以连字符分隔的、两者的组合。IPAddressPool
需要一个名称。文档使用doc-example
、doc-example-reserved
和doc-example-ipv6
等名称。MetalLB控制器
从IPAddressPool
中的地址池中分配 IP 地址。L2Advertisement
和BGPAdvertisement
自定义资源启用从一个指定池中广告一个给定 IP。您可以使用IPAddressPool
自定义资源中的spec.serviceAllocation
规格将 IP 地址从IPAddressPool
分配给服务和命名空间。注意单个
IPAddressPool
可以被 L2 公告和 BGP 公告来引用。BGPPeer
- BGP peer 自定义资源标识 MetalLB 进行通信的 BGP 路由器、路由器的 AS 数量、MetalLB 的 AS 编号,以及路由公告的自定义。MetalLB 将服务负载平衡器 IP 地址的路由公告给一个或多个 BGP 对等点。
BFDProfile
- BFD 配置集自定义资源可为 BGP peer 配置双向转发检测(BFD)。BFD 提供比 BGP 单独提供的路径故障检测速度。
L2Advertisement
-
L2Advertisement 自定义资源使用 L2 协议广告一个来自
IPAddressPool
的 IP。 BGPAdvertisement
-
BGPAdvertisement 自定义资源使用 BGP 协议广告一个来自
IPAddressPool
的 IP。
在将 MetalLB
自定义资源添加到集群,且 Operator 部署了 MetalLB 后,controller
和 speaker
MetalLB 软件组件将开始运行。
MetalLB 验证所有相关自定义资源。
5.1.3. MetalLB 软件组件 复制链接链接已复制到粘贴板!
安装 MetalLB Operator 时,metallb-operator-controller-manager
部署会启动一个 pod。pod 是 Operator 的实施。pod 监控所有相关资源的更改。
当 Operator 启动 MetalLB 实例时,它会启动一个 controller
部署和一个 speaker
守护进程集。
您可以在 MetalLB 自定义资源中配置部署规格,以管理 controller
和 speaker
pod 如何在集群中部署和运行。有关这些部署规格的更多信息,请参阅附加资源部分。
controller
Operator 会启动部署和单个 pod。当您添加类型为
LoadBalancer
的服务时,Kubernetes 使用controller
从地址池中分配 IP 地址。如果服务失败,请验证controller
pod 日志中有以下条目:输出示例
"event":"ipAllocated","ip":"172.22.0.201","msg":"IP address assigned by controller
"event":"ipAllocated","ip":"172.22.0.201","msg":"IP address assigned by controller
Copy to Clipboard Copied! Toggle word wrap Toggle overflow speaker
Operator 为
speaker
pod 启动守护进程集。默认情况下,在集群的每个节点上启动 pod。您可以在启动MetalLB
时在 MetalLB 自定义资源中指定节点选择器,将 pod 限制到特定的节点。如果controller
为服务分配了 IP 地址,并且服务仍不可用,请阅读speaker
pod 日志。如果speaker
pod 不可用,请运行oc describe pod -n
命令。对于第 2 层模式,
控制器
为服务分配 IP 地址后,speaker
pod 使用一种算法来确定哪些speaker
pod 将宣布负载均衡器 IP 地址。该算法涉及对节点名称和负载均衡器 IP 地址进行哈希处理。如需更多信息,请参阅"MetalLB 和外部流量策略"。speaker
使用地址解析协议 (ARP) 来宣布 IPv4 地址和邻居发现协议 (NDP) 来宣布 IPv6 地址。
对于 Border Gateway Protocol (BGP) 模式,controller
为服务分配 IP 地址后,每个 speaker
pod 为其 BGP 对等点公告负载均衡器 IP 地址。您可以配置节点在 BGP 对等点上启动 BGP 会话。
对负载均衡器 IP 地址的请求会路由到具有声明 IP 地址的 speaker
的节点。节点接收数据包后,服务代理会将数据包路由到该服务的端点。在最佳情况下,端点可以位于同一节点上,也可以位于另一节点上。每次建立连接时,服务代理都会选择一个端点。
5.1.4. MetalLB 和外部流量策略 复制链接链接已复制到粘贴板!
使用第 2 层模式时,集群中的一个节点会接收服务 IP 地址的所有流量。使用 BGP 模式时,主机网络上的路由器会打开与集群中其中一个节点的连接,用于新客户端连接。集群在进入节点后如何处理流量受外部流量策略的影响。
cluster
这是
spec.externalTrafficPolicy
的默认值。使用
cluster
流量策略时,节点接收流量后,服务代理会将流量分发到服务中的所有容器集。此策略在 pod 之间提供统一流量分布,但它会模糊客户端 IP 地址,并可能会在 pod 中显示流量源自节点而不是客户端的应用。local
采用
local
流量策略时,节点接收流量后,服务代理仅将流量发送到同一节点上的 pod。例如,如果节点上的speaker
pod 宣布外部服务 IP,则所有流量都发送到节点 A。流量进入节点 A 后,服务代理仅将流量发送到节点 A 上的服务的 pod。位于其他节点上的服务的 Pod 不会从节点 A 接收任何流量。在需要故障转移时,其他节点上的服务的 Pod 充当副本。此策略不会影响客户端 IP 地址。应用容器集可以确定来自传入连接的客户端 IP 地址。
在 BGP 模式中配置外部流量策略时,以下信息非常重要。
虽然 MetalLB 公告来自所有有资格的节点的负载均衡器 IP 地址,但可能会限制在路由器的容量下,以建立同等成本多路径(ECMP)路由。如果广告 IP 的节点数量大于路由器的 ECMP 组的限制,路由器将使用比广告 IP 的节点数量少的节点。
例如,如果外部流量策略设置为 local
,且路由器将 ECMP 组限制设置为 16,实施 LoadBalancer 服务的 pod 部署在 30 个节点上,这会导致在 14 个节点上部署的 pod 不接收任何流量。在这种情况下,最好将该服务的外部流量策略设置为 cluster
。
5.1.5. 第 2 层模式的 MetalLB 概念 复制链接链接已复制到粘贴板!
在第 2 层模式中,一个节点上的 speaker
pod 向主机网络宣布服务的外部 IP 地址。从网络的角度来看,节点似乎有多个 IP 地址分配给网络接口。
在第 2 层模式中,MetalLB 依赖于 ARP 和 NDP。这些协议在特定子网中实施本地地址解析。在这种情况下,客户端必须能够访问由 MetalLB 分配的 VIP,它与节点位于同一个子网中,以便 MetalLB 正常工作。
speaker
pod 响应 IPv4 服务和 IPv6 的 NDP 请求。
在第 2 层模式中,服务 IP 地址的所有流量都通过一个节点进行路由。在流量进入节点后,CNI 网络供应商的服务代理会将流量分发到该服务的所有 pod。
由于服务的所有流量都通过第 2 层模式中的单一节点进入,所以严格意义上,MetalLB 不会为第 2 层实施负载平衡器。相反,MetalLB 为第 2 层实施故障转移机制,以便在 speaker
pod 不可用时,不同节点上的 speaker
pod 可以宣布服务 IP 地址。
当节点不可用时,自动故障转移。其他节点上的 speaker
pod 检测到节点不可用,新的 speaker
pod 和节点从故障节点上拥有服务 IP 地址的所有权。
上图显示了与 MetalLB 相关的以下概念:
-
应用程序可以通过在
172.130.0.0/16
子网上具有集群 IP 的服务获取。该 IP 地址可以从集群内部访问。服务也有一个外部 IP 地址,用于分配给服务的 MetalLB,即192.168.100.200
。 - 节点 1 和 3 具有应用程序的 pod。
-
speaker
守护进程集在每个节点上运行一个 pod。MetalLB Operator 启动这些 pod。 -
每个
speaker
pod 都是主机网络的 pod。容器集的 IP 地址与主机网络上节点的 IP 地址相同。 -
节点 1 上的
speaker
pod 使用 ARP 声明服务的外部 IP 地址192.168.100.200
。声明外部 IP 地址的speaker
pod 必须与服务的端点位于同一个节点上,端点必须为Ready
条件。 客户端流量路由到主机网络,并连接到
192.168.100.200
IP 地址。在流量进入节点后,服务代理会根据您为服务设置的外部流量策略,将流量发送到同一节点上的应用 pod 或其他节点。-
如果服务的外部流量策略设置为
cluster
,则会从运行speaker
pod 的节点选择广告192.168.100.200
负载均衡器 IP 地址的节点。只有该节点才能接收该服务的流量。 -
如果服务的外部流量策略设置为
local
,则会从运行speaker
pod 的节点以及至少一个服务的端点选择广告192.168.100.200
负载均衡器 IP 地址的节点。只有该节点才能接收该服务的流量。在上图中,节点 1 或 3 将广告192.168.100.200
。
-
如果服务的外部流量策略设置为
-
如果节点 1 不可用,则外部 IP 地址将故障转移到另一节点。在具有应用 pod 和服务端点实例的另一个节点上,
speaker
Pod 开始宣布外部 IP 地址192.168.100.200
,新节点接收客户端流量。在图中,唯一的候选项是节点 3。
5.1.6. BGP 模式的 MetalLB 概念 复制链接链接已复制到粘贴板!
在 BGP 模式中,默认情况下每个 speaker
pod 都会向每个 BGP 对等广告一个服务的负载均衡器 IP 地址。也可以通过添加可选 BGP 对等列表来广告来自给定池的 IP 地址到特定的对等池。BGP 对等点是配置为使用 BGP 协议的网络路由器。当路由器收到负载均衡器 IP 地址的流量时,路由器会选择一个带有公告 IP 地址的 speaker
pod 的节点。路由器将流量发送到该节点。在流量进入节点后,CNI 网络插件的服务代理会将流量分发到该服务的所有 pod。
与集群节点相同的第 2 层网络段中直接连接的路由器可以配置为 BGP 对等点。如果直接连接的路由器没有配置为 BGP peer,您需要配置网络,以便负载均衡器 IP 地址的数据包在 BGP 对等机和运行 speaker
Pod 的集群节点之间路由。
每次路由器接收负载均衡器 IP 地址的新流量时,它会创建一个新的与节点的连接。每个路由器制造商都有一个特定于实施的算法,用于选择要启动连接的节点。但是,算法通常设计为在可用节点之间分发流量,以平衡网络负载。
如果节点不可用,路由器会与具有 speaker
pod 的另一个节点发起一个新的连接,以公告负载均衡器 IP 地址。
图 5.1. BGP 模式的 MetalLB 拓扑图
上图显示了与 MetalLB 相关的以下概念:
-
应用通过
172.130.0.0/16
子网上具有 IPv4 集群 IP 的服务进行访问。该 IP 地址可以从集群内部访问。该服务也有一个外部 IP 地址,MetalLB 分配到该服务203.0.113.200
。 - 节点 2 和 3 具有该应用的 pod。
-
speaker
守护进程集在每个节点上运行一个 pod。MetalLB Operator 启动这些 pod。您可以配置 MetalLB 来指定运行speaker
pod 的节点。 -
每个
speaker
pod 都是主机网络的 pod。容器集的 IP 地址与主机网络上节点的 IP 地址相同。 -
每个
speaker
pod 启动一个 BGP 会话,其中包含所有 BGP 对等点,并将负载均衡器 IP 地址或聚合路由公告给 BGP 对等点。speaker
pod 公告它们是 Autonomous System 65010 的一部分。图显示路由器 R1 作为同一自主系统内的 BGP peer。但是,您可以将 MetalLB 配置为与属于其他自主系统的同行启动 BGP 会话。 具有
speaker
pod 的所有节点(公告负载均衡器 IP 地址)都可以接收该服务的流量。-
如果服务的外部流量策略设置为
cluster
,则运行 speaker pod 的所有节点都会广告203.0.113.200
负载平衡器 IP 地址,具有speaker
pod 的所有节点都可以接收该服务的流量。只有外部流量策略设为 cluster 时,主机前缀才会广告给路由器对等点。 -
如果服务的外部流量策略设置为
local
,则运行speaker
Pod 的所有节点都会运行,并且至少有一个运行的服务端点可能会广告203.0.113.200
负载均衡器 IP 地址。只有这些节点才能接收该服务的流量。在上图中,节点 2 和 3 将公告203.0.113.200
。
-
如果服务的外部流量策略设置为
-
您可以在添加 BGP peer 自定义资源时指定节点选择器,将 MetalLB 配置为通过指定带有特定 BGP peer 的节点选择器来控制哪些
speaker
pod 启动 BGP 对等点。 - 任何配置为使用 BGP 的路由器(如 R1)都可以设置为 BGP 同级服务器。
- 客户端流量路由到主机网络上的其中一个节点。在流量进入节点后,服务代理会根据您为服务设置的外部流量策略,将流量发送到同一节点上的应用 pod 或其他节点。
- 如果节点不可用,路由器检测到失败,并启动与另一节点的新连接。您可以将 MetalLB 配置为将双向转发检测(BFD)配置集用于 BGP 对等点。BFD 提供更快的链路失败检测,以便路由器可以比没有 BFD 的情况下启动新连接。
5.1.7. 限制和限制 复制链接链接已复制到粘贴板!
5.1.7.1. MetalLB 的基础架构注意事项 复制链接链接已复制到粘贴板!
MetalLB 主要用于内部的裸机安装,因为这些安装不包含原生负载平衡器功能。除了裸机安装外,在有些基础架构上安装 OpenShift Container Platform 可能不包括原生负载均衡器功能。例如,以下基础架构可从添加 MetalLB Operator 中受益:
- 裸机
- VMware vSphere
- IBM Z® 和 IBM® LinuxONE
- IBM Z® and IBM® LinuxONE for Red Hat Enterprise Linux (RHEL) KVM
- IBM Power®
5.1.7.2. 第 2 层模式的限制 复制链接链接已复制到粘贴板!
5.1.7.2.1. 单节点瓶颈 复制链接链接已复制到粘贴板!
MetalLB 通过单一节点路由服务的所有流量,该节点可能会成为瓶颈并限制性能。
第 2 层模式将服务的入口带宽限制为单个节点的带宽。这是使用 ARP 和 NDP 定向流量的一个根本限制。
5.1.7.2.2. 延迟故障转移性能 复制链接链接已复制到粘贴板!
节点之间的故障转移取决于客户端的合作。发生故障转移时,MetalLB 发送粒度 ARP 数据包来通知客户端与服务 IP 关联的 MAC 地址已更改。
大多数客户端操作系统正确处理细粒度 ARP 数据包,并及时更新其邻居缓存。当客户端快速更新其缓存时,故障转移将在几秒钟内完成。客户端通常在 10 秒内故障转移到新节点。但是,一些客户端操作系统或者根本不处理饱和的 ARP 数据包,或者存在延迟缓存更新的过时实施。
Windows、macOS 和 Linux 等常见操作系统的最新版本正确实现了第 2 层故障转移。除了较旧和不太常见的客户端操作系统外,预计不会出现故障转移较慢的问题。
为最大程度减轻计划内故障转移对过时客户端的影响,在颠倒领导地位后让旧节点保持运行几分钟。旧节点可以继续转发过期客户端的流量,直到其缓存刷新。
在计划外故障转移期间,服务 IP 无法访问,直到过期的客户端刷新其缓存条目为止。
5.1.7.2.3. 额外网络和 MetalLB 无法使用相同的网络 复制链接链接已复制到粘贴板!
将相同的 VLAN 用于 MetalLB 和源 pod 上设置的额外网络接口可能会导致连接失败。当 MetalLB IP 和源 pod 驻留在同一节点上时,会出现这种情况。
为了避免连接失败,请将 MetalLB IP 放在源 pod 所在的不同子网中。此配置可确保来自源 pod 的流量将采用默认网关。因此,流量可以使用 OVN 覆盖网络有效地到达其目的地,确保连接功能如预期一样。
5.1.7.3. BGP 模式限制 复制链接链接已复制到粘贴板!
5.1.7.3.1. 节点故障可能会破坏所有活跃的连接 复制链接链接已复制到粘贴板!
MetalLB 共享一个限制,这是基于 BGP 的负载平衡。当 BGP 会话终止时,如节点失败或者 speaker
pod 重启时,会话终止可能会导致重置所有活跃的连接。最终用户可以 通过 peer 消息完成连接重置
。
所终止的 BGP 会话的结果是特定于路由器制造商的实现。但是,您可以预测 speaker
pod 数量的变化会影响 BGP 会话的数量,并且与 BGP 对等点的活动连接将中断。
为了避免或降低服务中断的可能性,您可以在添加 BGP 对等点时指定节点选择器。通过限制启动 BGP 会话的节点数量,没有 BGP 会话的节点出现错误不会影响到该服务的连接。
5.1.7.3.2. 只支持单个 ASN 和单个路由器 ID 复制链接链接已复制到粘贴板!
当您添加 BGP peer 自定义资源时,您可以指定 spec.myASN
字段来识别 MetalLB 所属的 Autonomous System Number(ASN)。OpenShift Container Platform 使用带有 MetalLB 的 BGP 实施,它要求 MetalLB 属于单个 ASN。如果您试图添加 BGP peer 并为 spec.myASN
指定与现有的 BGP peer 自定义资源不同的值,您会收到一个错误。
同样,当您添加 BGP peer 自定义资源时,spec.routerID
字段是可选的。如果为此字段指定一个值,您必须为要添加的所有其他 BGP peer 自定义资源指定相同的值。
支持单个 ASN 和单个路由器 ID 的限制与支持的 MetalLB 实施不同。
5.2. 安装 MetalLB Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以添加 MetalLB Operator,以便 Operator 可以管理集群中的 MetalLB 实例的生命周期。
MetalLB 和 IP 故障转移不兼容。如果您为集群配置了 IP 故障转移,请在安装 Operator 前执行删除 IP 故障切换 的步骤。
5.2.1. 使用 Web 控制台从 OperatorHub 安装 MetalLB Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 OpenShift Container Platform Web 控制台安装 MetalLB Operator。
先决条件
-
以具有
cluster-admin
特权的用户身份登录。
流程
- 在 OpenShift Container Platform Web 控制台中导航至 Operators → OperatorHub。
在 Filter by keyword 框中输入关键字,或滚动以查找您想要的 Operator。例如,键入
metallb
来查找 MetalLB Operator。您还可以根据基础架构功能过滤选项。例如,如果您希望 Operator 在断开连接的环境中工作,请选择 Disconnected。
- 在 Install Operator 页面中,接受默认值并点 Install。
验证
确认安装成功:
- 导航到 Operators → Installed Operators 页面。
-
检查 Operator 是否安装在
openshift-operators
命名空间中,其状态是否为Succeeded
。
如果 Operator 没有成功安装,请检查 Operator 的状态并查看日志:
-
导航到 Operators → Installed Operators 页面,并检查
Status
列中是否有任何错误或故障。 -
导航到 Workloads → Pods 页面,并检查
openshift-operators
项目中报告问题的 pod 的日志。
-
导航到 Operators → Installed Operators 页面,并检查
5.2.2. 使用 CLI 从 OperatorHub 安装 复制链接链接已复制到粘贴板!
您可以使用 CLI 从 OperatorHub 安装 Operator,而不必使用 OpenShift Container Platform Web 控制台。您可以使用 OpenShift CLI(oc
)安装 MetalLB Operator。
建议您在使用 metallb-system
命名空间中安装 Operator 的 CLI 时使用。
先决条件
- 在裸机硬件上安装的集群。
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
输入以下命令为 MetalLB Operator 创建命名空间:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在命名空间中创建 Operator 组自定义资源(CR):
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确认 Operator 组已安装在命名空间中:
oc get operatorgroup -n metallb-system
$ oc get operatorgroup -n metallb-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME AGE metallb-operator 14m
NAME AGE metallb-operator 14m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
Subscription
CR:定义
Subscription
CR 并保存 YAML 文件,如metallb-sub.yaml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 您必须指定
redhat-operators
值。
要创建
Subscription
CR,请运行以下命令:oc create -f metallb-sub.yaml
$ oc create -f metallb-sub.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
可选: 要确保 BGP 和 BFD 指标出现在 Prometheus 中,您可以使用以下命令标记命名空间:
oc label ns metallb-system "openshift.io/cluster-monitoring=true"
$ oc label ns metallb-system "openshift.io/cluster-monitoring=true"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证步骤假定 metallb-system
命名空间中安装了 MetalLB Operator。
确认安装计划位于命名空间中:
oc get installplan -n metallb-system
$ oc get installplan -n metallb-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CSV APPROVAL APPROVED install-wzg94 metallb-operator.4.17.0-nnnnnnnnnnnn Automatic true
NAME CSV APPROVAL APPROVED install-wzg94 metallb-operator.4.17.0-nnnnnnnnnnnn Automatic true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意安装 Operator 可能需要几秒钟。
要验证是否已安装 Operator,请输入以下命令,然后检查 Operator 的输出显示
Succeeded
:oc get clusterserviceversion -n metallb-system \ -o custom-columns=Name:.metadata.name,Phase:.status.phase
$ oc get clusterserviceversion -n metallb-system \ -o custom-columns=Name:.metadata.name,Phase:.status.phase
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.3. 在集群中启动 MetalLB 复制链接链接已复制到粘贴板!
安装 Operator 后,您需要配置 MetalLB 自定义资源的单一实例。配置自定义资源后,Operator 会在集群中启动 MetalLB。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。 - 安装 MetalLB Operator。
流程
此流程假设 MetalLB Operator 已安装在 metallb-system
命名空间中。如果使用 Web 控制台安装,请替换命名空间的 openshift-operators
。
创建 MetalLB 自定义资源的单一实例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
确认 MetalLB 控制器的部署和 MetalLB speaker 的守护进程集正在运行。
验证控制器的部署是否正在运行:
oc get deployment -n metallb-system controller
$ oc get deployment -n metallb-system controller
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY UP-TO-DATE AVAILABLE AGE controller 1/1 1 1 11m
NAME READY UP-TO-DATE AVAILABLE AGE controller 1/1 1 1 11m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证发言人的守护进程集是否正在运行:
oc get daemonset -n metallb-system speaker
$ oc get daemonset -n metallb-system speaker
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE speaker 6 6 6 6 6 kubernetes.io/os=linux 18m
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE speaker 6 6 6 6 6 kubernetes.io/os=linux 18m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例输出显示 6 个 speaker Pod。集群中的 speaker pod 数量可能与示例输出不同。确保输出指示集群中每个节点有一个容器集。
5.2.4. MetalLB 的部署规格 复制链接链接已复制到粘贴板!
当使用 MetalLB 自定义资源启动 MetalLB
实例时,您可以在 MetalLB
自定义资源中配置部署规格,以管理 controller
或 speaker
pod 如何在集群中部署并运行。使用这些部署规格来管理以下任务:
- 为 MetalLB pod 部署选择节点。
- 使用 pod 优先级和 pod 关联性来管理调度。
- 为 MetalLB pod 分配 CPU 限值。
- 为 MetalLB pod 分配容器 RuntimeClass。
- 为 MetalLB pod 分配元数据。
5.2.4.1. 将 speaker pod 限制到特定的节点 复制链接链接已复制到粘贴板!
默认情况下,当使用 MetalLB Operator 启动 MetalLB 时,Operator 会在集群中的每个节点上启动 speaker
pod 的实例。只有具有 speaker
pod 的节点可以公告负载均衡器 IP 地址。您可以使用节点选择器配置 MetalLB
自定义资源,以指定运行 speaker
pod 的节点。
将 speaker
Pod 限制到特定的节点的最常见原因是,确保只有具有特定网络上网络接口的节点公告负载均衡器 IP 地址。只有具有正在运行的 speaker
pod 的节点才会公告为负载均衡器 IP 地址的目的地。
如果将 speaker
的 pod 限制到特定的节点,并为服务的外部流量策略指定 local
,则必须确保该服务的应用程序 pod 部署到同一节点上。
将 speaker pod 限制为 worker 节点的配置示例
使用 spec.nodeSelector
字段应用清单后,您可以检查 Operator 使用 oc get daemonset -n metallb-system speaker
命令部署的 pod 数量。同样,您可以使用 oc get nodes -l node-role.kubernetes.io/worker=
等命令显示与标签匹配的节点。
您可以选择允许节点使用关联性规则控制哪些 speaker pod 应该或不应该调度到节点上。您还可以通过应用容限列表来限制这些 pod。如需有关关联性规则、污点和容限的更多信息,请参阅其他资源。
5.2.4.2. 在 MetalLB 部署中配置 pod 优先级和 pod 关联性 复制链接链接已复制到粘贴板!
您可以通过配置 MetalLB
自定义资源,选择将 pod 优先级和 pod 关联性规则分配给 controller
和 speaker
pod。pod 优先级指示节点上 pod 的相对重要性,并根据这个优先级调度 pod。在 controller
或 speaker
pod 上设置高优先级,以确保在节点上的其他 pod 上调度优先级。
Pod 关联性管理 pod 间的关系。将 pod 关联性分配给 controller
或 speaker
pod,以控制调度程序将 pod 放置到 pod 关系的节点上。例如,您可以使用 pod 关联性规则来确保某些 pod 位于同一节点或节点上,这有助于提高网络通信并减少这些组件之间的延迟。
先决条件
-
您以具有
cluster-admin
权限的用户身份登录。 - 已安装 MetalLB Operator。
- 已在集群中启动 MetalLB Operator。
流程
创建
PriorityClass
自定义资源,如myPriorityClass.yaml
,以配置优先级级别。这个示例定义了名为high-priority
的PriorityClass
,值设为1000000
。与具有较低优先级类的 pod 相比,在调度过程中分配此优先级类的 Pod 被视为优先级更高:apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: high-priority value: 1000000
apiVersion: scheduling.k8s.io/v1 kind: PriorityClass metadata: name: high-priority value: 1000000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
PriorityClass
自定义资源配置:oc apply -f myPriorityClass.yaml
$ oc apply -f myPriorityClass.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
MetalLB
自定义资源,如MetalLBPodConfig.yaml
,以指定priorityClassName
和podAffinity
值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
MetalLB
自定义资源配置:oc apply -f MetalLBPodConfig.yaml
$ oc apply -f MetalLBPodConfig.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要在
metallb-system
命名空间中查看分配给 pod 的优先级类,请运行以下命令:oc get pods -n metallb-system -o custom-columns=NAME:.metadata.name,PRIORITY:.spec.priorityClassName
$ oc get pods -n metallb-system -o custom-columns=NAME:.metadata.name,PRIORITY:.spec.priorityClassName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME PRIORITY controller-584f5c8cd8-5zbvg high-priority metallb-operator-controller-manager-9c8d9985-szkqg <none> metallb-operator-webhook-server-c895594d4-shjgx <none> speaker-dddf7 high-priority
NAME PRIORITY controller-584f5c8cd8-5zbvg high-priority metallb-operator-controller-manager-9c8d9985-szkqg <none> metallb-operator-webhook-server-c895594d4-shjgx <none> speaker-dddf7 high-priority
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要验证调度程序是否根据 pod 关联性规则放置 pod,请运行以下命令来查看 pod 的节点或节点的元数据:
oc get pod -o=custom-columns=NODE:.spec.nodeName,NAME:.metadata.name -n metallb-system
$ oc get pod -o=custom-columns=NODE:.spec.nodeName,NAME:.metadata.name -n metallb-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.4.3. 在 MetalLB 部署中配置 pod CPU 限制 复制链接链接已复制到粘贴板!
您可以通过配置 MetalLB
自定义资源(可选)将 pod CPU 限值分配给 controller
和 speaker
pod。为 controller
或 speaker
pod 定义 CPU 限制可帮助您管理节点上的计算资源。这样可确保节点上的所有 pod 具有必要的计算资源来管理工作负载和集群内务。
先决条件
-
您以具有
cluster-admin
权限的用户身份登录。 - 已安装 MetalLB Operator。
流程
创建
MetalLB
自定义资源文件,如CPULimits.yaml
,以指定controller
和speaker
pod 的cpu
值:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
MetalLB
自定义资源配置:oc apply -f CPULimits.yaml
$ oc apply -f CPULimits.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要查看 pod 的计算资源,请运行以下命令,将
<pod_name>
替换为您的目标 pod:oc describe pod <pod_name>
$ oc describe pod <pod_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.6. 后续步骤 复制链接链接已复制到粘贴板!
5.3. 升级 MetalLB Operator 复制链接链接已复制到粘贴板!
默认情况下,将命名空间订阅到 metallb-system
的 Subscription
自定义资源 (CR) 会自动将 installPlanApproval
参数设置为 Automatic
。这意味着,当红帽提供的 Operator 目录包含 MetalLB Operator 的较新版本时,MetalLB Operator 会自动升级。
如果需要手动控制 MetalLB Operator 升级,请将 installPlanApproval
参数设置为 Manual
。
5.3.1. 手动升级 MetalLB Operator 复制链接链接已复制到粘贴板!
要手动控制升级 MetalLB Operator,您必须编辑将命名空间订阅到 metallb-system
的 Subscription
自定义资源(CR)。Subscription
CR 作为 Operator 安装的一部分创建,且 CR 默认将 installPlanApproval
参数设置为 Automatic
。
先决条件
- 将集群更新至最新的 z-stream 版本。
- 使用 OperatorHub 安装 MetalLB Operator。
-
使用具有
cluster-admin
角色的用户访问集群。
流程
输入以下命令在
metallb-system
命名空间中获取metallb-operator
订阅的 YAML 定义:oc -n metallb-system get subscription metallb-operator -o yaml
$ oc -n metallb-system get subscription metallb-operator -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过将
installPlanApproval
参数设置为Manual
来编辑Subscription
CR:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令查找 MetalLB Operator 的最新 OpenShift Container Platform 4.17 版本:
oc -n metallb-system get csv
$ oc -n metallb-system get csv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令检查命名空间中存在的安装计划。
oc -n metallb-system get installplan
$ oc -n metallb-system get installplan
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 install-tsz2g 显示为手动安装计划的输出示例
NAME CSV APPROVAL APPROVED install-shpmd metallb-operator.v4.17.0-202502261233 Automatic true install-tsz2g metallb-operator.v4.17.0-202503102139 Manual false
NAME CSV APPROVAL APPROVED install-shpmd metallb-operator.v4.17.0-202502261233 Automatic true install-tsz2g metallb-operator.v4.17.0-202503102139 Manual false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来编辑命名空间中存在的安装计划。确保将
<name_of_installplan>
替换为安装计划的名称,如install-tsz2g
。oc edit installplan <name_of_installplan> -n metallb-system
$ oc edit installplan <name_of_installplan> -n metallb-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在编辑器中打开安装计划后,将
spec.approval
参数设置为Manual
,并将spec.approved
参数设置为true
。注意编辑安装计划后,升级操作会启动。如果在升级操作过程中输入
oc -n metallb-system get csv
命令,则输出可能会显示Replacing
或Pending
状态。
验证
要验证 Operator 是否已升级,请输入以下命令,然后检查 Operator 的输出显示
Succeeded
:oc -n metallb-system get csv
$ oc -n metallb-system get csv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3.2. 其他资源 复制链接链接已复制到粘贴板!
Cluster Network Operator (CNO)在 OpenShift Container Platform 集群上部署和管理集群网络组件,包括在安装过程中为集群选择的 Container Network Interface (CNI) 网络插件。
6.1. Cluster Network Operator 复制链接链接已复制到粘贴板!
Cluster Network Operator 从 operator.openshift.io
API 组实现 network
API。Operator 通过使用守护进程集部署 OVN-Kubernetes 网络插件,或部署您在集群安装过程中选择的网络供应商插件。
流程
Cluster Network Operator 在安装过程中被部署为一个 Kubernetes 部署
。
运行以下命令,以查看部署状态:
oc get -n openshift-network-operator deployment/network-operator
$ oc get -n openshift-network-operator deployment/network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY UP-TO-DATE AVAILABLE AGE network-operator 1/1 1 1 56m
NAME READY UP-TO-DATE AVAILABLE AGE network-operator 1/1 1 1 56m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,以查看 Cluster Network Operator 的状态:
oc get clusteroperator/network
$ oc get clusteroperator/network
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE network 4.16.1 True False False 50m
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE network 4.16.1 True False False 50m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下字段提供有关 Operator 状态的信息:
AVAILABLE
、Progressing
和DEGRADED
。当 Cluster Network Operator 报告可用状态条件时,AVAILABLE
字段为True
。
6.2. 查看集群网络配置 复制链接链接已复制到粘贴板!
每个 OpenShift Container Platform 新安装都有一个名为 cluster
的 network.config
对象。
6.3. 查看 Cluster Network Operator 状态 复制链接链接已复制到粘贴板!
您可以使用 oc describe
命令来检查状态并查看 Cluster Network Operator 的详情。
流程
运行以下命令,以查看 Cluster Network Operator 的状态:
oc describe clusteroperators/network
$ oc describe clusteroperators/network
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4. 全局启用 IP 转发 复制链接链接已复制到粘贴板!
从 OpenShift Container Platform 4.14 开始,基于 OVN-Kubernetes 的集群部署禁用了全局 IP 地址转发,以防止集群管理员对作为路由器的节点造成不必要的影响。但是,在某些情况下,管理员希望转发一个新的配置参数 ipForwarding
来允许转发所有 IP 流量。
要为 OVN-Kubernetes 受管接口上的所有流量重新启用 IP 转发,请按照以下流程将 Cluster Network Operator 中的 gatewayConfig.ipForwarding
规格设置为 Global
:
流程
运行以下命令备份现有网络配置:
oc get network.operator cluster -o yaml > network-config-backup.yaml
$ oc get network.operator cluster -o yaml > network-config-backup.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令修改现有的网络配置:
oc edit network.operator cluster
$ oc edit network.operator cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
spec
中添加或更新以下块,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存并关闭该文件。
应用更改后,OpenShift Cluster Network Operator (CNO) 在集群中应用更新。您可以使用以下命令监控进度:
oc get clusteroperators network
$ oc get clusteroperators network
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 状态最终应报告为
Available
,Progressing=False
, 和Degraded=False
。另外,您可以运行以下命令来全局启用 IP 转发:
oc patch network.operator cluster -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipForwarding": "Global"}}}}}' --type=merge
$ oc patch network.operator cluster -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipForwarding": "Global"}}}}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意当您要恢复此更改时,此参数的其他有效选项为
Restricted
。restricted
是默认设置,并且禁用设置全局 IP 地址转发。
6.5. 查看 Cluster Network Operator 日志 复制链接链接已复制到粘贴板!
您可以使用 oc logs
命令来查看 Cluster Network Operator 日志。
流程
运行以下命令,以查看 Cluster Network Operator 的日志:
oc logs --namespace=openshift-network-operator deployment/network-operator
$ oc logs --namespace=openshift-network-operator deployment/network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.6. Cluster Network Operator 配置 复制链接链接已复制到粘贴板!
集群网络的配置作为 Cluster Network Operator(CNO)配置的一部分指定,并存储在名为 cluster
的自定义资源(CR)对象中。CR 指定 operator.openshift.io
API 组中的 Network
API 的字段。
CNO 配置在集群安装过程中从 Network.config.openshift.io
API 组中的 Network
API 继承以下字段:
clusterNetwork
- 从中分配 Pod IP 地址的 IP 地址池。
serviceNetwork
- 服务的 IP 地址池.
defaultNetwork.type
-
集群网络插件。
OVNKubernetes
是安装期间唯一支持的插件。
在集群安装后,您只能修改 clusterNetwork
IP 地址范围。
您可以通过在名为 cluster
的 CNO 对象中设置 defaultNetwork
对象的字段来为集群指定集群网络插件配置。
6.6.1. Cluster Network Operator 配置对象 复制链接链接已复制到粘贴板!
下表中描述了 Cluster Network Operator(CNO)的字段:
字段 | 类型 | 描述 |
---|---|---|
|
|
CNO 对象的名称。这个名称始终是 |
|
| 用于指定从哪些 IP 地址块分配 Pod IP 地址以及集群中每个节点的子网前缀长度的列表。例如: |
|
| 服务的 IP 地址块。OVN-Kubernetes 网络插件只支持服务网络的一个 IP 地址块。例如: spec: serviceNetwork: - 172.30.0.0/14
此值是只读的,在集群安装过程中从名为 |
|
| 为集群网络配置网络插件。 |
|
| 此对象的字段指定 kube-proxy 配置。如果使用 OVN-Kubernetes 集群网络供应商,则 kube-proxy 配置不会起作用。 |
对于需要在多个网络间部署对象的集群,请确保为 install-config.yaml
文件中定义的每种网络类型指定与 clusterNetwork.hostPrefix
参数相同的值。为每个 clusterNetwork.hostPrefix
参数设置不同的值可能会影响 OVN-Kubernetes 网络插件,其中插件无法有效地在不同节点间路由对象流量。
6.6.1.1. defaultNetwork 对象配置 复制链接链接已复制到粘贴板!
下表列出了 defaultNetwork
对象的值:
字段 | 类型 | 描述 |
---|---|---|
|
|
注意 OpenShift Container Platform 默认使用 OVN-Kubernetes 网络插件。OpenShift SDN 不再作为新集群的安装选择提供。 |
|
| 此对象仅对 OVN-Kubernetes 网络插件有效。 |
6.6.1.1.1. 配置 OVN-Kubernetes 网络插件 复制链接链接已复制到粘贴板!
下表描述了 OVN-Kubernetes 网络插件的配置字段:
字段 | 类型 | 描述 |
---|---|---|
|
| Geneve(通用网络虚拟化封装)覆盖网络的最大传输单元(MTU)。这个值通常是自动配置的。 |
|
| Geneve 覆盖网络的 UDP 端口。 |
|
| 用于描述集群的 IPsec 模式的对象。 |
|
| 为 IPv4 设置指定配置对象。 |
|
| 为 IPv6 设置指定配置对象。 |
|
| 指定用于自定义网络策略审计日志的配置对象。如果未设置,则使用默认的审计日志设置。 |
|
|
可选:指定一个配置对象来自定义如何将出口流量发送到节点网关。有效值为 注意 在迁移出口流量时,工作负载和服务流量会受到一定影响,直到 Cluster Network Operator (CNO) 成功推出更改。 |
字段 | 类型 | 描述 |
---|---|---|
| 字符串 |
如果您的现有网络基础架构与
默认值为 |
| 字符串 |
如果您的现有网络基础架构与
默认值为 |
字段 | 类型 | 描述 |
---|---|---|
| 字符串 |
如果您的现有网络基础架构与
默认值为 |
| 字符串 |
如果您的现有网络基础架构与
默认值为 |
字段 | 类型 | 描述 |
---|---|---|
| 整数 |
每个节点每秒生成一次的消息数量上限。默认值为每秒 |
| 整数 |
审计日志的最大大小,以字节为单位。默认值为 |
| 整数 | 保留的日志文件的最大数量。 |
| 字符串 | 以下附加审计日志目标之一:
|
| 字符串 |
syslog 工具,如 as |
字段 | 类型 | 描述 |
---|---|---|
|
|
将此字段设置为
此字段与 Open vSwitch 硬件卸载功能有交互。如果将此字段设置为 |
|
|
您可以使用 注意
|
|
| 可选:指定一个对象来为主机配置内部 OVN-Kubernetes 伪装地址,以服务 IPv4 地址的流量。 |
|
| 可选:指定一个对象来为主机配置内部 OVN-Kubernetes 伪装地址,以服务 IPv6 地址的流量。 |
字段 | 类型 | 描述 |
---|---|---|
|
|
内部使用的伪装 IPv4 地址,以启用主机服务流量。主机配置了这些 IP 地址和共享网关网桥接口。默认值为 重要
对于 OpenShift Container Platform 4.17 及更新的版本,集群使用 |
字段 | 类型 | 描述 |
---|---|---|
|
|
内部使用的伪装 IPv6 地址,以启用主机服务流量。主机配置了这些 IP 地址和共享网关网桥接口。默认值为 重要
对于 OpenShift Container Platform 4.17 及更新的版本,集群使用 |
字段 | 类型 | 描述 |
---|---|---|
|
| 指定 IPsec 实现的行为。必须是以下值之一:
|
您只能在集群安装过程中更改集群网络插件的配置,但 gatewayConfig
字段可作为安装后活动在运行时更改。
启用 IPSec 的 OVN-Kubernetes 配置示例
6.6.2. Cluster Network Operator 配置示例 复制链接链接已复制到粘贴板!
以下示例中指定了完整的 CNO 配置:
Cluster Network Operator 对象示例
第 7 章 OpenShift Container Platform 中的 DNS Operator 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform 中,DNS Operator 部署和管理 CoreDNS 实例,为集群中的 pod 提供名称解析服务,启用基于 DNS 的 Kubernetes 服务发现,并解析内部 cluster.local
名称。
7.1. 检查 DNS Operator 的状态 复制链接链接已复制到粘贴板!
DNS Operator 从 operator.openshift.io
API 组实现 dns
API。Operator 使用守护进程集部署 CoreDNS,为守护进程集创建一个服务,并将 kubelet 配置为指示 pod 使用 CoreDNS 服务 IP 地址进行名称解析。
流程
在安装过程中使用 Deployment
对象部署 DNS Operator。
使用
oc get
命令查看部署状态:oc get -n openshift-dns-operator deployment/dns-operator
$ oc get -n openshift-dns-operator deployment/dns-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY UP-TO-DATE AVAILABLE AGE dns-operator 1/1 1 1 23h
NAME READY UP-TO-DATE AVAILABLE AGE dns-operator 1/1 1 1 23h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
oc get
命令来查看 DNS Operator 的状态:oc get clusteroperator/dns
$ oc get clusteroperator/dns
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE dns 4.1.15-0.11 True False False 92m
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE dns 4.1.15-0.11 True False False 92m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AVAILABLE
、PROGRESSING
和DEGRADED
提供了有关 Operator 状态的信息。当 CoreDNS 守护进程中至少有一个 pod 被设置为Available
状态时,AVAILABLE
为True
,DNS 服务有一个集群 IP 地址。
7.2. 查看默认 DNS 复制链接链接已复制到粘贴板!
每个 OpenShift Container Platform 新安装都有一个名为 default
的 dns.operator
。
流程
使用
oc describe
命令来查看默认dns
:oc describe dns.operator/default
$ oc describe dns.operator/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查找集群的服务 CIDR 范围,如
172.30.0.0/16
,请使用oc get
命令:oc get networks.config/cluster -o jsonpath='{$.status.serviceNetwork}'
$ oc get networks.config/cluster -o jsonpath='{$.status.serviceNetwork}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3. 使用 DNS 转发 复制链接链接已复制到粘贴板!
您可以使用以下方法使用 DNS 转发来覆盖 /etc/resolv.conf
文件中的默认转发配置:
-
为每个区指定名称服务器 (
spec.servers
)。如果转发区是 OpenShift Container Platform 管理的 ingress 域,则必须为域授权上游名称服务器。 -
提供上游 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
的配置映射,并使用额外的服务器配置块。如果任何服务器都没有与查询匹配的区域,则名称解析会返回上游 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。
7.4. 检查 DNS Operator 状态 复制链接链接已复制到粘贴板!
您可以使用 oc describe
命令来检查状态并查看 DNS Operator 的详情。
流程
查看 DNS Operator 的状态:
oc describe clusteroperators/dns
$ oc describe clusteroperators/dns
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 虽然在特定版本中的信息和拼写可能有所不同,但预期的状态输出如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.5. 查看 DNS Operator 日志 复制链接链接已复制到粘贴板!
您可以使用 oc logs
命令来查看 DNS Operator 日志。
流程
查看 DNS Operator 的日志:
oc logs -n openshift-dns-operator deployment/dns-operator -c dns-operator
$ oc logs -n openshift-dns-operator deployment/dns-operator -c dns-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.6. 设置 CoreDNS 日志级别 复制链接链接已复制到粘贴板!
CoreDNS 和 CoreDNS Operator 的日志级别使用不同的方法设置。您可以配置 CoreDNS 日志级别来确定日志记录错误信息中的详情量。CoreDNS 日志级别的有效值为 Normal
、Debug
和 Trace
。默认 logLevel
为 Normal
。
CoreDNS 错误日志级别总是被启用。以下日志级别设置报告不同的错误响应:
-
logLevel
:Normal
启用 "errors" 类:log . { class error }
. -
loglevel
:Debug
启用 "denial" 类:log . { class denial error }
。 -
logLevel
:Trace
启用 "all" 类:log . { class all }
.
流程
要将
logLevel
设置为Debug
,输入以下命令:oc patch dnses.operator.openshift.io/default -p '{"spec":{"logLevel":"Debug"}}' --type=merge
$ oc patch dnses.operator.openshift.io/default -p '{"spec":{"logLevel":"Debug"}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将
logLevel
设置为Trace
,输入以下命令:oc patch dnses.operator.openshift.io/default -p '{"spec":{"logLevel":"Trace"}}' --type=merge
$ oc patch dnses.operator.openshift.io/default -p '{"spec":{"logLevel":"Trace"}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要确保设置了所需的日志级别,请检查配置映射:
oc get configmap/dns-default -n openshift-dns -o yaml
$ oc get configmap/dns-default -n openshift-dns -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,在将
logLevel
设置为Trace
后,您应该在每个 server 块中看到这个小节:errors log . { class all }
errors log . { class all }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.7. 查看 CoreDNS 日志 复制链接链接已复制到粘贴板!
您可以使用 oc logs
命令查看 CoreDNS 日志。
流程
输入以下命令来查看特定 CoreDNS pod 的日志:
oc -n openshift-dns logs -c dns <core_dns_pod_name>
$ oc -n openshift-dns logs -c dns <core_dns_pod_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令遵循所有 CoreDNS pod 的日志:
oc -n openshift-dns logs -c dns -l dns.operator.openshift.io/daemonset-dns=default -f --max-log-requests=<number>
$ oc -n openshift-dns logs -c dns -l dns.operator.openshift.io/daemonset-dns=default -f --max-log-requests=<number>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定要流传输日志的 DNS pod 数量。最大值为 6。
7.8. 设置 CoreDNS Operator 的日志级别 复制链接链接已复制到粘贴板!
CoreDNS 和 CoreDNS Operator 的日志级别使用不同的方法设置。集群管理员可以配置 Operator 日志级别来更快地跟踪 OpenShift DNS 问题。operatorLogLevel
的有效值为 Normal
、Debug
和 Trace
。Trace
具有更详细的信息。默认 operatorlogLevel
为 Normal
。Operator 问题有七个日志记录级别: Trace, Debug, Info, Warning, Error, Fatal, 和 Panic。设置了日志级别后,具有该严重性级别或以上级别的所有内容都会记录为日志条目。
-
operatorLogLevel: "Normal"
设置logrus.SetLogLevel("Info")
。 -
operatorLogLevel: "Debug"
设置logrus.SetLogLevel("Debug")
。 -
operatorLogLevel: "Trace"
设置logrus.SetLogLevel("Trace")
。
流程
要将
operatorLogLevel
设置为Debug
,请输入以下命令:oc patch dnses.operator.openshift.io/default -p '{"spec":{"operatorLogLevel":"Debug"}}' --type=merge
$ oc patch dnses.operator.openshift.io/default -p '{"spec":{"operatorLogLevel":"Debug"}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将
operatorLogLevel
设置为Trace
,请输入以下命令:oc patch dnses.operator.openshift.io/default -p '{"spec":{"operatorLogLevel":"Trace"}}' --type=merge
$ oc patch dnses.operator.openshift.io/default -p '{"spec":{"operatorLogLevel":"Trace"}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要查看生成的更改,请输入以下命令:
oc get dnses.operator -A -oyaml
$ oc get dnses.operator -A -oyaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您应该会看到两个日志级别条目。
operatorLogLevel
适用于 OpenShift DNS Operator 问题,logLevel
适用于 CoreDNS pod 的 daemonset:logLevel: Trace operatorLogLevel: Debug
logLevel: Trace operatorLogLevel: Debug
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要查看 daemonset 的日志,请输入以下命令:
oc logs -n openshift-dns ds/dns-default
$ oc logs -n openshift-dns ds/dns-default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.9. 调整 CoreDNS 缓存 复制链接链接已复制到粘贴板!
对于 CoreDNS,您可以配置成功或不成功缓存的最长持续时间,也称为正缓存或负缓存。调整 DNS 查询响应的缓存持续时间可减少任何上游 DNS 解析器的负载。
将 TTL 字段设为低值可能会导致集群、任何上游解析器或两者中负载的增加。
流程
运行以下命令来编辑名为
default
的 DNS Operator 对象:oc edit dns.operator.openshift.io/default
$ oc edit dns.operator.openshift.io/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改生存时间 (TTL) 缓存值:
配置 DNS 缓存
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要查看更改,请运行以下命令再次查看配置映射:
oc get configmap/dns-default -n openshift-dns -o yaml
$ oc get configmap/dns-default -n openshift-dns -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证您是否看到类似以下示例的条目:
cache 3600 { denial 9984 2400 }
cache 3600 { denial 9984 2400 }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.10. 高级任务 复制链接链接已复制到粘贴板!
7.10.1. 更改 DNS Operator managementState 复制链接链接已复制到粘贴板!
DNS Operator 管理 CoreDNS 组件,为集群中的 pod 和服务提供名称解析服务。默认情况下,DNS Operator 的 managementState
设置为 Managed
,这意味着 DNS Operator 会主动管理其资源。您可以将其更改为 Unmanaged
,这意味着 DNS Operator 不管理其资源。
以下是更改 DNS Operator managementState
的用例:
-
您是一个开发者,希望测试配置更改来查看它是否解决了 CoreDNS 中的问题。您可以通过将
managementState
设置为Unmanaged
来停止 DNS Operator 覆盖配置更改。 -
您是一个集群管理员,报告了 CoreDNS 的问题,但在解决这个问题前需要应用一个临时解决方案。您可以将 DNS Operator 的
managementState
字段设置为Unmanaged
以应用临时解决方案。
流程
在 DNS Operator 中将
managementState
更改为Unmanaged
:oc patch dns.operator.openshift.io default --type merge --patch '{"spec":{"managementState":"Unmanaged"}}'
oc patch dns.operator.openshift.io default --type merge --patch '{"spec":{"managementState":"Unmanaged"}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
jsonpath
命令行 JSON 解析器查看 DNS Operator 的managementState
:oc get dns.operator.openshift.io default -ojsonpath='{.spec.managementState}'
$ oc get dns.operator.openshift.io default -ojsonpath='{.spec.managementState}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意当
managementState
设置为Unmanaged
时,您无法升级。
7.10.2. 控制 DNS pod 放置 复制链接链接已复制到粘贴板!
DNS Operator 有两个守护进程集:一个用于 CoreDNS,名为 dns-default
,另一个用于管理 名为 node-resolver
的 /etc/hosts
文件。
您可能会发现,需要控制哪些节点已分配并运行了 CoreDNS pod,尽管这不是一个常见操作。例如,如果集群管理员配置了可以禁止节点对节点间通信的安全策略,这需要限制 CoreDNS 运行 daemonset 的节点集合。如果 DNS pod 在集群中的某些节点上运行,且没有运行 DNS pod 的节点与运行 DNS pod 的节点具有网络连接,则 DNS 服务将适用于所有 pod。
node-resolver
守护进程集必须在每个节点主机上运行,因为它为集群镜像 registry 添加一个条目来支持拉取镜像。node-resolver
pod 只有一个作业:查找 image-registry.openshift-image-registry.svc
服务的集群 IP 地址,并将其添加到节点主机上的 /etc/hosts
中,以便容器运行时可以解析服务名称。
作为集群管理员,您可以使用自定义节点选择器将 CoreDNS 的守护进程集配置为在某些节点上运行或不运行。
先决条件
-
已安装
oc
CLI。 -
以具有
cluster-admin
权限的用户身份登录集群。 -
您的 DNS Operator
managementState
设置为Managed
。
流程
要允许 CoreDNS 的守护进程集在特定节点上运行,请配置污点和容限:
修改名为
default
的 DNS Operator 对象:oc edit dns.operator/default
$ oc edit dns.operator/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为污点指定污点键和一个容忍度:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果污点是
dns-only
,它可以无限期地被容许。您可以省略tolerationSeconds
。
7.10.3. 使用 TLS 配置 DNS 转发 复制链接链接已复制到粘贴板!
在高度监管的环境中工作时,您可能需要在将请求转发到上游解析器时保护 DNS 流量,以便您可以确保额外的 DNS 流量和数据隐私。
请注意,CoreDNS 缓存在 10 秒内转发连接。如果没有请求,CoreDNS 将为该 10 秒打开 TCP 连接。对于大型集群,请确保您的 DNS 服务器知道可能有多个新的连接来保存打开,因为您可以在每个节点上启动连接。相应地设置 DNS 层次结构以避免性能问题。
流程
修改名为
default
的 DNS Operator 对象:oc edit dns.operator/default
$ oc edit dns.operator/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 集群管理员可以配置传输层安全(TLS)来转发 DNS 查询。
使用 TLS 配置 DNS 转发
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 必须符合
rfc6335
服务名称语法。 - 2
- 必须符合
rfc1123
服务名称语法中的子域的定义。集群域cluster.local
是对zones
字段的无效子域。集群域cluster.local
不是zones
中的一个有效的subdomain
。 - 3
- 在为转发 DNS 查询配置 TLS 时,将
transport
字段设置为具有值TLS
。 - 4
- 当为转发 DNS 查询配置 TLS 时,这是用作服务器名称的一部分(SNI)的强制服务器名称来验证上游 TLS 服务器证书。
- 5
- 定义用于选择上游解析器的策略。默认值为
Random
。您还可以使用RoundRobin
, 和Sequential
值。 - 6
- 必需。使用它提供上游解析器。每个
forwardPlugin
条目最多允许 15 个upstreams
条目。 - 7
- 可选。您可以使用它来覆盖默认策略,并将 DNS 解析转发到默认域的指定 DNS 解析器(上游解析器)。如果没有提供任何上游解析器,DNS 名称查询将进入
/etc/resolv.conf
中的服务器。 - 8
- 在使用 TLS 时,只允许
网络
类型,且您必须提供 IP 地址。网络
类型表示,该上游解析器应该独立于/etc/resolv.conf
中列出的上游解析器单独处理转发请求。 - 9
address
字段必须是有效的 IPv4 或 IPv6 地址。- 10
- 您可以选择提供端口。
port
必须是1
到65535
之间的值。如果您没有为上游指定端口,则默认端口为 853。
注意如果
servers
未定义或无效,则配置映射只包括默认服务器。
验证
查看配置映射:
oc get configmap/dns-default -n openshift-dns -o yaml
$ oc get configmap/dns-default -n openshift-dns -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 基于 TLS 转发示例的 DNS ConfigMap 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 对
forwardPlugin
的更改会触发 CoreDNS 守护进程集的滚动更新。
第 8 章 OpenShift Container Platform 中的 Ingress Operator 复制链接链接已复制到粘贴板!
Ingress Operator 实现 IngressController
API,是负责启用对 OpenShift Container Platform 集群服务的外部访问的组件。
8.1. OpenShift Container Platform Ingress Operator 复制链接链接已复制到粘贴板!
在创建 OpenShift Container Platform 集群时,在集群中运行的 Pod 和服务会各自分配自己的 IP 地址。IP 地址可供附近运行的其他容器集和服务访问,但外部客户端无法访问这些 IP 地址。
Ingress Operator 通过部署和管理一个或多个基于 HAProxy 的 Ingress Controller 来处理路由,使外部客户端可以访问您的服务。您可以通过指定 OpenShift Container Platform Route
和 Kubernetes Ingress
资源,来使用 Ingress Operator 路由流量。Ingress Controller 中的配置(如定义 endpointPublishingStrategy
类型和内部负载平衡)提供了发布 Ingress Controller 端点的方法。
8.2. Ingress 配置资产 复制链接链接已复制到粘贴板!
安装程序在 config.openshift.io
API 组中生成带有 Ingress
资源的资产,cluster-ingress-02-config.yml
。
Ingress
资源的 YAML 定义
安装程序将这个资产保存在 manifests/
目录下的 cluster-ingress-02-config.yml
文件中。此 Ingress
资源定义 Ingress 的集群范围配置。此 Ingress 配置的用法如下所示:
- Ingress Operator 使用集群 Ingress 配置中的域,作为默认 Ingress Controller 的域。
-
OpenShift API Server Operator 使用集群 Ingress 配置中的域。在为未指定显式主机的
Route
资源生成默认主机时,还会使用此域。
8.3. Ingress Controller 配置参数 复制链接链接已复制到粘贴板!
IngressController
自定义资源(CR) 包含可选配置参数,您可以配置它们来满足您的机构的特定需求。
参数 | 描述 |
---|---|
|
如果为空,默认值为 |
|
|
|
对于云环境,使用
在 GCP、AWS 和 Azure 上,您可以配置以下
如果没有设置,则默认值基于
对于大多数平台,可以更新
对于非云环境,如裸机平台,请使用
如果您没有在这些字段中设置值,则默认值基于
如果需要在集群部署后更新
|
|
secret 必须包含以下密钥和数据:*
如果没有设置,则自动生成和使用通配符证书。该证书对 Ingress Controller 的 内部证书(无论是生成的证书还是用户指定的证书)自动与 OpenShift Container Platform 内置的 OAuth 服务器集成。 |
|
|
|
|
|
如果没有设置,则使用默认值。 注意
|
|
如果没有设置,则默认值基于
当使用
Ingress Controller 的最低 TLS 版本是 注意
加密器和配置的安全配置集的最小 TLS 版本反映在 重要
Ingress Operator 将 |
|
|
|
|
|
|
|
通过为
默认情况下,策略设置为
通过设置 这些调整仅应用于明文、边缘终止和重新加密路由,且仅在使用 HTTP/1 时有效。
对于请求标头,这些调整仅适用于具有
|
|
|
|
|
|
对于您要捕获的任何 Cookie,以下参数必须位于
例如: httpCaptureCookies: - matchType: Exact maxLength: 128 name: MYCOOKIE
|
|
|
|
|
|
|
|
这些连接来自负载均衡器健康探测或 Web 浏览器规范连接(预连接),可以安全地忽略。但是,这些请求可能是由网络错误造成的,因此将此字段设置为 |
8.3.1. Ingress Controller TLS 安全配置集 复制链接链接已复制到粘贴板!
TLS 安全配置文件为服务器提供了一种方式,以规范连接的客户端在连接服务器时可以使用哪些密码。
8.3.1.1. 了解 TLS 安全配置集 复制链接链接已复制到粘贴板!
您可以使用 TLS(Transport Layer Security)安全配置集来定义各种 OpenShift Container Platform 组件需要哪些 TLS 密码。OpenShift Container Platform TLS 安全配置集基于 Mozilla 推荐的配置。
您可以为每个组件指定以下 TLS 安全配置集之一:
profile | 描述 |
---|---|
| 此配置集用于旧的客户端或库。该配置集基于旧的向后兼容性建议配置。
注意 对于 Ingress Controller,最小 TLS 版本从 1.0 转换为 1.1。 |
| 此配置集是 Ingress Controller、kubelet 和 control plane 的默认 TLS 安全配置集。该配置集基于 Intermediate 兼容性推荐的配置。
注意 这个配置集是大多数客户端的建议配置。 |
| 此配置集主要用于不需要向后兼容的现代客户端。这个配置集基于 Modern 兼容性推荐的配置。
|
| 此配置集允许您定义要使用的 TLS 版本和密码。 警告
使用 |
当使用预定义的配置集类型时,有效的配置集配置可能会在发行版本之间有所改变。例如,使用在版本 X.Y.Z 中部署的 Intermediate 配置集指定了一个规格,升级到版本 X.Y.Z+1 可能会导致应用新的配置集配置,从而导致推出部署。
8.3.1.2. 为 Ingress Controller 配置 TLS 安全配置集 复制链接链接已复制到粘贴板!
要为 Ingress Controller 配置 TLS 安全配置集,请编辑 IngressController
自定义资源(CR)来指定预定义或自定义 TLS 安全配置集。如果没有配置 TLS 安全配置集,则默认值基于为 API 服务器设置的 TLS 安全配置集。
配置 Old
TLS 安全配置集的 IngressController
CR 示例
TLS 安全配置集定义 Ingress Controller 的 TLS 连接的最低 TLS 版本和 TLS 密码。
您可以在 Status.Tls Profile
和 Spec.Tls Security Profile
下看到 IngressController
自定义资源(CR)中配置的 TLS 安全配置集的密码和最小 TLS 版本。对于 Custom
TLS 安全配置集,这两个参数下列出了特定的密码和最低 TLS 版本。
HAProxy Ingress Controller 镜像支持 TLS 1.3
和 Modern
配置集。
Ingress Operator 还会将 Old
或 Custom
配置集的 TLS 1.0
转换为 1.1
。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。
流程
编辑
openshift-ingress-operator
项目中的IngressController
CR,以配置 TLS 安全配置集:oc edit IngressController default -n openshift-ingress-operator
$ oc edit IngressController default -n openshift-ingress-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加
spec.tlsSecurityProfile
字段:Custom
配置集的IngressController
CR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存文件以使改变生效。
验证
验证
IngressController
CR 中是否设置了配置集:oc describe IngressController default -n openshift-ingress-operator
$ oc describe IngressController default -n openshift-ingress-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.3.1.3. 配置 mutual TLS 身份验证 复制链接链接已复制到粘贴板!
您可以通过设置 spec.clientTLS
值,将 Ingress Controller 配置为启用 mutual TLS (mTLS) 身份验证。clientTLS
值将 Ingress Controller 配置为验证客户端证书。此配置包括设置 clientCA
值,这是对配置映射的引用。配置映射包含 PEM 编码的 CA 证书捆绑包,用于验证客户端的证书。另外,您还可以配置证书主题过滤器列表。
如果 clientCA
值指定了 X509v3 证书撤销列表 (CRL) 分发点,Ingress Operator 会下载并管理基于每个提供的证书中指定的 HTTP URI X509v3 CRL 分发点
的 CRL 配置映射。Ingress Controller 在 mTLS/TLS 协商过程中使用此配置映射。不提供有效证书的请求将被拒绝。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 - 您有一个 PEM 编码的 CA 证书捆绑包。
如果您的 CA 捆绑包引用 CRL 发布点,还必须将最终用户或叶证书包含在客户端 CA 捆绑包中。此证书必须在
CRL 分发点
下包含 HTTP URI,如 RFC 5280 所述。例如:Issuer: C=US, O=Example Inc, CN=Example Global G2 TLS RSA SHA256 2020 CA1 Subject: SOME SIGNED CERT X509v3 CRL Distribution Points: Full Name: URI:http://crl.example.com/example.crl
Issuer: C=US, O=Example Inc, CN=Example Global G2 TLS RSA SHA256 2020 CA1 Subject: SOME SIGNED CERT X509v3 CRL Distribution Points: Full Name: URI:http://crl.example.com/example.crl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
流程
在
openshift-config
命名空间中,从 CA 捆绑包创建配置映射:oc create configmap \ router-ca-certs-default \ --from-file=ca-bundle.pem=client-ca.crt \ -n openshift-config
$ oc create configmap \ router-ca-certs-default \ --from-file=ca-bundle.pem=client-ca.crt \
1 -n openshift-config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 配置映射数据键必须是
ca-bundle.pem
,数据值必须是 PEM 格式的 CA 证书。
编辑
openshift-ingress-operator
项目中的IngressController
资源:oc edit IngressController default -n openshift-ingress-operator
$ oc edit IngressController default -n openshift-ingress-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加
spec.clientTLS
字段和子字段来配置 mutual TLS:指定过滤模式的
clientTLS
配置集的IngressController
CR 示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选,输入以下命令获取
allowedSubjectPatterns
的可辨识名称 (DN)。openssl x509 -in custom-cert.pem -noout -subject
$ openssl x509 -in custom-cert.pem -noout -subject
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
subject=C=US, ST=NC, O=Security, OU=OpenShift, CN=example.com
subject=C=US, ST=NC, O=Security, OU=OpenShift, CN=example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.4. 查看默认的 Ingress Controller 复制链接链接已复制到粘贴板!
Ingress Operator 是 OpenShift Container Platform 的一个核心功能,开箱即用。
每个 OpenShift Container Platform 新安装都有一个名为 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
8.5. 查看 Ingress Operator 状态 复制链接链接已复制到粘贴板!
您可以查看并检查 Ingress Operator 的状态。
流程
查看您的 Ingress Operator 状态:
oc describe clusteroperators/ingress
$ oc describe clusteroperators/ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.6. 查看 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
8.7. 查看 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
8.8. 创建自定义 Ingress Controller 复制链接链接已复制到粘贴板!
作为集群管理员,您可以创建新的自定义 Ingress Controller。因为默认 Ingress Controller 在 OpenShift Container Platform 更新过程中可能会改变,所以创建自定义 Ingress Controller 以在集群更新中手动保留配置会很有用。
这个示例为自定义 Ingress Controller 提供最小规格。要进一步定制您的自定义 Ingress Controller,请参阅"配置 Ingress Controller"。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
创建定义自定义
IngressController
对象的 YAML 文件:custom-ingress-controller.yaml
文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建对象:
oc create -f custom-ingress-controller.yaml
$ oc create -f custom-ingress-controller.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.9. 配置 Ingress Controller 复制链接链接已复制到粘贴板!
8.9.1. 设置自定义默认证书 复制链接链接已复制到粘贴板!
作为管理员,您可以通过创建 Secret 资源并编辑 IngressController
自定义资源 (CR),将 Ingress Controller 配置为使用自定义证书。
先决条件
- 您必须在 PEM 编码文件中有一个证书/密钥对,其中该证书由可信证书认证机构签名,或者由您在一个自定义 PKI 中配置的私有可信证书认证机构签名。
您的证书满足以下要求:
- 该证书对入口域有效。
-
证书使用
subjectAltName
扩展来指定通配符域,如*.apps.ocp4.example.com
。
您必须有一个
IngressController
CR,它仅包含默认的
IngressController
CR。您可以运行以下命令来检查是否有IngressController
CR:oc --namespace openshift-ingress-operator get ingresscontrollers
$ oc --namespace openshift-ingress-operator get ingresscontrollers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果您有中间证书,则必须将其包含在包含自定义默认证书的 secret 的 tls.crt
文件中。指定证书时指定的顺序是相关的; 在任意服务器证书后列出您的中间证书。
流程
以下步骤假定自定义证书和密钥对位于当前工作目录下的 tls.crt
和 tls.key
文件中。替换 tls.crt
和 tls.key
的实际路径名。在创建 Secret 资源并在 IngressController CR 中引用它时,您也可以将 custom-certs-default
替换成另一名称。
此操作会导致使用滚动部署策略重新部署 Ingress Controller。
使用
tls.crt
和tls.key
文件,创建在openshift-ingress
命名空间中包含自定义证书的 Secret 资源。oc --namespace openshift-ingress create secret tls custom-certs-default --cert=tls.crt --key=tls.key
$ oc --namespace openshift-ingress create secret tls custom-certs-default --cert=tls.crt --key=tls.key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新 IngressController CR,以引用新的证书 Secret:
oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default \ --patch '{"spec":{"defaultCertificate":{"name":"custom-certs-default"}}}'
$ oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default \ --patch '{"spec":{"defaultCertificate":{"name":"custom-certs-default"}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证更新是否已生效:
echo Q |\ openssl s_client -connect console-openshift-console.apps.<domain>:443 -showcerts 2>/dev/null |\ openssl x509 -noout -subject -issuer -enddate
$ echo Q |\ openssl s_client -connect console-openshift-console.apps.<domain>:443 -showcerts 2>/dev/null |\ openssl x509 -noout -subject -issuer -enddate
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<domain>
- 指定集群的基域名。
输出示例
subject=C = US, ST = NC, L = Raleigh, O = RH, OU = OCP4, CN = *.apps.example.com issuer=C = US, ST = NC, L = Raleigh, O = RH, OU = OCP4, CN = example.com notAfter=May 10 08:32:45 2022 GM
subject=C = US, ST = NC, L = Raleigh, O = RH, OU = OCP4, CN = *.apps.example.com issuer=C = US, ST = NC, L = Raleigh, O = RH, OU = OCP4, CN = example.com notAfter=May 10 08:32:45 2022 GM
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示您还可以应用以下 YAML 来设置自定义默认证书:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 证书 Secret 名称应该与用来更新 CR 的值匹配。
修改了 IngressController CR 后,Ingress Operator 将更新 Ingress Controller 的部署以使用自定义证书。
8.9.2. 删除自定义默认证书 复制链接链接已复制到粘贴板!
作为管理员,您可以删除配置了 Ingress Controller 的自定义证书。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 -
已安装 OpenShift CLI(
oc
)。 - 您之前为 Ingress Controller 配置了自定义默认证书。
流程
要删除自定义证书并恢复 OpenShift Container Platform 附带的证书,请输入以下命令:
oc patch -n openshift-ingress-operator ingresscontrollers/default \ --type json -p $'- op: remove\n path: /spec/defaultCertificate'
$ oc patch -n openshift-ingress-operator ingresscontrollers/default \ --type json -p $'- op: remove\n path: /spec/defaultCertificate'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 集群协调新证书配置时可能会有延迟。
验证
要确认原始集群证书已被恢复,请输入以下命令:
echo Q | \ openssl s_client -connect console-openshift-console.apps.<domain>:443 -showcerts 2>/dev/null | \ openssl x509 -noout -subject -issuer -enddate
$ echo Q | \ openssl s_client -connect console-openshift-console.apps.<domain>:443 -showcerts 2>/dev/null | \ openssl x509 -noout -subject -issuer -enddate
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<domain>
- 指定集群的基域名。
输出示例
subject=CN = *.apps.<domain> issuer=CN = ingress-operator@1620633373 notAfter=May 10 10:44:36 2023 GMT
subject=CN = *.apps.<domain> issuer=CN = ingress-operator@1620633373 notAfter=May 10 10:44:36 2023 GMT
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.9.3. 自动扩展 Ingress Controller 复制链接链接已复制到粘贴板!
您可以自动缩放 Ingress Controller 以动态满足路由性能或可用性要求,如提高吞吐量的要求。
以下流程提供了一个扩展默认 Ingress Controller 的示例。
先决条件
-
已安装 OpenShift CLI (
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问 OpenShift Container Platform 集群。 已安装自定义 Metrics Autoscaler Operator 和关联的 KEDA Controller。
-
您可以在 Web 控制台中使用 OperatorHub 安装 Operator。安装 Operator 后,您可以创建
KedaController
实例。
-
您可以在 Web 控制台中使用 OperatorHub 安装 Operator。安装 Operator 后,您可以创建
流程
运行以下命令,创建一个服务帐户来与 Thanos 进行身份验证:
oc create -n openshift-ingress-operator serviceaccount thanos && oc describe -n openshift-ingress-operator serviceaccount thanos
$ oc create -n openshift-ingress-operator serviceaccount thanos && oc describe -n openshift-ingress-operator serviceaccount thanos
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 使用服务帐户的令牌,在
openshift-ingress-operator
命名空间中定义一个TriggerAuthentication
对象。创建
TriggerAuthentication
对象,并将secret
变量的值传递给TOKEN
参数:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建并应用角色以从 Thanos 读取指标:
创建一个新角色
thanos-metrics-reader.yaml
,从 pod 和节点读取指标:thanos-metrics-reader.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用新角色:
oc apply -f thanos-metrics-reader.yaml
$ oc apply -f thanos-metrics-reader.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
输入以下命令在服务帐户中添加新角色:
oc adm policy -n openshift-ingress-operator add-role-to-user thanos-metrics-reader -z thanos --role-namespace=openshift-ingress-operator
$ oc adm policy -n openshift-ingress-operator add-role-to-user thanos-metrics-reader -z thanos --role-namespace=openshift-ingress-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm policy -n openshift-ingress-operator add-cluster-role-to-user cluster-monitoring-view -z thanos
$ oc adm policy -n openshift-ingress-operator add-cluster-role-to-user cluster-monitoring-view -z thanos
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意只有在使用跨命名空间查询时,才需要参数
add-cluster-role-to-user
。以下步骤使用kube-metrics
命名空间中的查询,该命名空间需要此参数。创建一个新的
ScaledObject
YAML 文件ingress-autoscaler.yaml
,该文件以默认 Ingress Controller 部署为目标:ScaledObject
定义示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果使用跨命名空间查询,您必须在
serverAddress
字段中目标端口 9091 而不是端口 9092。您还必须有升级的特权,才能从此端口读取指标。运行以下命令来应用自定义资源定义:
oc apply -f ingress-autoscaler.yaml
$ oc apply -f ingress-autoscaler.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,验证默认 Ingress Controller 是否已扩展以匹配
kube-state-metrics
查询返回的值:使用
grep
命令搜索 Ingress Controller YAML 文件以查找副本数量:oc get -n openshift-ingress-operator ingresscontroller/default -o yaml | grep replicas:
$ oc get -n openshift-ingress-operator ingresscontroller/default -o yaml | grep replicas:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取
openshift-ingress
项目中的 pod:oc get pods -n openshift-ingress
$ oc get pods -n openshift-ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE router-default-7b5df44ff-l9pmm 2/2 Running 0 17h router-default-7b5df44ff-s5sl5 2/2 Running 0 3d22h router-default-7b5df44ff-wwsth 2/2 Running 0 66s
NAME READY STATUS RESTARTS AGE router-default-7b5df44ff-l9pmm 2/2 Running 0 17h router-default-7b5df44ff-s5sl5 2/2 Running 0 3d22h router-default-7b5df44ff-wwsth 2/2 Running 0 66s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.9.4. 扩展 Ingress Controller 复制链接链接已复制到粘贴板!
手动扩展 Ingress Controller 以满足路由性能或可用性要求,如提高吞吐量的要求。oc
命令用于扩展 IngressController
资源。以下流程提供了扩展默认 IngressController
的示例。
扩展不是立刻就可以完成的操作,因为它需要时间来创建所需的副本数。
流程
查看默认
IngressController
的当前可用副本数:oc get -n openshift-ingress-operator ingresscontrollers/default -o jsonpath='{$.status.availableReplicas}'
$ oc get -n openshift-ingress-operator ingresscontrollers/default -o jsonpath='{$.status.availableReplicas}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
oc patch
命令将默认IngressController
扩展到所需的副本数。以下示例将默认IngressController
扩展到 3 个副本。oc patch -n openshift-ingress-operator ingresscontroller/default --patch '{"spec":{"replicas": 3}}' --type=merge
$ oc patch -n openshift-ingress-operator ingresscontroller/default --patch '{"spec":{"replicas": 3}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证默认
IngressController
是否已扩展至您指定的副本数:oc get -n openshift-ingress-operator ingresscontrollers/default -o jsonpath='{$.status.availableReplicas}'
$ oc get -n openshift-ingress-operator ingresscontrollers/default -o jsonpath='{$.status.availableReplicas}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示您还可以应用以下 YAML 将 Ingress Controller 扩展为三个副本:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果需要不同数量的副本,请更改
replicas
值。
8.9.5. 配置 Ingress 访问日志 复制链接链接已复制到粘贴板!
您可以配置 Ingress Controller 以启用访问日志。如果您的集群没有接收许多流量,那么您可以将日志记录到 sidecar。如果您的集群接收大量流量,为了避免超出日志记录堆栈的容量,或与 OpenShift Container Platform 之外的日志记录基础架构集成,您可以将日志转发到自定义 syslog 端点。您还可以指定访问日志的格式。
当不存在 Syslog 日志记录基础架构时,容器日志记录可用于在低流量集群中启用访问日志,或者在诊断 Ingress Controller 时进行简短使用。
对于访问日志可能会超过 OpenShift Logging 堆栈容量的高流量集群,或需要任何日志记录解决方案与现有 Syslog 日志记录基础架构集成的环境,则需要 syslog。Syslog 用例可能会相互重叠。
先决条件
-
以具有
cluster-admin
特权的用户身份登录。
流程
配置 Ingress 访问日志到 sidecar。
要配置 Ingress 访问日志记录,您必须使用
spec.logging.access.destination
指定一个目的地。要将日志记录指定到 sidecar 容器,您必须指定Container
spec.logging.access.destination.type
。以下示例是将日志记录到Container
目的地的 Ingress Controller 定义:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当将 Ingress Controller 配置为日志记录到 sidecar 时,Operator 会在 Ingress Controller Pod 中创建一个名为
logs
的容器:oc -n openshift-ingress logs deployment.apps/router-default -c logs
$ oc -n openshift-ingress logs deployment.apps/router-default -c logs
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
2020-05-11T19:11:50.135710+00:00 router-default-57dfc6cd95-bpmk6 router-default-57dfc6cd95-bpmk6 haproxy[108]: 174.19.21.82:39654 [11/May/2020:19:11:50.133] public be_http:hello-openshift:hello-openshift/pod:hello-openshift:hello-openshift:10.128.2.12:8080 0/0/1/0/1 200 142 - - --NI 1/1/0/0/0 0/0 "GET / HTTP/1.1"
2020-05-11T19:11:50.135710+00:00 router-default-57dfc6cd95-bpmk6 router-default-57dfc6cd95-bpmk6 haproxy[108]: 174.19.21.82:39654 [11/May/2020:19:11:50.133] public be_http:hello-openshift:hello-openshift/pod:hello-openshift:hello-openshift:10.128.2.12:8080 0/0/1/0/1 200 142 - - --NI 1/1/0/0/0 0/0 "GET / HTTP/1.1"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
配置 Ingress 访问日志记录到 Syslog 端点。
要配置 Ingress 访问日志记录,您必须使用
spec.logging.access.destination
指定一个目的地。要将日志记录指定到 Syslog 端点目的地,您必须为spec.logging.access.destination.type
指定Syslog
。如果目的地类型是Syslog
,还必须使用spec.logging.access.destination.syslog.address
指定目标端点,您可以使用spec.logging.access.destination.syslog.facility
指定一个工具。以下示例是将日志记录到Syslog
目的地的 Ingress Controller 定义:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意Syslog
目的地端口必须是 UDP。syslog
目标地址必须是 IP 地址。它不支持 DNS 主机名。
使用特定的日志格式配置 Ingress 访问日志。
您可以指定
spec.logging.access.httpLogFormat
来自定义日志格式。以下示例是一个 Ingress Controller 定义,它将日志记录到 IP 地址为 1.2.3.4、端口为 10514 的syslog
端点:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
禁用 Ingress 访问日志。
要禁用 Ingress 访问日志,请保留
spec.logging
或spec.logging.access
为空:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
允许 Ingress Controller 在使用 sidecar 时,修改 HAProxy 日志长度。
如果您使用
spec.logging.access.destination.syslog.maxLength
,请使用spec.logging.access.destination.type: Syslog
。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您使用
spec.logging.access.destination.container.maxLength
,请使用spec.logging.access.destination.type: Container
。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
要使用
Ingress
访问日志中的X-Forwarded-For
标头查看原始客户端源 IP 地址,请参阅 Ingress 和 Application Logs 中的 X-Forwarded-For Header 中的 X-Forwarded-For Header 中的 "Capturing Original Client IP 地址。
8.9.6. 设置 Ingress Controller 线程数 复制链接链接已复制到粘贴板!
集群管理员可设置线程数,以增加集群可以处理的入站的连接量。您可以修补现有的 Ingress Controller 来增加线程量。
先决条件
- 以下假设您已创建了 Ingress Controller。
流程
更新 Ingress Controller 以增加线程数量:
oc -n openshift-ingress-operator patch ingresscontroller/default --type=merge -p '{"spec":{"tuningOptions": {"threadCount": 8}}}'
$ oc -n openshift-ingress-operator patch ingresscontroller/default --type=merge -p '{"spec":{"tuningOptions": {"threadCount": 8}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您的节点有能力运行大量资源,您可以使用与预期节点容量匹配的标签配置
spec.nodePlacement.nodeSelector
,并将spec.tuningOptions.threadCount
配置为一个适当的高值。
8.9.7. 配置 Ingress Controller 以使用内部负载均衡器 复制链接链接已复制到粘贴板!
当在云平台上创建 Ingress Controller 时,Ingress Controller 默认由一个公共云负载均衡器发布。作为管理员,您可以创建一个使用内部云负载均衡器的 Ingress Controller。
如果云供应商是 Microsoft Azure,则必须至少有一个指向节点的公共负载均衡器。如果不这样做,所有节点都将丢失到互联网的出站连接。
如果要更改 IngressController
的 scope
,您可以在创建自定义资源(CR)后更改 .spec.endpointPublishingStrategy.loadBalancer.scope
参数。
图 8.1. LoadBalancer 图表
上图显示了与 OpenShift Container Platform Ingress LoadBalancerService 端点发布策略相关的以下概念:
- 您可以使用 OpenShift Ingress Controller Load Balancer 在外部使用云供应商负载均衡器或内部加载负载。
- 您可以使用负载均衡器的单个 IP 地址以及更熟悉的端口,如 8080 和 4200,如图形中所述的集群所示。
- 来自外部负载均衡器的流量定向到 pod,并由负载均衡器管理,如下节点的实例中所述。有关实现详情请查看 Kubernetes 服务文档 。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
在名为
<name>-ingress-controller.yaml
的文件中创建IngressController
自定义资源 (CR) ,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,创建上一步中定义的 Ingress Controller:
oc create -f <name>-ingress-controller.yaml
$ oc create -f <name>-ingress-controller.yaml
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<name>
替换为IngressController
对象的名称。
可选:通过运行以下命令确认创建了 Ingress Controller:
oc --all-namespaces=true get ingresscontrollers
$ oc --all-namespaces=true get ingresscontrollers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.9.8. 在 GCP 上为 Ingress Controller 配置全局访问 复制链接链接已复制到粘贴板!
在带有一个内部负载均衡器的 GCP 上创建的 Ingress Controller 会为服务生成一个内部 IP 地址。集群管理员可指定全局访问选项,该选项可启用同一 VPC 网络内任何区域中的客户端作为负载均衡器,以访问集群上运行的工作负载。
如需更多信息,请参阅 GCP 文档以了解全局访问。
先决条件
- 您已在 GCP 基础架构上部署了 OpenShift Container Platform 集群。
- 已将 Ingress Controller 配置为使用内部负载均衡器。
-
已安装 OpenShift CLI(
oc
)。
流程
配置 Ingress Controller 资源,以允许全局访问。
注意您还可以创建 Ingress Controller 并指定全局访问选项。
配置 Ingress Controller 资源:
oc -n openshift-ingress-operator edit ingresscontroller/default
$ oc -n openshift-ingress-operator edit ingresscontroller/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑 YAML 文件:
clientAccess
配置为Global
的示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
gcp.clientAccess
设置为Global
。
- 保存文件以使改变生效。
运行以下命令,以验证该服务是否允许全局访问:
oc -n openshift-ingress edit svc/router-default -o yaml
$ oc -n openshift-ingress edit svc/router-default -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出显示,全局访问已为带有注解
networking.gke.io/internal-load-balancer-allow-global-access
的 GCP 启用。
8.9.9. 设置 Ingress Controller 健康检查间隔 复制链接链接已复制到粘贴板!
集群管理员可以设置健康检查间隔,以定义路由器在两个连续健康检查之间等待的时间。这个值会作为所有路由的默认值进行全局应用。默认值为 5 秒。
先决条件
- 以下假设您已创建了 Ingress Controller。
流程
更新 Ingress Controller,以更改后端健康检查之间的间隔:
oc -n openshift-ingress-operator patch ingresscontroller/default --type=merge -p '{"spec":{"tuningOptions": {"healthCheckInterval": "8s"}}}'
$ oc -n openshift-ingress-operator patch ingresscontroller/default --type=merge -p '{"spec":{"tuningOptions": {"healthCheckInterval": "8s"}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意要覆盖单个路由的
healthCheckInterval
,请使用路由注解router.openshift.io/haproxy.health.check.interval
8.9.10. 将集群的默认 Ingress Controller 配置为内部 复制链接链接已复制到粘贴板!
您可以通过删除并重新它来将默认
Ingress Controller 配置为内部。
如果云供应商是 Microsoft Azure,则必须至少有一个指向节点的公共负载均衡器。如果不这样做,所有节点都将丢失到互联网的出站连接。
如果要更改 IngressController
的 scope
,您可以在创建自定义资源(CR)后更改 .spec.endpointPublishingStrategy.loadBalancer.scope
参数。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。
流程
通过删除并重新创建集群,将
默认
Ingress Controller 配置为内部。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.9.11. 配置路由准入策略 复制链接链接已复制到粘贴板!
管理员和应用程序开发人员可在多个命名空间中运行具有相同域名的应用程序。这是针对多个团队开发的、在同一个主机名上公开的微服务的机构。
只有在命名空间间有信任的集群才会启用跨命名空间之间的声明,否则恶意用户可能会接管主机名。因此,默认的准入策略不允许在命名空间间声明主机名。
先决条件
- 必须具有集群管理员权限。
流程
使用以下命令编辑
ingresscontroller
资源变量的.spec.
routeAdmission 字段:oc -n openshift-ingress-operator patch ingresscontroller/default --patch '{"spec":{"routeAdmission":{"namespaceOwnership":"InterNamespaceAllowed"}}}' --type=merge
$ oc -n openshift-ingress-operator patch ingresscontroller/default --patch '{"spec":{"routeAdmission":{"namespaceOwnership":"InterNamespaceAllowed"}}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress 控制器配置参数
spec: routeAdmission: namespaceOwnership: InterNamespaceAllowed ...
spec: routeAdmission: namespaceOwnership: InterNamespaceAllowed ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示您还可以应用以下 YAML 来配置路由准入策略:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.9.12. 使用通配符路由 复制链接链接已复制到粘贴板!
HAProxy Ingress Controller 支持通配符路由。Ingress Operator 使用 wildcardPolicy
来配置 Ingress Controller 的 ROUTER_ALLOW_WILDCARD_ROUTES
环境变量。
Ingress Controller 的默认行为是接受采用 None
通配符策略的路由,该策略与现有 IngressController
资源向后兼容。
流程
配置通配符策略。
使用以下命令来编辑
IngressController
资源:oc edit IngressController
$ oc edit IngressController
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
spec
下,将wildcardPolicy
字段设置为 WildcardsDisallowed
或WildcardsAllowed
:spec: routeAdmission: wildcardPolicy: WildcardsDisallowed # or WildcardsAllowed
spec: routeAdmission: wildcardPolicy: WildcardsDisallowed # or WildcardsAllowed
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.9.13. HTTP 标头配置 复制链接链接已复制到粘贴板!
OpenShift Container Platform 提供了不同的使用 HTTP 标头的方法。在设置或删除标头时,您可以使用 Ingress Controller 中的特定字段或单独的路由来修改请求和响应标头。您还可以使用路由注解设置某些标头。配置标头的各种方法在协同工作时可能会带来挑战。
您只能在 IngressController
或 Route
CR 中设置或删除标头,您无法附加它们。如果使用值设置 HTTP 标头,则该值必须已完成,且在以后不需要附加。在附加标头(如 X-Forwarded-For 标头)时,请使用 spec.httpHeaders.forwardedHeaderPolicy
字段,而不是 spec.httpHeaders.actions
。
8.9.13.1. 优先级顺序 复制链接链接已复制到粘贴板!
当在 Ingress Controller 和路由中修改相同的 HTTP 标头时,HAProxy 会根据它是请求还是响应标头来优先选择操作。
- 对于 HTTP 响应标头,Ingress Controller 中指定的操作会在路由中指定的操作后执行。这意味着 Ingress Controller 中指定的操作具有优先权。
- 对于 HTTP 请求标头,路由中指定的操作会在 Ingress Controller 中指定的操作后执行。这意味着路由中指定的操作具有优先权。
例如,集群管理员使用以下配置设置 X-Frame-Options 响应标头,其值为 DENY
:
IngressController
spec 示例
路由所有者设置 Ingress Controller 中设置的相同响应标头,但使用以下配置值 SAMEORIGIN
:
Route
规格示例
当 IngressController
spec 和 Route
spec 都配置 X-Frame-Options 标头时,Ingress Controller 中的全局级别为这个标头设置的值将具有优先权,即使一个特定的路由允许帧。对于请求标头,Route
spec 值会覆盖 IngressController
spec 值。
发生这个优先级,因为 haproxy.config
文件使用以下逻辑,其中 Ingress Controller 被视为前端,单独的路由被视为后端。应用到前端配置的标头值 DENY
使用后端中设置的值 SAMEORIGIN
覆盖相同的标头:
另外,Ingress Controller 或路由中定义的任何操作都覆盖使用路由注解设置的值。
8.9.13.2. 特殊情况标头 复制链接链接已复制到粘贴板!
以下标头可能会阻止完全被设置或删除,或者在特定情况下允许:
标头名称 | 使用 IngressController spec 进行配置 | 使用 Route 规格进行配置 | 禁止的原因 | 使用其他方法进行配置 |
---|---|---|---|---|
| 否 | 否 |
| 否 |
| 否 | 是 |
当使用 | 否 |
| 否 | 否 |
|
是: |
| 否 | 否 | HAProxy 集的 Cookie 用于会话跟踪,用于将客户端连接映射到特定的后端服务器。允许设置这些标头可能会影响 HAProxy 的会话关联,并限制 HAProxy 的 Cookie 的所有权。 | 是:
|
8.9.14. 在 Ingress Controller 中设置或删除 HTTP 请求和响应标头 复制链接链接已复制到粘贴板!
出于合规的原因,您可以设置或删除某些 HTTP 请求和响应标头。您可以为 Ingress Controller 提供的所有路由或特定路由设置或删除这些标头。
例如,您可能希望将集群中运行的应用程序迁移到使用 mutual TLS,这需要您的应用程序检查 X-Forwarded-Client-Cert 请求标头,但 OpenShift Container Platform 默认 Ingress Controller 提供了一个 X-SSL-Client-Der 请求标头。
以下流程修改 Ingress Controller 来设置 X-Forwarded-Client-Cert 请求标头,并删除 X-SSL-Client-Der 请求标头。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问 OpenShift Container Platform 集群。
流程
编辑 Ingress Controller 资源:
oc -n openshift-ingress-operator edit ingresscontroller/default
$ oc -n openshift-ingress-operator edit ingresscontroller/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 X-SSL-Client-Der HTTP 请求标头替换为 X-Forwarded-Client-Cert HTTP 请求标头:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意对于 HTTP 响应设置动态标头值,允许示例 fetchers 是
res.hdr
和ssl_c_der
。对于 HTTP 请求设置动态标头值,允许示例获取器为req.hdr
和ssl_c_der
。请求和响应动态值都可以使用lower
和base64
转换器。- 保存文件以使改变生效。
8.9.15. 使用 X-Forwarded 标头 复制链接链接已复制到粘贴板!
您可以将 HAProxy Ingress Controller 配置为指定如何处理 HTTP 标头的策略,其中包括 Forwarded
和 X-Forwarded-For
。Ingress Operator 使用 HTTPHeaders
字段配置 Ingress Controller 的 ROUTER_SET_FORWARDED_HEADERS
环境变量。
流程
为 Ingress Controller 配置
HTTPHeaders
字段。使用以下命令来编辑
IngressController
资源:oc edit IngressController
$ oc edit IngressController
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
spec
下,将HTTPHeaders
策略字段设置为Append
、Replace
、IfNone
或Never
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.9.15.1. 使用案例示例 复制链接链接已复制到粘贴板!
作为集群管理员,您可以:
配置将
X-Forwarded-For
标头注入每个请求的外部代理,然后将其转发到 Ingress Controller。要将 Ingress Controller 配置为通过未修改的标头传递,您需要指定
never
策略。然后,Ingress Controller 不会设置标头,应用程序只接收外部代理提供的标头。将 Ingress Controller 配置为通过未修改的外部代理在外部集群请求上设置
X-Forwarded-For
标头。要将 Ingress Controller 配置为在不通过外部代理的内部集群请求上设置
X-Forwarded-For
标头,请指定if-none
策略。如果 HTTP 请求已经通过外部代理设置了标头,则 Ingress Controller 会保留它。如果缺少标头,因为请求没有通过代理,Ingress Controller 会添加标头。
作为应用程序开发人员,您可以:
配置特定于应用程序的外部代理来注入
X-Forwarded-For
标头。要配置 Ingress Controller,以便在不影响其他路由策略的情况下将标头传递到应用程序的路由,请在应用程序的路由上添加注解
haproxy.router.openshift.io/set-forwarded-headers: if-none
或haproxy.router.openshift.io/set-forwarded-headers: never
。注意您可以根据每个路由设置
haproxy.router.openshift.io/set-forwarded-headers
注解,独立于 Ingress Controller 的全局设置值。
8.9.16. 在 Ingress Controller 上启用和禁用 HTTP/2 复制链接链接已复制到粘贴板!
您可以在 HAProxy 中启用或禁用透明端到端的 HTTP/2 连接。此功能使应用程序所有者利用 HTTP/2 协议功能,包括单一连接、标头压缩、二 进制流等等。
您可以为单个 Ingress Controller 或整个集群启用或禁用 HTTP/2 连接。
要在从客户端到 HAProxy 的连接中启用 HTTP/2,路由必须指定一个自定义证书。使用默认证书的路由无法使用 HTTP/2。这一限制是避免连接并发问题(如客户端为使用相同证书的不同路由重新使用连接)所必需的。
从 HAProxy 到应用程序 pod 的连接只能将 HTTP/2 用于 re-encrypt 路由,而不适用于 edge-terminated 或 insecure 路由。存在这个限制的原因是,在与后端协商使用 HTTP/2 时,HAProxy 要使用 ALPN(Application-Level Protocol Negotiation),它是一个 TLS 的扩展。这意味着,端到端的 HTTP/2 适用于 passthrough 和 re-encrypt 路由,而不适用于 edge-terminated 路由。
您可以使用带有不安全路由的 HTTP/2,无论 Ingress Controller 是否启用或禁用了 HTTP/2。
对于非 passthrough 路由,Ingress Controller 会独立于客户端的连接来协商它与应用程序的连接。这意味着,客户端可以连接到 Ingress Controller 并协商 HTTP/1.1,Ingress Controller 可连接到应用程序,协商 HTTP/2 并使用 HTTP/2 连接将客户端 HTTP/1.1 连接转发请求。如果客户端随后试图将其连接从 HTTP/1.1 升级到 WebSocket 协议,这会导致问题。因为 Ingress Controller 无法将 WebSocket 转发到 HTTP/2,也无法将其 HTTP/2 的连接升级到 WebSocket。因此,如果您有一个应用程序旨在接受 WebSocket 连接,则必须允许使用 HTTP/2 协议,或者其它客户端将无法升级到 WebSocket 协议。
8.9.16.1. 启用 HTTP/2 复制链接链接已复制到粘贴板!
您可以在特定 Ingress Controller 上启用 HTTP/2,也可以为整个集群启用 HTTP/2。
流程
要在特定 Ingress Controller 上启用 HTTP/2,请输入
oc annotate
命令:oc -n openshift-ingress-operator annotate ingresscontrollers/<ingresscontroller_name> ingress.operator.openshift.io/default-enable-http2=true
$ oc -n openshift-ingress-operator annotate ingresscontrollers/<ingresscontroller_name> ingress.operator.openshift.io/default-enable-http2=true
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<ingresscontroller_name>
替换为 Ingress Controller 的名称以启用 HTTP/2。
要为整个集群启用 HTTP/2,请输入
oc annotate
命令:oc annotate ingresses.config/cluster ingress.operator.openshift.io/default-enable-http2=true
$ oc annotate ingresses.config/cluster ingress.operator.openshift.io/default-enable-http2=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
或者,您可以应用以下 YAML 代码来启用 HTTP/2:
8.9.16.2. 禁用 HTTP/2 复制链接链接已复制到粘贴板!
您可以在特定 Ingress Controller 上禁用 HTTP/2,也可以为整个集群禁用 HTTP/2。
流程
要在特定 Ingress Controller 上禁用 HTTP/2,请输入
oc annotate
命令:oc -n openshift-ingress-operator annotate ingresscontrollers/<ingresscontroller_name> ingress.operator.openshift.io/default-enable-http2=false
$ oc -n openshift-ingress-operator annotate ingresscontrollers/<ingresscontroller_name> ingress.operator.openshift.io/default-enable-http2=false
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
<ingresscontroller_name>
替换为 Ingress Controller 的名称以禁用 HTTP/2。
要为整个集群禁用 HTTP/2,请输入
oc annotate
命令:oc annotate ingresses.config/cluster ingress.operator.openshift.io/default-enable-http2=false
$ oc annotate ingresses.config/cluster ingress.operator.openshift.io/default-enable-http2=false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
或者,您可以应用以下 YAML 代码来禁用 HTTP/2:
8.9.17. 为 Ingress Controller 配置 PROXY 协议 复制链接链接已复制到粘贴板!
当 Ingress Controller 使用 HostNetwork
、NodePortService
或 Private
端点发布策略类型时,集群管理员可以配置 PROXY 协议。PROXY 协议使负载均衡器能够为 Ingress Controller 接收的连接保留原始客户端地址。原始客户端地址可用于记录、过滤和注入 HTTP 标头。在默认配置中,Ingress Controller 接收的连接只包含与负载均衡器关联的源地址。
使用 Keepalived Ingress Virtual IP (VIP) 在非云平台上带有安装程序置备的集群的默认 Ingress Controller 不支持 PROXY 协议。
PROXY 协议使负载均衡器能够为 Ingress Controller 接收的连接保留原始客户端地址。原始客户端地址可用于记录、过滤和注入 HTTP 标头。在默认配置中,Ingress Controller 接收的连接只包含与负载均衡器关联的源 IP 地址。
对于 passthrough 路由配置,OpenShift Container Platform 集群中的服务器无法观察原始客户端源 IP 地址。如果您需要知道原始客户端源 IP 地址,请为 Ingress Controller 配置 Ingress 访问日志记录,以便您可以查看客户端源 IP 地址。
对于重新加密和边缘路由,OpenShift Container Platform 路由器设置 Forwarded
和 X-Forwarded-For
标头,以便应用程序工作负载检查客户端源 IP 地址。
如需有关 Ingress 访问日志的更多信息,请参阅"配置 Ingress 访问日志"。
使用 LoadBalancerService
端点发布策略类型时不支持为 Ingress Controller 配置 PROXY 协议。具有这个限制的原因是,当 OpenShift Container Platform 在云平台中运行时,IngressController 指定应使用服务负载均衡器,Ingress Operator 会配置负载均衡器服务,并根据保留源地址的平台要求启用 PROXY 协议。
您必须将 OpenShift Container Platform 和外部负载均衡器配置为使用 PROXY 协议或使用 TCP。
云部署不支持此功能。具有这个限制的原因是,当 OpenShift Container Platform 在云平台中运行时,IngressController 指定应使用服务负载均衡器,Ingress Operator 会配置负载均衡器服务,并根据保留源地址的平台要求启用 PROXY 协议。
您必须将 OpenShift Container Platform 和外部负载均衡器配置为使用 PROXY 协议或使用传输控制协议 (TCP)。
先决条件
- 已创建一个 Ingress Controller。
流程
在 CLI 中输入以下命令来编辑 Ingress Controller 资源:
oc -n openshift-ingress-operator edit ingresscontroller/default
$ oc -n openshift-ingress-operator edit ingresscontroller/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置 PROXY 配置:
如果您的 Ingress Controller 使用
HostNetwork
端点发布策略类型,请将spec.endpointPublishingStrategy.hostNetwork.protocol
子字段设置为PROXY
:hostNetwork
配置为PROXY
的示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的 Ingress Controller 使用
NodePortService
端点发布策略类型,请将spec.endpointPublishingStrategy.nodePort.protocol
子字段设置为PROXY
:nodePort
配置为PROXY
示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您的 Ingress Controller 使用
Private
端点发布策略类型,请将spec.endpointPublishingStrategy.private.protocol
子字段设置为PROXY
:到
PROXY
的私有
配置示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.9.18. 使用 appsDomain 选项指定备选集群域 复制链接链接已复制到粘贴板!
作为集群管理员,您可以通过配置 appsDomain
字段来为用户创建的路由指定默认集群域替代内容。appsDomain
字段是 OpenShift Container Platform 使用的可选域,而不是默认值,它在 domain
字段中指定。如果您指定了其它域,它会覆盖为新路由确定默认主机的目的。
例如,您可以将您公司的 DNS 域用作集群中运行的应用程序的路由和入口的默认域。
先决条件
- 已部署 OpenShift Container Platform 集群。
-
已安装
oc
命令行界面。
流程
通过为用户创建的路由指定备选默认域来配置
appsDomain
字段。编辑 ingress
集群
资源 :oc edit ingresses.config/cluster -o yaml
$ oc edit ingresses.config/cluster -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑 YAML 文件:
示例
appsDomain
配置为test.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
通过公开路由并验证路由域更改,验证现有路由是否包含
appsDomain
字段中指定的域名:注意在公开路由前,等待
openshift-apiserver
完成滚动更新。输入以下命令公开路由。命令输出
route.route.openshift.io/hello-openshift
以指定公开路由。oc expose service hello-openshift
$ oc expose service hello-openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来获取路由列表:
oc get routes
$ oc get routes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD hello-openshift hello_openshift-<my_project>.test.example.com hello-openshift 8080-tcp None
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD hello-openshift hello_openshift-<my_project>.test.example.com hello-openshift 8080-tcp None
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.9.19. 转换 HTTP 标头的大小写 复制链接链接已复制到粘贴板!
默认情况下,HAProxy HTTP 的标头名称是小写的,例如,会将 Host: xyz.com
更改为 host: xyz.com
。如果旧应用程序对 HTTP 标头名称中使用大小写敏感,请使用 Ingress Controller spec.httpHeaders.headerNameCaseAdjustments
API 字段进行调整来适应旧的应用程序,直到它们被改变。
OpenShift Container Platform 包含 HAProxy 2.8。如果要更新基于 web 的负载均衡器的这个版本,请确保将 spec.httpHeaders.headerNameCaseAdjustments
部分添加到集群的配置文件中。
作为集群管理员,您可以使用 oc patch
命令,或设置 Ingress Controller YAML 文件中的 HeaderNameCaseAdjustments
字段来转换 HTTP 标头的大小写。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
角色的用户访问集群。
流程
使用
oc patch
命令大写 HTTP 标头。运行以下命令,将 HTTP 标头从
host
更改为Host
:oc -n openshift-ingress-operator patch ingresscontrollers/default --type=merge --patch='{"spec":{"httpHeaders":{"headerNameCaseAdjustments":["Host"]}}}'
$ oc -n openshift-ingress-operator patch ingresscontrollers/default --type=merge --patch='{"spec":{"httpHeaders":{"headerNameCaseAdjustments":["Host"]}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
Route
资源 YAML 文件,以便注解可应用到应用程序。名为
my-application
的路由示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 设置
haproxy.router.openshift.io/h1-adjust-case
,以便 Ingress Controller 能够调整指定的host
请求标头。
通过在 Ingress Controller YAML 配置文件中配置
HeaderNameCaseAdjustments
字段指定调整。以下示例 Ingress Controller YAML 文件将 HTTP/1 请求的
host
标头调整为Host
,以适当地注解路由:Ingress Controller YAML 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例路由中,使用
haproxy.router.openshift.io/h1-adjust-case
注解启用对 HTTP 响应标头名称的大小写调整:路由 YAML 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 将
haproxy.router.openshift.io/h1-adjust-case
设置为 true。
8.9.20. 使用路由器压缩 复制链接链接已复制到粘贴板!
您可以将 HAProxy Ingress Controller 配置为为特定 MIME 类型全局指定路由器压缩。您可以使用 mimeTypes
变量定义压缩应用到的 MIME 类型的格式。类型包括:application, image, message, multipart, text, video, 或带有一个 "X-" 前缀的自定义类型。要查看 MIME 类型和子类型的完整表示法,请参阅 RFC1341。
为压缩分配的内存可能会影响最大连接。此外,对大型缓冲区的压缩可能导致延迟,如非常复杂的正则表达式或较长的正则表达式列表。
并非所有 MIME 类型从压缩中受益,但 HAProxy 仍然使用资源在指示时尝试压缩。通常而言,文本格式(如 html、css 和 js)与压缩格式获益,但已经压缩的格式(如图像、音频和视频)可能会因为需要压缩操作而无法获得太多的好处。
流程
为 Ingress Controller 配置
httpCompression
字段。使用以下命令来编辑
IngressController
资源:oc edit -n openshift-ingress-operator ingresscontrollers/default
$ oc edit -n openshift-ingress-operator ingresscontrollers/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
spec
下,将httpCompression
策略字段设置为mimeTypes
,并指定应该应用压缩的 MIME 类型列表:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.9.21. 公开路由器指标 复制链接链接已复制到粘贴板!
您可以在默认统计端口 1936 上以 Prometheus 格式公开 HAProxy 路由器指标。外部指标收集和聚合系统(如 Prometheus)可以访问 HAProxy 路由器指标。您可以在浏览器中以 HTML 的形式和以逗号分隔的值 (CSV) 格式查看 HAProxy 路由器指标。
先决条件
- 您已将防火墙配置为访问默认统计数据端口 1936。
流程
运行以下命令来获取路由器 pod 名称:
oc get pods -n openshift-ingress
$ oc get pods -n openshift-ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE router-default-76bfffb66c-46qwp 1/1 Running 0 11h
NAME READY STATUS RESTARTS AGE router-default-76bfffb66c-46qwp 1/1 Running 0 11h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 获取路由器的用户名和密码,路由器 Pod 存储在
/var/lib/haproxy/conf/metrics-auth/statsUsername
和/var/lib/haproxy/conf/metrics-auth/statsPassword
文件中:运行以下命令来获取用户名:
oc rsh <router_pod_name> cat metrics-auth/statsUsername
$ oc rsh <router_pod_name> cat metrics-auth/statsUsername
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来获取密码:
oc rsh <router_pod_name> cat metrics-auth/statsPassword
$ oc rsh <router_pod_name> cat metrics-auth/statsPassword
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
运行以下命令,获取路由器 IP 和指标证书:
oc describe pod <router_pod>
$ oc describe pod <router_pod>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,以 Prometheus 格式获取原始统计信息:
curl -u <user>:<password> http://<router_IP>:<stats_port>/metrics
$ curl -u <user>:<password> http://<router_IP>:<stats_port>/metrics
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来安全地访问指标:
curl -u user:password https://<router_IP>:<stats_port>/metrics -k
$ curl -u user:password https://<router_IP>:<stats_port>/metrics -k
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,访问默认的 stats 端口 1936:
curl -u <user>:<password> http://<router_IP>:<stats_port>/metrics
$ curl -u <user>:<password> http://<router_IP>:<stats_port>/metrics
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 8.1. 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过在浏览器中输入以下 URL 来启动 stats 窗口:
http://<user>:<password>@<router_IP>:<stats_port>
http://<user>:<password>@<router_IP>:<stats_port>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:通过在浏览器中输入以下 URL 来获取 CSV 格式的统计信息:
http://<user>:<password>@<router_ip>:1936/metrics;csv
http://<user>:<password>@<router_ip>:1936/metrics;csv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.9.22. 自定义 HAProxy 错误代码响应页面 复制链接链接已复制到粘贴板!
作为集群管理员,您可以为 503、404 或两个错误页面指定自定义错误代码响应页面。当应用 Pod 没有运行时,HAProxy 路由器会提供一个 503 错误页面,如果请求的 URL 不存在,则 HAProxy 路由器会提供 404 错误页面。例如,如果您自定义 503 错误代码响应页面,则应用 Pod 未运行时会提供页面,并且 HAProxy 路由器为不正确的路由或不存在的路由提供默认的 404 错误代码 HTTP 响应页面。
自定义错误代码响应页面在配置映射中指定,然后修补至 Ingress Controller。配置映射键有两个可用的文件名,如下所示:error-page-503.http
和 error-page-404.http
。
自定义 HTTP 错误代码响应页面必须遵循 HAProxy HTTP 错误页面配置指南。以下是默认 OpenShift Container Platform HAProxy 路由器 http 503 错误代码响应页面的示例。您可以使用默认内容作为模板来创建自己的自定义页面。
默认情况下,当应用没有运行或者路由不正确或不存在时,HAProxy 路由器仅提供一个 503 错误页面。此默认行为与 OpenShift Container Platform 4.8 及更早版本中的行为相同。如果没有提供用于自定义 HTTP 错误代码响应的配置映射,且您使用的是自定义 HTTP 错误代码响应页面,路由器会提供默认的 404 或 503 错误代码响应页面。
如果您使用 OpenShift Container Platform 默认 503 错误代码页面作为自定义的模板,文件中的标头需要编辑器而不是使用 CRLF 行结尾。
流程
在
openshift-config
命名空间中创建一个名为my-custom-error-code-pages
的配置映射:oc -n openshift-config create configmap my-custom-error-code-pages \ --from-file=error-page-503.http \ --from-file=error-page-404.http
$ oc -n openshift-config create configmap my-custom-error-code-pages \ --from-file=error-page-503.http \ --from-file=error-page-404.http
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果没有为自定义错误代码响应页面指定正确的格式,则会出现路由器 pod 中断。要解决此中断,您必须删除或更正配置映射并删除受影响的路由器 pod,以便使用正确的信息重新创建它们。
对 Ingress Controller 进行补丁以根据名称引用
my-custom-error-code-pages
配置映射:oc patch -n openshift-ingress-operator ingresscontroller/default --patch '{"spec":{"httpErrorCodePages":{"name":"my-custom-error-code-pages"}}}' --type=merge
$ oc patch -n openshift-ingress-operator ingresscontroller/default --patch '{"spec":{"httpErrorCodePages":{"name":"my-custom-error-code-pages"}}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ingress Operator 将
my-custom-error-code-pages
配置映射从openshift-config
命名空间复制到openshift-ingress
命名空间。Operator 根据openshift-ingress
命名空间中的模式<your_ingresscontroller_name>-errorpages
命名配置映射。显示副本:
oc get cm default-errorpages -n openshift-ingress
$ oc get cm default-errorpages -n openshift-ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME DATA AGE default-errorpages 2 25s
NAME DATA AGE default-errorpages 2 25s
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 配置映射名称示例为
default-errorpages
,因为default
Ingress Controller 自定义资源 (CR) 已被修补。
确认包含自定义错误响应页面的配置映射挂载到路由器卷中,其中配置映射键是具有自定义 HTTP 错误代码响应的文件名:
对于 503 自定义 HTTP 自定义错误代码响应:
oc -n openshift-ingress rsh <router_pod> cat /var/lib/haproxy/conf/error_code_pages/error-page-503.http
$ oc -n openshift-ingress rsh <router_pod> cat /var/lib/haproxy/conf/error_code_pages/error-page-503.http
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 404 自定义 HTTP 自定义错误代码响应:
oc -n openshift-ingress rsh <router_pod> cat /var/lib/haproxy/conf/error_code_pages/error-page-404.http
$ oc -n openshift-ingress rsh <router_pod> cat /var/lib/haproxy/conf/error_code_pages/error-page-404.http
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证自定义错误代码 HTTP 响应:
创建测试项目和应用程序:
oc new-project test-ingress
$ oc new-project test-ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc new-app django-psql-example
$ oc new-app django-psql-example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于 503 自定义 http 错误代码响应:
- 停止应用的所有容器集。
运行以下 curl 命令或在浏览器中访问路由主机名:
curl -vk <route_hostname>
$ curl -vk <route_hostname>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
对于 404 自定义 http 错误代码响应:
- 访问不存在的路由或路由不正确。
运行以下 curl 命令或在浏览器中访问路由主机名:
curl -vk <route_hostname>
$ curl -vk <route_hostname>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
检查
haproxy.config
文件中的errorfile
属性是否正确:oc -n openshift-ingress rsh <router> cat /var/lib/haproxy/conf/haproxy.config | grep errorfile
$ oc -n openshift-ingress rsh <router> cat /var/lib/haproxy/conf/haproxy.config | grep errorfile
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
8.9.23. 设置 Ingress Controller 最大连接数 复制链接链接已复制到粘贴板!
集群管理员可以设置 OpenShift 路由器部署的最大同时连接数。您可以修补现有的 Ingress Controller 来提高最大连接数。
先决条件
- 以下假设您已创建了 Ingress Controller
流程
更新 Ingress Controller,以更改 HAProxy 的最大连接数:
oc -n openshift-ingress-operator patch ingresscontroller/default --type=merge -p '{"spec":{"tuningOptions": {"maxConnections": 7500}}}'
$ oc -n openshift-ingress-operator patch ingresscontroller/default --type=merge -p '{"spec":{"tuningOptions": {"maxConnections": 7500}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告如果您设置了大于当前操作系统的
spec.tuningOptions.maxConnections
值,则 HAProxy 进程不会启动。有关这个参数的更多信息,请参阅"Ingress Controller 配置参数"部分中的表。
Ingress Node Firewall Operator 提供了一个无状态的、基于 eBPF 的防火墙,用于管理 OpenShift Container Platform 中的节点级别的入口流量。
9.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) 将以较低性能运行。
对于 OpenShift Container Platform 4.14 或更高的版本,您必须在 RHEL 9.0 或更高版本上运行 Ingress Node Firewall Operator。
9.2. 安装 Ingress Node Firewall Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 OpenShift Container Platform CLI 或 Web 控制台安装 Ingress Node Firewall Operator。
9.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 运行以下命令来创建
OperatorGroup
CR:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 订阅 Ingress Node Firewall Operator。
要为 Ingress Node Firewall Operator 创建
Subscription
CR,请输入以下命令: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.17.0-202211122336 Automatic true
NAME CSV APPROVAL APPROVED install-5cvnz ingress-node-firewall.4.17.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.17.0-202211122336 Ingress Node Firewall Operator 4.17.0-202211122336 ingress-node-firewall.4.17.0-202211102047 Succeeded
NAME DISPLAY VERSION REPLACES PHASE ingress-node-firewall.4.17.0-202211122336 Ingress Node Firewall Operator 4.17.0-202211122336 ingress-node-firewall.4.17.0-202211102047 Succeeded
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.2.2. 使用 Web 控制台安装 Ingress Node Firewall Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 Web 控制台安装 Operator。
先决条件
-
已安装 OpenShift CLI(
oc
)。 - 有管理员特权的帐户。
流程
安装 Ingress Node Firewall Operator:
- 在 OpenShift Container Platform Web 控制台中,点击 Operators → OperatorHub。
- 从可用的 Operator 列表中选择 Ingress Node Firewall Operator,然后点 Install。
- 在 Install Operator 页面中,在 Installed Namespace 下选择 Operator recommended Namespace。
- 点 Install。
验证 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
$ 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
注解。
9.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
9.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
匹配的所有节点上创建一个入口节点防火墙守护进程集。
9.3.2. Ingress Node Firewall Operator 示例配置 复制链接链接已复制到粘贴板!
以下示例中指定了完整的 Ingress Node 防火墙配置:
Ingress 节点防火墙配置对象示例
Operator 使用 CR,并在与 nodeSelector
匹配的所有节点上创建一个入口节点防火墙守护进程集。
9.3.3. Ingress 节点防火墙规则对象 复制链接链接已复制到粘贴板!
下表中描述了 Ingress Node Firewall 规则对象的字段:
字段 | 类型 | 描述 |
---|---|---|
|
| CR 对象的名称。 |
|
|
此对象的字段指定要应用防火墙规则的接口。例如, |
|
|
您可以使用 |
|
|
|
9.3.3.1. Ingress 对象配置 复制链接链接已复制到粘贴板!
ingress
对象的值在下表中定义:
字段 | 类型 | 描述 |
---|---|---|
|
| 允许您设置 CIDR 块。您可以从不同地址系列配置多个 CIDR。 注意
不同的 CIDR 允许您使用相同的顺序规则。如果同一节点有多个 |
|
|
对于每个
将 注意 Ingress 防火墙规则使用阻止任何无效配置的验证 Webhook 进行验证。验证 Webhook 会阻止阻塞任何关键集群服务,如 API 服务器。 |
9.3.3.2. Ingress 节点防火墙规则对象示例 复制链接链接已复制到粘贴板!
以下示例中指定了完整的 Ingress Node 防火墙配置:
Ingress 节点防火墙配置示例
- 1
- 节点上必须存在 <label_name> 和 <label_value>,且必须与应用到您希望
ingressfirewallconfig
CR 运行的节点的nodeselector
标签和值匹配。<label_value> 可以是true
或false
。通过使用nodeSelector
标签,您可以针对单独的节点组为目标,以使用ingressfirewallconfig
CR 应用不同的规则。
9.3.3.3. 零信任 Ingress Node Firewall 规则对象示例 复制链接链接已复制到粘贴板!
零信任 Ingress 节点防火墙规则可为多接口集群提供额外的安全性。例如,您可以使用零信任 Ingress Node Firewall 规则来丢弃除 SSH 之外的特定接口上的网络流量。
以下示例中指定了零信任 Ingress Node Firewall 规则集的完整配置:
用户需要为其提供应用程序使用的所有端口添加到允许列表,以确保正常工作。
零信任 Ingress 节点防火墙规则示例
eBPF Manager Operator 集成只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
9.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。
9.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
9.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
的 eBPFbpftool
输出的报告。这些报告包括用于或作为入口防火墙 XDP 处理数据包处理、更新统计信息和发出事件的查找表。
第 10 章 SR-IOV Operator 复制链接链接已复制到粘贴板!
10.1. 安装 SR-IOV Network Operator 复制链接链接已复制到粘贴板!
您可以在集群上安装单根 I/O 虚拟化(SR-IOV)网络 Operator,以管理 SR-IOV 网络设备和网络附加。
10.1.1. 安装 SR-IOV Network Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 OpenShift Container Platform CLI 或 Web 控制台安装单根 I/O 虚拟化(SR-IOV) Network Operator。
10.1.1.1. CLI:安装 SR-IOV Network Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 CLI 安装 Operator。
先决条件
- 在裸机环境中安装的集群,其中的节点带有支持 SR-IOV 的硬件。
-
安装 OpenShift CLI(
oc
)。 -
具有
cluster-admin
特权的帐户。
流程
输入以下命令创建
openshift-sriov-network-operator
命名空间:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来创建
OperatorGroup
自定义资源 (CR):Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令为 SR-IOV Network Operator 创建
Subscription
CR:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来创建
SriovoperatorConfig
资源:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证是否已安装 Operator,请输入以下命令,然后检查 Operator 的输出显示
Succeeded
:oc get csv -n openshift-sriov-network-operator \ -o custom-columns=Name:.metadata.name,Phase:.status.phase
$ oc get csv -n openshift-sriov-network-operator \ -o custom-columns=Name:.metadata.name,Phase:.status.phase
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.1.1.2. web 控制台:安装 SR-IOV Network Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以使用 Web 控制台安装 Operator。
先决条件
- 在裸机环境中安装的集群,其中的节点带有支持 SR-IOV 的硬件。
-
安装 OpenShift CLI(
oc
)。 -
具有
cluster-admin
特权的帐户。
流程
安装 SR-IOV Network Operator:
- 在 OpenShift Container Platform Web 控制台中,点击 Operators → OperatorHub。
- 从可用的 Operators 列表中选择 SR-IOV Network Operator,然后点击 Install。
- 在 Install Operator 页面中,在 Installed Namespace 下选择 Operator recommended Namespace。
- 点 Install。
验证 SR-IOV Network Operator 是否已成功安装:
- 导航到 Operators → Installed Operators 页面。
确保 SR-IOV Network Operator 在 openshift-sriov-network-operator 项目中列出,状态 为 InstallSucceeded。
注意在安装过程中,Operator 可能会显示 Failed 状态。如果安装过程结束后有 InstallSucceeded 信息,您可以忽略这个 Failed 信息。
如果 Operator 没有被成功安装,请按照以下步骤进行故障排除:
- 检查 Operator Subscriptions 和 Install Plans 选项卡中的 Status 项中是否有任何错误。
-
进入 Workloads → Pods 页面,在
openshift-sriov-network-operator
项目中检查 pod 的日志。 检查 YAML 文件的命名空间。如果缺少注解,您可以使用以下命令将注解
workload.openshift.io/allowed=management
添加到 Operator 命名空间中:oc annotate ns/openshift-sriov-network-operator workload.openshift.io/allowed=management
$ oc annotate ns/openshift-sriov-network-operator workload.openshift.io/allowed=management
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意对于单节点 OpenShift 集群,命名空间需要注解
workload.openshift.io/allowed=management
。
10.1.2. 后续步骤 复制链接链接已复制到粘贴板!
10.2. 配置 SR-IOV Network Operator 复制链接链接已复制到粘贴板!
Single Root I/O Virtualization(SR-IOV)Network Operator 管理集群中的 SR-IOV 网络设备和网络附加。
10.2.1. 配置 SR-IOV Network Operator 复制链接链接已复制到粘贴板!
创建一个
SriovOperatorConfig
自定义资源 (CR) 以部署所有 SR-IOV Operator 组件:使用以下 YAML 创建名为
sriovOperatorConfig.yaml
的文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
SriovOperatorConfig
资源的唯一有效名称是default
,它必须位于部署 Operator 的命名空间中。- 2
enableInjector
字段如果没有在 CR 中指定或明确设置为true
,则默认为false
或<none>
,这会防止任何network-resources-injector
pod 在命名空间中运行。建议的设置为true
。- 3
enableOperatorWebhook
字段如果没有在 CR 中指定或明确设置为 true,则默认为false
或<none>
,这会防止任何operator-webhook
pod 在命名空间中运行。建议的设置为true
。
运行以下命令来创建资源:
oc apply -f sriovOperatorConfig.yaml
$ oc apply -f sriovOperatorConfig.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.2.1.1. SR-IOV Network Operator 配置自定义资源 复制链接链接已复制到粘贴板!
sriovoperatorconfig
自定义资源的字段在下表中描述:
字段 | 类型 | 描述 |
---|---|---|
|
|
指定 SR-IOV Network Operator 实例的名称。默认值为 |
|
|
指定 SR-IOV Network Operator 实例的命名空间。默认值为 |
|
| 指定在所选节点上调度 SR-IOV 网络配置守护进程的节点选择。默认情况下,此字段没有设置,Operator 会在 worker 节点上部署 SR-IOV 网络配置守护进程集。 |
|
|
指定是否禁用节点排空过程,或者在应用新策略在节点上配置 NIC 时启用节点排空过程。将此字段设置为
对于单节点集群,在安装 Operator 后将此字段设置为 |
|
| 指定是否启用或禁用 Network Resources Injector 守护进程集。 |
|
| 指定是否启用或禁用 Operator Admission Controller webhook 守护进程集。 |
|
|
指定 Operator 的日志详细程度。默认情况下,此字段设置为 |
|
|
指定是否启用或禁用可选功能。例如, |
|
|
指定是否启用或禁用 SR-IOV Network Operator 指标。默认情况下,此字段设置为 |
10.2.1.2. 关于 Network Resources Injector(网络资源注入器) 复制链接链接已复制到粘贴板!
Network Resources Injector 是一个 Kubernetes Dynamic Admission Controller 应用。它提供以下功能:
- 根据 SR-IOV 网络附加定义注解,对 Pod 规格中的资源请求和限值进行修改,以添加 SR-IOV 资源名称。
-
使用 Downward API 卷修改 pod 规格,以公开 pod 注解、标签和巨页请求和限制。在 pod 中运行的容器可以作为
/etc/podnetinfo
路径下的文件来访问公开的信息。
当在 SriovOperatorConfig
CR 中将 enableInjector
设置为 true
时,SR-IOV Network Operator 会启用 Network Resources Injector。network-resources-injector
pod 作为守护进程集在所有 control plane 节点上运行。以下是在具有三个 control plane 节点的集群中运行的 Network Resources Injector pod 示例:
oc get pods -n openshift-sriov-network-operator
$ oc get pods -n openshift-sriov-network-operator
输出示例
NAME READY STATUS RESTARTS AGE network-resources-injector-5cz5p 1/1 Running 0 10m network-resources-injector-dwqpx 1/1 Running 0 10m network-resources-injector-lktz5 1/1 Running 0 10m
NAME READY STATUS RESTARTS AGE
network-resources-injector-5cz5p 1/1 Running 0 10m
network-resources-injector-dwqpx 1/1 Running 0 10m
network-resources-injector-lktz5 1/1 Running 0 10m
10.2.1.3. 禁用或启用网络资源注入器 复制链接链接已复制到粘贴板!
要禁用或启用 Network Resources Injector (网络资源注入器),请完成以下步骤。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。 - 您必须已安装了 SR-IOV Network Operator。
流程
设置
enableInjector
字段。将<value>
替换为false
来禁用这个功能;或替换为true
来启用这个功能。oc patch sriovoperatorconfig default \ --type=merge -n openshift-sriov-network-operator \ --patch '{ "spec": { "enableInjector": <value> } }'
$ oc patch sriovoperatorconfig default \ --type=merge -n openshift-sriov-network-operator \ --patch '{ "spec": { "enableInjector": <value> } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示您还可以应用以下 YAML 来更新 Operator:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.2.1.4. 关于 SR-IOV Network Operator 准入控制器 Webhook 复制链接链接已复制到粘贴板!
SR-IOV Network Operator Admission Controller Webhook 是一个 Kubernetes Dynamic Admission Controller 应用程序。它提供以下功能:
-
在创建或更新时,验证
SriovNetworkNodePolicy
CR。 -
修改
SriovNetworkNodePolicy
CR,在创建或更新 CR 时为priority
和deviceType
项设置默认值。
当在 SriovOperatorConfig
CR 中将 enableOperatorWebhook
设置为 true
时,Operator 会启用 SR-IOV Network Operator Admission Controller Webhook。operator-webhook
pod 在所有 control plane 节点上作为守护进程集运行。
禁用 SR-IOV Network Operator Admission Controller Webhook 时要小心。您可以在特定情况下禁用 webhook,如故障排除,或者想要使用不支持的设备。有关配置不支持的设备的详情,请参考将 SR-IOV Network Operator 配置为使用不支持的 NIC。
以下是在具有三个 control plane 节点的集群中运行的 Operator Admission Controller webhook pod 的示例:
oc get pods -n openshift-sriov-network-operator
$ oc get pods -n openshift-sriov-network-operator
输出示例
NAME READY STATUS RESTARTS AGE operator-webhook-9jkw6 1/1 Running 0 16m operator-webhook-kbr5p 1/1 Running 0 16m operator-webhook-rpfrl 1/1 Running 0 16m
NAME READY STATUS RESTARTS AGE
operator-webhook-9jkw6 1/1 Running 0 16m
operator-webhook-kbr5p 1/1 Running 0 16m
operator-webhook-rpfrl 1/1 Running 0 16m
10.2.1.5. 禁用或启用 SR-IOV Network Operator 准入控制器 Webhook 复制链接链接已复制到粘贴板!
要禁用或启用准入控制器 Webhook,请完成以下步骤。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。 - 您必须已安装了 SR-IOV Network Operator。
流程
设置
enableOperatorWebhook
字段。将<value>
替换为false
来禁用这个功能;或替换为true
来启用这个功能:oc patch sriovoperatorconfig default --type=merge \ -n openshift-sriov-network-operator \ --patch '{ "spec": { "enableOperatorWebhook": <value> } }'
$ oc patch sriovoperatorconfig default --type=merge \ -n openshift-sriov-network-operator \ --patch '{ "spec": { "enableOperatorWebhook": <value> } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示您还可以应用以下 YAML 来更新 Operator:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.2.1.6. 关于自定义节点选择器 复制链接链接已复制到粘贴板!
SR-IOV 网络配置守护进程在集群节点上发现并配置 SR-IOV 网络设备。默认情况下,它将部署到集群中的所有 worker
节点。您可以使用节点标签指定 SR-IOV 网络配置守护进程在哪些节点上运行。
10.2.1.7. 为 SR-IOV 网络配置守护进程配置自定义 NodeSelector 复制链接链接已复制到粘贴板!
SR-IOV 网络配置守护进程在集群节点上发现并配置 SR-IOV 网络设备。默认情况下,它将部署到集群中的所有 worker
节点。您可以使用节点标签指定 SR-IOV 网络配置守护进程在哪些节点上运行。
要指定部署了 SR-IOV 网络配置守护进程的节点,请完成以下步骤。
当您更新 configDaemonNodeSelector
字段时,SR-IOV 网络配置守护进程会在所选节点中重新创建。在重新创建守护进程时,集群用户无法应用任何新的 SR-IOV 网络节点策略或创建新的 SR-IOV Pod。
流程
要为 Operator 更新节点选择器,请输入以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<node_label>
替换为要应用的标签,如下例中:"node-role.kubernetes.io/worker": ""
。提示您还可以应用以下 YAML 来更新 Operator:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.2.1.8. 为单一节点安装配置 SR-IOV Network Operator 复制链接链接已复制到粘贴板!
默认情况下,SR-IOV Network Operator 会在每次策略更改前从节点排空工作负载。Operator 会执行这个操作,以确保在重新配置前没有使用虚拟功能的工作负载。
对于在单一节点上安装,没有其他节点来接收工作负载。因此,Operator 不得配置为从单一节点排空工作负载。
执行以下步骤禁用排空工作负载后,您必须删除所有使用 SR-IOV 网络接口的工作负载,然后才能更改任何 SR-IOV 网络节点策略。
先决条件
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
特权的用户身份登录。 - 您必须已安装了 SR-IOV Network Operator。
流程
要将
disableDrain
字段设置为true
,并将configDaemonNodeSelector
字段设置为node-role.kubernetes.io/master: ""
,请输入以下命令:oc patch sriovoperatorconfig default --type=merge -n openshift-sriov-network-operator --patch '{ "spec": { "disableDrain": true, "configDaemonNodeSelector": { "node-role.kubernetes.io/master": "" } } }'
$ oc patch sriovoperatorconfig default --type=merge -n openshift-sriov-network-operator --patch '{ "spec": { "disableDrain": true, "configDaemonNodeSelector": { "node-role.kubernetes.io/master": "" } } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示您还可以应用以下 YAML 来更新 Operator:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.2.1.9. 为托管 control plane 部署 SR-IOV Operator 复制链接链接已复制到粘贴板!
配置和部署托管服务集群后,您可以在托管集群中创建 SR-IOV Operator 订阅。SR-IOV pod 在 worker 机器上运行而不是在 control plane 上运行。
先决条件
您必须在 AWS 上配置和部署托管集群。
流程
创建命名空间和 Operator 组:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 SR-IOV Operator 的订阅:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证 SR-IOV Operator 是否已就绪,请运行以下命令并查看生成的输出:
oc get csv -n openshift-sriov-network-operator
$ oc get csv -n openshift-sriov-network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME DISPLAY VERSION REPLACES PHASE sriov-network-operator.4.17.0-202211021237 SR-IOV Network Operator 4.17.0-202211021237 sriov-network-operator.4.17.0-202210290517 Succeeded
NAME DISPLAY VERSION REPLACES PHASE sriov-network-operator.4.17.0-202211021237 SR-IOV Network Operator 4.17.0-202211021237 sriov-network-operator.4.17.0-202210290517 Succeeded
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要验证 SR-IOV pod 是否已部署,请运行以下命令:
oc get pods -n openshift-sriov-network-operator
$ oc get pods -n openshift-sriov-network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.2.2. 关于 SR-IOV 网络指标导出器 复制链接链接已复制到粘贴板!
Single Root I/O Virtualization (SR-IOV) 网络指标导出器读取 SR-IOV 虚拟功能 (VF) 的指标,并以 Prometheus 格式公开这些 VF 指标。启用 SR-IOV 网络指标导出器时,您可以使用 OpenShift Container Platform Web 控制台查询 SR-IOV VF 指标,来监控 SR-IOV pod 的网络活动。
当使用 web 控制台查询 SR-IOV VF 指标时,SR-IOV 网络指标导出器会获取并返回 VF 网络统计信息,以及 VF 附加到的 pod 的名称和命名空间。
下表中描述了指标导出器以 Prometheus 格式读取和公开的 SR-IOV VF 指标:
指标 | 描述 | 检查 VF 指标的 PromQL 查询示例 |
---|---|---|
| 每个虚拟功能接收的字节数。 |
|
| 每个虚拟功能传输的字节数。 |
|
| 每个虚拟功能接收的数据包。 |
|
| 每个虚拟功能传输的数据包。 |
|
| 每个虚拟功能接收后丢弃的数据包。 |
|
| 每个虚拟功能传输过程中丢弃的数据包。 |
|
| 每个虚拟功能接收的多播数据包。 |
|
| 每个虚拟功能接收的广播数据包。 |
|
| 链接到活跃 pod 的虚拟功能。 | - |
您还可以将这些查询与 kube-state-metrics 合并,以获取有关 SR-IOV pod 的更多信息。例如,您可以使用以下查询从标准 Kubernetes pod 标签获取 VF 网络统计信息以及应用程序名称:
(sriov_vf_tx_packets * on (pciAddr,node) group_left(pod,namespace) sriov_kubepoddevice) * on (pod,namespace) group_left (label_app_kubernetes_io_name) kube_pod_labels
(sriov_vf_tx_packets * on (pciAddr,node) group_left(pod,namespace) sriov_kubepoddevice) * on (pod,namespace) group_left (label_app_kubernetes_io_name) kube_pod_labels
10.2.2.1. 启用 SR-IOV 网络指标导出器 复制链接链接已复制到粘贴板!
默认情况下,单根 I/O 虚拟化 (SR-IOV) 网络指标导出器被禁用。要启用指标导出器,您必须将 spec.featureGates.metricsExporter
字段设置为 true
。
启用指标导出器后,SR-IOV Network Operator 仅在具有 SR-IOV 功能的节点上部署指标导出器。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您已以具有
cluster-admin
权限的用户身份登录。 - 已安装 SR-IOV Network Operator。
流程
运行以下命令来启用集群监控:
oc label ns/openshift-sriov-network-operator openshift.io/cluster-monitoring=true
$ oc label ns/openshift-sriov-network-operator openshift.io/cluster-monitoring=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要启用集群监控,您必须在安装了 SR-IOV Network Operator 的命名空间中创建
openshift.io/cluster-monitoring=true
标签。运行以下命令,将
spec.featureGates.metricsExporter
字段设置为true
:oc patch -n openshift-sriov-network-operator sriovoperatorconfig/default \ --type='merge' -p='{"spec": {"featureGates": {"metricsExporter": true}}}'
$ oc patch -n openshift-sriov-network-operator sriovoperatorconfig/default \ --type='merge' -p='{"spec": {"featureGates": {"metricsExporter": true}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,检查 SR-IOV 网络指标导出器是否已启用:
oc get pods -n openshift-sriov-network-operator
$ oc get pods -n openshift-sriov-network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE operator-webhook-hzfg4 1/1 Running 0 5d22h sriov-network-config-daemon-tr54m 1/1 Running 0 5d22h sriov-network-metrics-exporter-z5d7t 1/1 Running 0 10s sriov-network-operator-cc6fd88bc-9bsmt 1/1 Running 0 5d22h
NAME READY STATUS RESTARTS AGE operator-webhook-hzfg4 1/1 Running 0 5d22h sriov-network-config-daemon-tr54m 1/1 Running 0 5d22h sriov-network-metrics-exporter-z5d7t 1/1 Running 0 10s sriov-network-operator-cc6fd88bc-9bsmt 1/1 Running 0 5d22h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow sriov-network-metrics-exporter
pod 必须处于READY
状态。- 可选:使用 OpenShift Container Platform Web 控制台检查 SR-IOV 虚拟功能 (VF) 指标。如需更多信息,请参阅"查询指标"。
10.2.3. 后续步骤 复制链接链接已复制到粘贴板!
10.3. 卸载 SR-IOV Network Operator 复制链接链接已复制到粘贴板!
要卸载 SR-IOV Network Operator,您必须删除所有正在运行的 SR-IOV 工作负载,卸载 Operator,并删除 Operator 使用的 webhook。
10.3.1. 卸载 SR-IOV Network Operator 复制链接链接已复制到粘贴板!
作为集群管理员,您可以卸载 SR-IOV Network Operator。
先决条件
-
可以使用具有
cluster-admin
权限的账户访问 OpenShift Container Platform 集群。 - 已安装 SR-IOV Network Operator。
流程
删除所有 SR-IOV 自定义资源(CR):
oc delete sriovnetwork -n openshift-sriov-network-operator --all
$ oc delete sriovnetwork -n openshift-sriov-network-operator --all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete sriovnetworknodepolicy -n openshift-sriov-network-operator --all
$ oc delete sriovnetworknodepolicy -n openshift-sriov-network-operator --all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete sriovibnetwork -n openshift-sriov-network-operator --all
$ oc delete sriovibnetwork -n openshift-sriov-network-operator --all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 按照 "Deleting Operators from a cluster" 部分的说明从集群中移除 SR-IOV Network Operator。
卸载 SR-IOV Network Operator 后,删除在集群中保留的 SR-IOV 自定义资源定义:
oc delete crd sriovibnetworks.sriovnetwork.openshift.io
$ oc delete crd sriovibnetworks.sriovnetwork.openshift.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete crd sriovnetworknodepolicies.sriovnetwork.openshift.io
$ oc delete crd sriovnetworknodepolicies.sriovnetwork.openshift.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete crd sriovnetworknodestates.sriovnetwork.openshift.io
$ oc delete crd sriovnetworknodestates.sriovnetwork.openshift.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete crd sriovnetworkpoolconfigs.sriovnetwork.openshift.io
$ oc delete crd sriovnetworkpoolconfigs.sriovnetwork.openshift.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete crd sriovnetworks.sriovnetwork.openshift.io
$ oc delete crd sriovnetworks.sriovnetwork.openshift.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete crd sriovoperatorconfigs.sriovnetwork.openshift.io
$ oc delete crd sriovoperatorconfigs.sriovnetwork.openshift.io
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 SR-IOV Webhook:
oc delete mutatingwebhookconfigurations network-resources-injector-config
$ oc delete mutatingwebhookconfigurations network-resources-injector-config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete MutatingWebhookConfiguration sriov-operator-webhook-config
$ oc delete MutatingWebhookConfiguration sriov-operator-webhook-config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc delete ValidatingWebhookConfiguration sriov-operator-webhook-config
$ oc delete ValidatingWebhookConfiguration sriov-operator-webhook-config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 SR-IOV Network Operator 命名空间:
oc delete namespace openshift-sriov-network-operator
$ oc delete namespace openshift-sriov-network-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Legal Notice
复制链接链接已复制到粘贴板!
Copyright © 2025 Red Hat
OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).
Modified versions must remove all Red Hat trademarks.
Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.
Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.