Eventing
在 OpenShift Serverless 中使用事件驱动的架构
摘要
第 1 章 Knative Eventing 复制链接链接已复制到粘贴板!
OpenShift Container Platform 上的 Knative Eventing 可让开发人员使用 事件驱动的架构和无服务器应用程序。事件驱动的体系结构是基于事件和事件用户间分离关系的概念。
事件生成者创建事件,事件 sink、或消费者接收事件。Knative Eventing 使用标准 HTTP POST 请求来发送和接收事件制作者和 sink 之间的事件。这些事件符合 CloudEvents 规范,它允许在任何编程语言中创建、解析、发送和接收事件。
1.1. Knative Eventing 用例: 复制链接链接已复制到粘贴板!
Knative Eventing 支持以下用例:
- 在不创建消费者的情况下发布事件
- 您可以将事件作为 HTTP POST 发送到代理,并使用绑定分离生成事件的应用程序的目标配置。
- 在不创建发布程序的情况下消费事件
- 您可以使用 Trigger 来根据事件属性消费来自代理的事件。应用程序以 HTTP POST 的形式接收事件。
要启用多种 sink 类型的交付,Knative Eventing 会定义以下通用接口,这些接口可由多个 Kubernetes 资源实现:
- 可寻址的资源
-
能够接收和确认通过 HTTP 发送的事件到 Event 的
status.address.url字段中定义的地址。KubernetesService资源也满足可寻址的接口。 - 可调用的资源
-
能够通过 HTTP 接收事件并转换它,并在 HTTP 响应有效负载中返回
0或1新事件。这些返回的事件可能会象处理外部事件源中的事件一样进一步处理。
第 2 章 事件源 复制链接链接已复制到粘贴板!
2.1. 事件源 复制链接链接已复制到粘贴板!
Knative 事件源可以是生成或导入云事件的任何 Kubernetes 对象,并将这些事件转发到另一个端点,称为接收器(sink)。事件源对于开发对事件做出反应的分布式系统至关重要。
您可以在 OpenShift Container Platform web 控制台、Knative (kn) CLI 或应用 YAML 文件来创建和管理 Knative 事件源。
目前,OpenShift Serverless 支持以下事件源类型:
您还可以创建自定义事件源。
2.1.1. 创建事件源 复制链接链接已复制到粘贴板!
Knative 事件源可以是生成或导入云事件的任何 Kubernetes 对象,并将这些事件转发到另一个端点,称为接收器(sink)。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
- 已登陆到 web 控制台。
-
在 OpenShift Container Platform 上具有
cluster-admin权限,或者具有 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 的集群或专用管理员权限。
流程
- 在 OpenShift Container Platform web 控制台中导航至 Serverless → Eventing。
- 在 Create 列表中,选择 Event Source。您将被定向到 Event Sources 页面。
- 选择您要创建的事件源类型。
2.2. 创建 API 服务器源 复制链接链接已复制到粘贴板!
API 服务器源是一个事件源,可用于将事件接收器(sink),如 Knative 服务,连接到 Kubernetes API 服务器。API 服务器源监视 Kubernetes 事件并将其转发到 Knative Eventing 代理。
2.2.1. 使用 Web 控制台创建 API 服务器源 复制链接链接已复制到粘贴板!
在集群中安装 Knative Eventing 后,您可以使用 web 控制台创建 API 服务器源。使用 OpenShift Container Platform Web 控制台提供了一个简化且直观的用户界面来创建事件源。
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI(
oc)。
如果要重新使用现有服务帐户,您可以修改现有的 ServiceAccount 资源,使其包含所需的权限,而不是创建新资源。
以 YAML 文件形式,为事件源创建服务帐户、角色和角色绑定:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 YAML 文件:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 导航到 +Add → Event Source。此时会显示 Event Sources 页面。
- 可选:如果您的事件源有多个供应商,请从 Providers 列表中选择所需的供应商,以过滤供应商的可用事件源。
- 选择 ApiServerSource,然后点 Create Event Source。此时会显示 Create Event Source 页面。
使用 Form view 或 YAML view 配置 ApiServerSource 设置:
注意您可以在 Form view 和 YAML view 间进行切换。在不同视图间切换时数据会被保留。
-
输入
v1作为 APIVERSION 和Event作为 KIND。 - 为您创建的服务帐户选择 Service Account Name。
在 Target 部分中,选择您的事件 sink。这可以是 Resource 或一个 URI :
- 选择 Resource 使用频道、代理或服务作为事件源的事件 sink。
- 选择 URI,以指定事件要路由到的 Uniform Resource Identifier (URI)。
-
输入
- 点 Create。
验证
创建 API 服务器源后,在 Topology 视图中查看它来检查它是否已连接到事件 sink。
如果使用 URI sink,您可以通过右键单击 URI sink → Edit URI 来修改 URI。
删除 API 服务器源
- 导航到 Topology 视图。
- 右键点击 API 服务器源并选择 Delete ApiServerSource。
2.2.2. 使用 Knative CLI 创建 API 服务器源 复制链接链接已复制到粘贴板!
您可以使用 kn source apiserver create 命令,使用 kn CLI 创建 API 服务器源。使用 kn CLI 创建 API 服务器源可提供比直接修改 YAML 文件更精简且直观的用户界面。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI(
oc)。 -
已安装 Knative (
kn) CLI。
如果要重新使用现有服务帐户,您可以修改现有的 ServiceAccount 资源,使其包含所需的权限,而不是创建新资源。
以 YAML 文件形式,为事件源创建服务帐户、角色和角色绑定:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 YAML 文件:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建具有事件 sink 的 API 服务器源。在以下示例中,sink 是一个代理:
kn source apiserver create <event_source_name> --sink broker:<broker_name> --resource "event:v1" --service-account <service_account_name> --mode Resource
$ kn source apiserver create <event_source_name> --sink broker:<broker_name> --resource "event:v1" --service-account <service_account_name> --mode ResourceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要检查 API 服务器源是否已正确设置,请创建一个 Knative 服务,在日志中转储传入的信息:
kn service create event-display --image quay.io/openshift-knative/showcase
$ kn service create event-display --image quay.io/openshift-knative/showcaseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您使用代理作为事件 sink,请创建一个触发器将事件从
default代理过滤到服务:kn trigger create <trigger_name> --sink ksvc:event-display
$ kn trigger create <trigger_name> --sink ksvc:event-displayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过在 default 命名空间中启动 pod 来创建事件:
oc create deployment event-origin --image quay.io/openshift-knative/showcase
$ oc create deployment event-origin --image quay.io/openshift-knative/showcaseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过检查以下命令生成的输出来检查是否正确映射了控制器:
kn source apiserver describe <source_name>
$ kn source apiserver describe <source_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证 Kubernetes 事件是否已发送到 Knative,请查看 event-display 日志或使用 Web 浏览器查看事件。
要在网页浏览器中查看事件,请打开以下命令返回的链接:
kn service describe event-display -o url
$ kn service describe event-display -o urlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 图 2.1. 浏览器页面示例
或者,要在终端中查看日志,请输入以下命令查看 pod 的 event-display 日志:
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除 API 服务器源
删除触发器:
kn trigger delete <trigger_name>
$ kn trigger delete <trigger_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除事件源:
kn source apiserver delete <source_name>
$ kn source apiserver delete <source_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除服务帐户、集群角色和集群绑定:
oc delete -f authentication.yaml
$ oc delete -f authentication.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.2.1. Knative CLI sink 标记 复制链接链接已复制到粘贴板!
当使用 Knative (kn) CLI 创建事件源时,您可以使用 --sink 标志指定事件从该资源发送到的接收器。sink 可以是任何可寻址或可调用的资源,可以从其他资源接收传入的事件。
以下示例创建使用服务 http://event-display.svc.cluster.local 的接收器绑定作为接收器:
使用 sink 标记的命令示例
kn source binding create bind-heartbeat \ --namespace sinkbinding-example \ --subject "Job:batch/v1:app=heartbeat-cron" \ --sink http://event-display.svc.cluster.local \ --ce-override "sink=bound"
$ kn source binding create bind-heartbeat \
--namespace sinkbinding-example \
--subject "Job:batch/v1:app=heartbeat-cron" \
--sink http://event-display.svc.cluster.local \
--ce-override "sink=bound"
- 1
http://event-display.svc.cluster.local中的svc确定接收器是一个 Knative 服务。其他默认的接收器前缀包括channel和broker。
2.2.3. 使用 YAML 文件创建 API 服务器源 复制链接链接已复制到粘贴板!
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以可重复的方式描述事件源。要使用 YAML 创建 API 服务器源,您必须创建一个 YAML 文件来定义 ApiServerSource 对象,然后使用 oc apply 命令应用它。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
您已在与 API 服务器源 YAML 文件中定义的相同的命名空间中创建
default代理。 -
安装 OpenShift CLI (
oc) 。
如果要重新使用现有服务帐户,您可以修改现有的 ServiceAccount 资源,使其包含所需的权限,而不是创建新资源。
以 YAML 文件形式,为事件源创建服务帐户、角色和角色绑定:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 YAML 文件:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 API 服务器源创建为 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
ApiServerSourceYAML 文件:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要检查 API 服务器源是否已正确设置,请创建一个 Knative 服务作为 YAML 文件,在日志中转储传入的信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
ServiceYAML 文件:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个
Trigger对象作为一个 YAML 文件,该文件将事件从default代理过滤到上一步中创建的服务:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
TriggerYAML 文件:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过在 default 命名空间中启动 pod 来创建事件:
oc create deployment event-origin --image=quay.io/openshift-knative/showcase
$ oc create deployment event-origin --image=quay.io/openshift-knative/showcaseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令并检查输出,检查是否正确映射了控制器:
oc get apiserversource.sources.knative.dev testevents -o yaml
$ oc get apiserversource.sources.knative.dev testevents -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证 Kubernetes 事件是否已发送到 Knative,您可以查看 event-display 日志或使用 Web 浏览器查看事件。
要在网页浏览器中查看事件,请打开以下命令返回的链接:
oc get ksvc event-display -o jsonpath='{.status.url}'$ oc get ksvc event-display -o jsonpath='{.status.url}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 图 2.2. 浏览器页面示例
要在终端中查看日志,请输入以下命令查看 pod 的 event-display 日志:
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除 API 服务器源
删除触发器:
oc delete -f trigger.yaml
$ oc delete -f trigger.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除事件源:
oc delete -f k8s-events.yaml
$ oc delete -f k8s-events.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除服务帐户、集群角色和集群绑定:
oc delete -f authentication.yaml
$ oc delete -f authentication.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3. 创建 ping 源 复制链接链接已复制到粘贴板!
ping 源是一个事件源,可用于定期向事件消费者发送带有恒定有效负载的 ping 事件。ping 源可以用来调度发送事件,类似于计时器。
2.3.1. 使用 Web 控制台创建 ping 源 复制链接链接已复制到粘贴板!
在集群中安装 Knative Eventing 后,您可以使用 web 控制台创建 ping 源。使用 OpenShift Container Platform Web 控制台提供了一个简化且直观的用户界面来创建事件源。
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
- 在集群中安装了 OpenShift Serverless Operator、Knative Serving 和 Knative Eventing。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
要验证 ping 源是否可以工作,请创建一个简单的 Knative 服务,在服务日志中转储传入的信息。
- 导航到 +Add → YAML。
复制 YAML 示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Create。
在与上一步中创建的服务相同的命名空间中创建一个 ping 源,或您要将事件发送到的任何其他接收器。
- 导航到 +Add → Event Source。此时会显示 Event Sources 页面。
- 可选:如果您的事件源有多个供应商,请从 Providers 列表中选择所需的供应商,以过滤供应商的可用事件源。
选择 Ping Source,然后点击 Create Event Source。此时会显示 Create Event Source 页面。
注意您可以使用 Form view 或 YAML view 配置 PingSource 设置,并可以在两者间切换。在不同视图间切换时数据会被保留。
-
为 Schedule 输入一个值。在本例中,值为
*/2 * * *,它会创建一个 PingSource,每两分钟发送一条消息。 - 可选:您可以为 Data 输入一个值,它是消息的有效负载。
在 Target 部分中,选择您的事件 sink。这可以是 Resource 或一个 URI :
-
选择 Resource 使用频道、代理或服务作为事件源的事件 sink。在本例中,上一步中创建的
event-display服务被用作目标 资源。 - 选择 URI,以指定事件要路由到的 Uniform Resource Identifier (URI)。
-
选择 Resource 使用频道、代理或服务作为事件源的事件 sink。在本例中,上一步中创建的
- 点 Create。
验证
您可以通过查看 Topology 页面来验证 ping 源是否已创建并连接到接收器。
- 导航到 Topology。
查看 ping 源和接收器。
在 Web 浏览器中查看 event-display 服务。您应该在 Web UI 中看到 ping 源事件。
删除 ping 源
- 导航到 Topology 视图。
- 右键单击 API 服务器源,再选择 Delete Ping Source。
2.3.2. 使用 Knative CLI 创建 ping 源 复制链接链接已复制到粘贴板!
您可以使用 kn source ping create 命令,通过 Knative (kn) CLI 创建 ping 源。使用 Knative CLI 创建事件源提供了比直接修改 YAML 文件更精简且直观的用户界面。
先决条件
- 在集群中安装了 OpenShift Serverless Operator、Knative Serving 和 Knative Eventing。
-
已安装 Knative (
kn) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
可选: 如果要使用此流程验证步骤,请安装 OpenShift CLI (
oc) 。
流程
要验证 ping 源是否可以工作,请创建一个简单的 Knative 服务,在服务日志中转储传入的信息:
kn service create event-display \ --image quay.io/openshift-knative/showcase$ kn service create event-display \ --image quay.io/openshift-knative/showcaseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对于您要请求的每一组 ping 事件,请在与事件消费者相同的命名空间中创建一个 ping 源:
kn source ping create test-ping-source \ --schedule "*/2 * * * *" \ --data '{"message": "Hello world!"}' \ --sink ksvc:event-display$ kn source ping create test-ping-source \ --schedule "*/2 * * * *" \ --data '{"message": "Hello world!"}' \ --sink ksvc:event-displayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令并检查输出,检查是否正确映射了控制器:
kn source ping describe test-ping-source
$ kn source ping describe test-ping-sourceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以通过查看 sink pod 的日志来验证 Kubernetes 事件是否已发送到 Knative 事件。
默认情况下,如果在 60 秒内都没有流量,Knative 服务会终止其 Pod。本指南中演示的示例创建了一个 ping 源,每 2 分钟发送一条消息,因此每个消息都应该在新创建的 pod 中观察到。
查看新创建的 pod:
watch oc get pods
$ watch oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Ctrl+C 取消查看 pod,然后查看所创建 pod 的日志:
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除 ping 源
删除 ping 源:
kn delete pingsources.sources.knative.dev <ping_source_name>
$ kn delete pingsources.sources.knative.dev <ping_source_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.2.1. Knative CLI sink 标记 复制链接链接已复制到粘贴板!
当使用 Knative (kn) CLI 创建事件源时,您可以使用 --sink 标志指定事件从该资源发送到的接收器。sink 可以是任何可寻址或可调用的资源,可以从其他资源接收传入的事件。
以下示例创建使用服务 http://event-display.svc.cluster.local 的接收器绑定作为接收器:
使用 sink 标记的命令示例
kn source binding create bind-heartbeat \ --namespace sinkbinding-example \ --subject "Job:batch/v1:app=heartbeat-cron" \ --sink http://event-display.svc.cluster.local \ --ce-override "sink=bound"
$ kn source binding create bind-heartbeat \
--namespace sinkbinding-example \
--subject "Job:batch/v1:app=heartbeat-cron" \
--sink http://event-display.svc.cluster.local \
--ce-override "sink=bound"
- 1
http://event-display.svc.cluster.local中的svc确定接收器是一个 Knative 服务。其他默认的接收器前缀包括channel和broker。
2.3.3. 使用 YAML 创建 ping 源 复制链接链接已复制到粘贴板!
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以可重复的方式描述事件源。要使用 YAML 创建无服务器 ping 源,您必须创建一个 YAML 文件来定义 PingSource 对象,然后使用 oc apply 来应用它。
PingSource 对象示例
先决条件
- 在集群中安装了 OpenShift Serverless Operator、Knative Serving 和 Knative Eventing。
-
安装 OpenShift CLI (
oc) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
要验证 ping 源是否可以工作,请创建一个简单的 Knative 服务,在服务日志中转储传入的信息。
创建服务 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建服务:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
对于您要请求的每一组 ping 事件,请在与事件消费者相同的命名空间中创建一个 ping 源。
为 ping 源创建 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 ping 源:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
输入以下命令检查是否正确映射了控制器:
oc get pingsource.sources.knative.dev <ping_source_name> -oyaml
$ oc get pingsource.sources.knative.dev <ping_source_name> -oyamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以通过查看 sink pod 的日志来验证 Kubernetes 事件是否已发送到 Knative 事件。
默认情况下,如果在 60 秒内都没有流量,Knative 服务会终止其 Pod。本指南中演示的示例创建了一个 PingSource,每 2 分钟发送一条消息,因此每个消息都应该在新创建的 pod 中观察到。
查看新创建的 pod:
watch oc get pods
$ watch oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Ctrl+C 取消查看 pod,然后查看所创建 pod 的日志:
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
删除 ping 源
删除 ping 源:
oc delete -f <filename>
$ oc delete -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
oc delete -f ping-source.yaml
$ oc delete -f ping-source.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4. Apache Kafka 的源 复制链接链接已复制到粘贴板!
您可以创建一个 Apache Kafka 源,从 Apache Kafka 集群中读取事件,并将这些事件传递给接收器。您可以使用 OpenShift Container Platform web 控制台、Knative (kn) CLI 或直接创建 KafkaSource 对象并使用 OpenShift CLI (oc) 创建 Kafka 源来应用它。
请参阅有关 为 Apache Kafka 安装 Knative 代理 的文档。
2.4.1. 使用 Web 控制台创建 Apache Kafka 事件源 复制链接链接已复制到粘贴板!
在集群中安装 Apache Kafka 的 Knative 代理实现后,您可以使用 Web 控制台创建 Apache Kafka 源。使用 OpenShift Container Platform Web 控制台提供了一个简化的用户界面来创建 Kafka 源。
先决条件
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源已安装在集群中。 - 已登陆到 web 控制台。
- 您可以访问 Red Hat AMQ Streams(Kafka)集群,该集群会生成您要导入的 Kafka 信息。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
- 导航到 +Add 页面,再选择 Event Source。
- 在 Event Sources 页面中,在 Type 部分选择 Kafka Source。
配置 Kafka Source 设置:
- 添加用逗号分开的 Bootstrap 服务器列表。
- 添加以逗号分隔的标题列表。
- 添加一个 消费者组。
- 为您创建的服务帐户选择 Service Account Name。
在 Target 部分中,选择您的事件 sink。这可以是 Resource 或一个 URI :
- 选择 Resource 使用频道、代理或服务作为事件源的事件 sink。
- 选择 URI,以指定事件要路由到的 Uniform Resource Identifier (URI)。
- 输入 Kafka 事件源的 名称。
- 点 Create。
验证
您可以通过查看 Topology 页面来验证 Kafka 事件源是否已创建并连接到接收器。
- 导航到 Topology。
查看 Kafka 事件源和接收器。
2.4.2. 使用 Knative CLI 创建 Apache Kafka 事件源 复制链接链接已复制到粘贴板!
您可以使用 kn source kafka create 命令,使用 Knative (kn) CLI 创建 Kafka 源。使用 Knative CLI 创建事件源提供了比直接修改 YAML 文件更精简且直观的用户界面。
先决条件
-
OpenShift Serverless Operator、Knative Eventing、Knative Serving 和
KnativeKafka自定义资源(CR)已安装在集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您可以访问 Red Hat AMQ Streams(Kafka)集群,该集群会生成您要导入的 Kafka 信息。
-
已安装 Knative (
kn) CLI。 -
可选:如果您想要使用此流程中的验证步骤,已安装 OpenShift CLI (
oc)。
流程
要验证 Kafka 事件源是否可以工作,请创建一个 Knative 服务,在服务日志中转储传入的事件:
kn service create event-display \ --image quay.io/openshift-knative/showcase$ kn service create event-display \ --image quay.io/openshift-knative/showcaseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
KafkaSourceCR:kn source kafka create <kafka_source_name> \ --servers <cluster_kafka_bootstrap>.kafka.svc:9092 \ --topics <topic_name> --consumergroup my-consumer-group \ --sink event-display$ kn source kafka create <kafka_source_name> \ --servers <cluster_kafka_bootstrap>.kafka.svc:9092 \ --topics <topic_name> --consumergroup my-consumer-group \ --sink event-displayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意将此命令中的占位符值替换为源名称、引导服务器和主题的值。
--servers、--topics和--consumergroup选项指定到 Kafka 集群的连接参数。--consumergroup选项是可选的。可选:查看您创建的
KafkaSourceCR 的详情:kn source kafka describe <kafka_source_name>
$ kn source kafka describe <kafka_source_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证步骤
触发 Kafka 实例将信息发送到主题:
oc -n kafka run kafka-producer \ -ti --image=quay.io/strimzi/kafka:latest-kafka-2.7.0 --rm=true \ --restart=Never -- bin/kafka-console-producer.sh \ --broker-list <cluster_kafka_bootstrap>:9092 --topic my-topic$ oc -n kafka run kafka-producer \ -ti --image=quay.io/strimzi/kafka:latest-kafka-2.7.0 --rm=true \ --restart=Never -- bin/kafka-console-producer.sh \ --broker-list <cluster_kafka_bootstrap>:9092 --topic my-topicCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在提示符后输入信息。这个命令假设:
-
Kafka 集群安装在
kafka命名空间中。 -
KafkaSource对象已被配置为使用my-topic主题。
-
Kafka 集群安装在
通过查看日志来验证消息是否显示:
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4.2.1. Knative CLI sink 标记 复制链接链接已复制到粘贴板!
当使用 Knative (kn) CLI 创建事件源时,您可以使用 --sink 标志指定事件从该资源发送到的接收器。sink 可以是任何可寻址或可调用的资源,可以从其他资源接收传入的事件。
以下示例创建使用服务 http://event-display.svc.cluster.local 的接收器绑定作为接收器:
使用 sink 标记的命令示例
kn source binding create bind-heartbeat \ --namespace sinkbinding-example \ --subject "Job:batch/v1:app=heartbeat-cron" \ --sink http://event-display.svc.cluster.local \ --ce-override "sink=bound"
$ kn source binding create bind-heartbeat \
--namespace sinkbinding-example \
--subject "Job:batch/v1:app=heartbeat-cron" \
--sink http://event-display.svc.cluster.local \
--ce-override "sink=bound"
- 1
http://event-display.svc.cluster.local中的svc确定接收器是一个 Knative 服务。其他默认的接收器前缀包括channel和broker。
2.4.3. 使用 YAML 创建 Apache Kafka 事件源 复制链接链接已复制到粘贴板!
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以声明性的方式描述应用程序,并以可重复的方式描述应用程序。要使用 YAML 创建 Kafka 源,您必须创建一个 YAML 文件来定义 KafkaSource 对象,然后使用 oc apply 命令应用它。
先决条件
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源已安装在集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您可以访问 Red Hat AMQ Streams(Kafka)集群,该集群会生成您要导入的 Kafka 信息。
-
安装 OpenShift CLI (
oc) 。
流程
创建
KafkaSource对象作为 YAML 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要仅支持 OpenShift Serverless 上的
KafkaSource对象的v1beta1API 版本。不要使用这个 API 的v1alpha1版本,因为这个版本现已弃用。KafkaSource对象示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
KafkaSourceYAML 文件:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
输入以下命令验证 Kafka 事件源是否已创建:
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY STATUS RESTARTS AGE kafkasource-kafka-source-5ca0248f-... 1/1 Running 0 13m
NAME READY STATUS RESTARTS AGE kafkasource-kafka-source-5ca0248f-... 1/1 Running 0 13mCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4.4. 为 Apache Kafka 源配置 SASL 身份验证 复制链接链接已复制到粘贴板!
Apache Kafka 使用 简单身份验证和安全层 (SASL) 进行身份验证。如果在集群中使用 SASL 身份验证,用户则必须向 Knative 提供凭证才能与 Kafka 集群通信,否则无法生成或消耗事件。
先决条件
- 在 OpenShift Container Platform 上具有集群或专用管理员权限。
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafkaCR 已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您有一个 Kafka 集群的用户名和密码。
-
您已选择使用 SASL 机制,例如
PLAIN、SCRAM-SHA-256或SCRAM-SHA-512。 -
如果启用了 TLS,您还需要 Kafka 集群的
ca.crt证书文件。 -
已安装 OpenShift (
oc) CLI。
流程
在所选命名空间中创建证书文件作为 secret:
oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-file=ca.crt=caroot.pem \ --from-literal=password="SecretPassword" \ --from-literal=saslType="SCRAM-SHA-512" \ --from-literal=user="my-sasl-user"
$ oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-file=ca.crt=caroot.pem \ --from-literal=password="SecretPassword" \ --from-literal=saslType="SCRAM-SHA-512" \1 --from-literal=user="my-sasl-user"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- SASL 类型可以是
PLAIN、SCRAM-SHA-256或SCRAM-SHA-512。
创建或修改 Kafka 源,使其包含以下
spec配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果您使用公共云 Kafka 服务,则不需要
caCertspec。
2.4.5. 为 KafkaSource 配置 KEDA 自动扩展 复制链接链接已复制到粘贴板!
您可以使用自定义 Metrics Autoscaler Operator 将 Apache Kafka (KafkaSource)的 Knative Eventing 源配置为自动扩展,该 Operator 基于 Kubernetes Event Driven Autoscaler (KEDA)。
为 KafkaSource 配置 KEDA 自动扩展只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源已安装在集群中。
流程
在
KnativeKafka自定义资源中,启用 KEDA 扩展:YAML 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
KnativeKafkaYAML 文件:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5. 自定义事件源 复制链接链接已复制到粘贴板!
如果您需要从 Knative 中没有包含在 Knative 的事件制作者或发出没有 CloudEvent 格式的事件的制作者中入站事件,您可以通过创建自定义事件源来实现此目标。您可以使用以下方法之一创建自定义事件源:
-
通过创建接收器绑定,将
PodSpecable对象用作事件源。 - 通过创建容器源,将容器用作事件源。
2.5.1. 接收器(sink)绑定 复制链接链接已复制到粘贴板!
SinkBinding 对象支持将事件产品与交付寻址分离。接收器绑定用于将 事件制作者 连接到事件消费者(sink) 。event producer 是一个 Kubernetes 资源,用于嵌入 PodSpec 模板并生成事件。sink 是一个可寻址的 Kubernetes 对象,可以接收事件。
SinkBinding 对象将环境变量注入到 sink 的 PodTemplateSpec 中,这意味着应用程序代码不需要直接与 Kubernetes API 交互来定位事件目的地。这些环境变量如下:
K_SINK- 解析 sink 的 URL。
K_CE_OVERRIDES- 指定出站事件覆盖的 JSON 对象。
SinkBinding 对象目前不支持服务的自定义修订名称。
2.5.1.1. 使用 YAML 创建接收器绑定 复制链接链接已复制到粘贴板!
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以可重复的方式描述事件源。要使用 YAML 创建接收器绑定,您必须创建一个 YAML 文件来定义 SinkBinding 对象,然后使用 oc apply 命令应用它。
先决条件
- 在集群中安装了 OpenShift Serverless Operator、Knative Serving 和 Knative Eventing。
-
安装 OpenShift CLI (
oc) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
要检查接收器绑定是否已正确设置,请创建一个 Knative 事件显示服务或事件接收器,在日志中转储传入的信息。
创建服务 YAML 文件:
服务 YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建服务:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建将事件定向到该服务的接收器绑定实例。
创建接收器绑定 YAML 文件:
服务 YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 在本例中,任何具有标签
app: heartbeat-cron的作业都将被绑定到事件 sink。
创建接收器绑定:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建
CronJob对象。创建 cron 任务 YAML 文件:
Cron Job YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要要使用接收器绑定,您必须手动在 Knative 资源中添加
bindings.knative.dev/include=true标签。例如,要将此标签添加到
CronJob资源,请将以下行添加到Job资源 YAML 定义中:jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: "true"jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: "true"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 cron job:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
输入以下命令并检查输出,检查是否正确映射了控制器:
oc get sinkbindings.sources.knative.dev bind-heartbeat -oyaml
$ oc get sinkbindings.sources.knative.dev bind-heartbeat -oyamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以通过查看消息 dumper 功能日志,来验证 Kubernetes 事件是否已发送到 Knative 事件。
输入命令:
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入命令:
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.1.2. 使用 Knative CLI 创建接收器绑定 复制链接链接已复制到粘贴板!
您可以使用 kn source binding create 命令通过 Knative (kn) CLI 创建接收器绑定。使用 Knative CLI 创建事件源提供了比直接修改 YAML 文件更精简且直观的用户界面。
先决条件
- 在集群中安装了 OpenShift Serverless Operator、Knative Serving 和 Knative Eventing。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
安装 Knative (
kn) CLI。 -
安装 OpenShift CLI (
oc) 。
以下操作过程要求您创建 YAML 文件。
如果更改了示例中使用的 YAML 文件的名称,则需要更新对应的 CLI 命令。
流程
要检查接收器绑定是否已正确设置,请创建一个 Knative 事件显示服务或事件 sink,在日志中转储传入的信息:
kn service create event-display --image quay.io/openshift-knative/showcase
$ kn service create event-display --image quay.io/openshift-knative/showcaseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建将事件定向到该服务的接收器绑定实例:
kn source binding create bind-heartbeat --subject Job:batch/v1:app=heartbeat-cron --sink ksvc:event-display
$ kn source binding create bind-heartbeat --subject Job:batch/v1:app=heartbeat-cron --sink ksvc:event-displayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
CronJob对象。创建 cron 任务 YAML 文件:
Cron Job YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要要使用接收器绑定,您必须手动在 Knative CR 中添加
bindings.knative.dev/include=true标签。例如,要将此标签添加到
CronJobCR,请将以下行添加到JobCR YAML 定义中:jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: "true"jobTemplate: metadata: labels: app: heartbeat-cron bindings.knative.dev/include: "true"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 cron job:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
输入以下命令并检查输出,检查是否正确映射了控制器:
kn source binding describe bind-heartbeat
$ kn source binding describe bind-heartbeatCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以通过查看消息 dumper 功能日志,来验证 Kubernetes 事件是否已发送到 Knative 事件。
您可以输入以下命令来查看消息转储程序功能日志:
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.1.2.1. Knative CLI sink 标记 复制链接链接已复制到粘贴板!
当使用 Knative (kn) CLI 创建事件源时,您可以使用 --sink 标志指定事件从该资源发送到的接收器。sink 可以是任何可寻址或可调用的资源,可以从其他资源接收传入的事件。
以下示例创建使用服务 http://event-display.svc.cluster.local 的接收器绑定作为接收器:
使用 sink 标记的命令示例
kn source binding create bind-heartbeat \ --namespace sinkbinding-example \ --subject "Job:batch/v1:app=heartbeat-cron" \ --sink http://event-display.svc.cluster.local \ --ce-override "sink=bound"
$ kn source binding create bind-heartbeat \
--namespace sinkbinding-example \
--subject "Job:batch/v1:app=heartbeat-cron" \
--sink http://event-display.svc.cluster.local \
--ce-override "sink=bound"
- 1
http://event-display.svc.cluster.local中的svc确定接收器是一个 Knative 服务。其他默认的接收器前缀包括channel和broker。
2.5.1.3. 使用 Web 控制台创建接收器绑定 复制链接链接已复制到粘贴板!
在集群中安装 Knative Eventing 后,您可以使用 web 控制台创建接收器绑定。使用 OpenShift Container Platform Web 控制台提供了一个简化且直观的用户界面来创建事件源。
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
- OpenShift Serverless Operator、Knative Serving 和 Knative Eventing 已在 OpenShift Container Platform 集群中安装。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建 Knative 服务以用作接收器:
- 导航到 +Add → YAML。
复制 YAML 示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 点 Create。
创建用作事件源的
CronJob资源,并每分钟发送一个事件。- 导航到 +Add → YAML。
复制 YAML 示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 确保包含
bindings.knative.dev/include: true标签。OpenShift Serverless 的默认命名空间选择行为使用包含模式。
- 点 Create。
在与上一步中创建的服务相同的命名空间中创建接收器绑定,或您要将事件发送到的任何其他接收器。
- 导航到 +Add → Event Source。此时会显示 Event Sources 页面。
- 可选:如果您的事件源有多个供应商,请从 Providers 列表中选择所需的供应商,以过滤供应商的可用事件源。
选择 Sink Binding,然后单击 Create Event Source。此时会显示 Create Event Source 页面。
注意您可以使用 Form view 或 YAML view 配置 Sink Binding 设置,并可以在两者间切换。在不同视图间切换时数据会被保留。
-
在 apiVersion 字段中,输入
batch/v1。 在 Kind 字段中,输入
Job。注意OpenShift Serverless sink 绑定不支持
CronJobkind,因此 Kind 字段必须以 cron 任务创建的Job对象为目标,而不是 cron 作业对象本身。在 Target 部分中,选择您的事件 sink。这可以是 Resource 或一个 URI :
-
选择 Resource 使用频道、代理或服务作为事件源的事件 sink。在本例中,上一步中创建的
event-display服务被用作目标 资源。 - 选择 URI,以指定事件要路由到的 Uniform Resource Identifier (URI)。
-
选择 Resource 使用频道、代理或服务作为事件源的事件 sink。在本例中,上一步中创建的
在 Match labels 部分:
-
在 Name 字段中输入
app。 在 Value 字段中输入
heartbeat-cron。注意使用带有接收器绑定的 cron 任务时,需要标签选择器,而不是资源名称。这是因为,Cron Job 创建的作业没有可预测的名称,并在名称中包含随机生成的字符串。例如,
hearthbeat-cron-1cc23f.
-
在 Name 字段中输入
- 点 Create。
验证
您可以通过查看 Topology 页面和 pod 日志来验证接收器绑定、接收器和 cron 任务是否已创建并正常工作。
- 导航到 Topology。
查看接收器绑定、接收器和心跳 cron 任务。
- 观察在添加了接收器绑定后 cron 任务正在注册成功的作业。这意味着接收器绑定成功重新配置由 cron 任务创建的作业。
浏览
event-display服务,以查看 heartbeats cron 作业生成的事件。
2.5.1.4. 接收器绑定引用 复制链接链接已复制到粘贴板!
您可以通过创建接收器绑定,将 PodSpecable 对象用作事件源。您可以在创建 SinkBinding 对象时配置多个参数。
SinkBinding 对象支持以下参数:
| 字段 | 描述 | 必需或可选 |
|---|---|---|
|
|
指定 API 版本,如 | 必需 |
|
|
将此资源对象标识为 | 必需 |
|
|
指定唯一标识 | 必需 |
|
|
指定此 | 必需 |
|
| 对解析为 URI 作为 sink 的对象的引用。 | 必需 |
|
| 提及通过绑定实施来增强运行时合同的资源。 | 必需 |
|
| 定义覆盖来控制发送到 sink 的事件的输出格式和修改。 | 选填 |
2.5.1.4.1. 主题参数 复制链接链接已复制到粘贴板!
Subject 参数引用通过绑定实施来增强运行时合同的资源。您可以为 Subject 定义配置多个字段。
Subject 定义支持以下字段:
| 字段 | 描述 | 必需或可选 |
|---|---|---|
|
| 引用的 API 版本。 | 必需 |
|
| 引用的类型。 | 必需 |
|
| 引用的命名空间。如果省略,则默认为对象的命名空间。 | 选填 |
|
| 引用的名称。 |
如果配置 |
|
| 引用的选择器。 |
如果配置 |
|
| 标签选择器要求列表。 |
仅使用 |
|
| 选择器应用到的标签键。 |
使用 |
|
|
代表键与一组值的关系。有效的运算符为 |
使用 |
|
|
字符串值数组。如果 |
使用 |
|
|
键值对映射. |
仅使用 |
主题参数示例
根据以下 YAML,选择 default 命名空间中名为 mysubject 的 Deployment 对象:
根据以下 YAML,可以选择在 default 命名空间中带有 working=example 标签的 Job 对象:
根据以下 YAML,可以选择在 default 命名空间中带有标签 working=example 或 working=sample 的 Pod 对象:
2.5.1.4.2. CloudEvent 覆盖 复制链接链接已复制到粘贴板!
ceOverrides 定义提供覆盖控制发送到 sink 的 CloudEvent 输出格式和修改。您可以为 ceOverrides 定义配置多个字段。
ceOverrides 定义支持以下字段:
| 字段 | 描述 | 必需或可选 |
|---|---|---|
|
|
指定在出站事件中添加或覆盖哪些属性。每个 | 选填 |
仅允许有效的 CloudEvent 属性名称作为扩展。您无法从扩展覆盖配置设置 spec 定义的属性。例如,您无法修改 type 属性。
CloudEvent Overrides 示例
这会在 主题 上设置 K_CE_OVERRIDES 环境变量:
输出示例
{ "extensions": { "extra": "this is an extra attribute", "additional": "42" } }
{ "extensions": { "extra": "this is an extra attribute", "additional": "42" } }
2.5.1.4.3. include 标签 复制链接链接已复制到粘贴板!
要使用接收器绑定,您需要为资源或包含资源的命名空间分配 bindings.knative.dev/include: "true" 标签。如果资源定义不包括该标签,集群管理员可以通过运行以下命令将它附加到命名空间:
oc label namespace <namespace> bindings.knative.dev/include=true
$ oc label namespace <namespace> bindings.knative.dev/include=true
2.5.1.5. 将 Service Mesh 与接收器绑定集成 复制链接链接已复制到粘贴板!
先决条件
- 您已将 Service Mesh 与 OpenShift Serverless 集成。
流程
在作为
成员的命名空间中创建一个 Service。ServiceMeshMemberRollCopy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
Service资源。oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
SinkBinding资源。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
SinkBinding资源。oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
CronJob:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
CronJob资源。oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证事件是否已发送到 Knative 事件 sink,请查看消息转储程序功能日志。
输入以下命令:
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令:
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5.2. 容器源 复制链接链接已复制到粘贴板!
容器源创建容器镜像来生成事件并将事件发送到 sink。您可以通过创建容器镜像和使用您的镜像 URI 的 ContainerSource 对象,使用容器源创建自定义事件源。
2.5.2.1. 创建容器镜像的指南 复制链接链接已复制到粘贴板!
两个环境变量由容器源控制器注入:K_SINK 和 K_CE_OVERRIDES。这些变量分别从 sink 和 andceOverrides spec 解析。事件发送到 K_SINK 环境变量中指定的 sink URI。该消息必须使用 CloudEvent HTTP 格式作为 POST 发送。
容器镜像示例
以下是心跳容器镜像的示例:
以下是引用先前心跳容器镜像的容器源示例:
2.5.2.2. 使用 Knative CLI 创建和管理容器源 复制链接链接已复制到粘贴板!
您可以使用 kn source container 命令来使用 Knative (kn) 创建和管理容器源。使用 Knative CLI 创建事件源提供了比直接修改 YAML 文件更精简且直观的用户界面。
创建容器源
kn source container create <container_source_name> --image <image_uri> --sink <sink>
$ kn source container create <container_source_name> --image <image_uri> --sink <sink>
删除容器源
kn source container delete <container_source_name>
$ kn source container delete <container_source_name>
描述容器源
kn source container describe <container_source_name>
$ kn source container describe <container_source_name>
列出现有容器源
kn source container list
$ kn source container list
以 YAML 格式列出现有容器源
kn source container list -o yaml
$ kn source container list -o yaml
更新容器源
此命令为现有容器源更新镜像 URI:
kn source container update <container_source_name> --image <image_uri>
$ kn source container update <container_source_name> --image <image_uri>
2.5.2.3. 使用 Web 控制台创建容器源 复制链接链接已复制到粘贴板!
在集群中安装 Knative Eventing 后,您可以使用 Web 控制台创建容器源。使用 OpenShift Container Platform Web 控制台提供了一个简化且直观的用户界面来创建事件源。
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
- OpenShift Serverless Operator、Knative Serving 和 Knative Eventing 已在 OpenShift Container Platform 集群中安装。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
- 导航到 +Add → Event Source。此时会显示 Event Sources 页面。
- 选择 Container Source,然后点 Create Event Source。此时会显示 Create Event Source 页面。
使用 Form view 或 YAML 视图配置 Container Source 设置:
注意您可以在 Form view 和 YAML view 间进行切换。在不同视图间切换时数据会被保留。
- 在 Image 字段中,输入您要在由容器源创建的容器中运行的镜像的 URI。
- 在 Name 字段中输入镜像的名称。
- 可选:在 Arguments 参数字段中,输入要传递给容器的任何参数。
- 可选:在 Environment variables 字段中,添加容器中要设置的任何环境变量。
在 Target 部分中,选择您的事件 sink。这可以是 Resource 或一个 URI :
- 选择 Resource 使用频道、代理或服务作为事件源的事件 sink。
- 选择 URI,以指定事件要路由到的 Uniform Resource Identifier (URI)。
- 配置完容器源后,点 Create。
2.5.2.4. 容器源参考 复制链接链接已复制到粘贴板!
您可以通过创建 ContainerSource 对象来使用容器作为事件源。您可以在创建 ContainerSource 对象时配置多个参数。
ContainerSource 对象支持以下字段:
| 字段 | 描述 | 必需或可选 |
|---|---|---|
|
|
指定 API 版本,如 | 必需 |
|
|
将此资源对象标识为 | 必需 |
|
|
指定唯一标识 | 必需 |
|
|
指定此 | 必需 |
|
| 对解析为 URI 作为 sink 的对象的引用。 | 必需 |
|
|
| 必需 |
|
| 定义覆盖来控制发送到 sink 的事件的输出格式和修改。 | 选填 |
模板参数示例
2.5.2.4.1. CloudEvent 覆盖 复制链接链接已复制到粘贴板!
ceOverrides 定义提供覆盖控制发送到 sink 的 CloudEvent 输出格式和修改。您可以为 ceOverrides 定义配置多个字段。
ceOverrides 定义支持以下字段:
| 字段 | 描述 | 必需或可选 |
|---|---|---|
|
|
指定在出站事件中添加或覆盖哪些属性。每个 | 选填 |
仅允许有效的 CloudEvent 属性名称作为扩展。您无法从扩展覆盖配置设置 spec 定义的属性。例如,您无法修改 type 属性。
CloudEvent Overrides 示例
这会在 主题 上设置 K_CE_OVERRIDES 环境变量:
输出示例
{ "extensions": { "extra": "this is an extra attribute", "additional": "42" } }
{ "extensions": { "extra": "this is an extra attribute", "additional": "42" } }
2.5.2.5. 将 Service Mesh 与 ContainerSource 集成 复制链接链接已复制到粘贴板!
先决条件
- 您已将 Service Mesh 与 OpenShift Serverless 集成。
流程
在作为
成员的命名空间中创建一个 Service。ServiceMeshMemberRollCopy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
Service资源。oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在作为
ServiceMeshMemberRoll和 sink 成员的命名空间中创建ContainerSource对象,设置为event-display。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
ContainerSource资源。oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要验证事件是否已发送到 Knative 事件 sink,请查看消息转储程序功能日志。
输入以下命令:
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令:
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.6. 将事件源连接到事件 sink 复制链接链接已复制到粘贴板!
当使用 OpenShift Container Platform Web 控制台创建事件源时,您可以指定事件从该源发送到的目标事件 sink。事件 sink 可以是任何可寻址或可调用的资源,可以从其他资源接收传入的事件。
2.6.1. 将事件源连接到事件 sink 复制链接链接已复制到粘贴板!
先决条件
- OpenShift Serverless Operator、Knative Serving 和 Knative Eventing 已在 OpenShift Container Platform 集群中安装。
- 已登陆到 web 控制台。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您已创建了事件 sink,如 Knative 服务、频道或代理。
流程
- 进入 +Add → Event Source 并选择您要创建的事件源类型,创建任何类型的事件源。
在 Create Event Source 表单视图的 Target 部分中,选择您的事件 sink。这可以是 Resource 或一个 URI :
- 选择 Resource 使用频道、代理或服务作为事件源的事件 sink。
- 选择 URI,以指定事件要路由到的 Uniform Resource Identifier (URI)。
- 点 Create。
验证
您可以通过查看 Topology 页面来验证事件源是否已创建并连接到 sink。
- 导航到 Topology。
- 查看事件源并点连接的事件 sink 查看右侧面板中的 sink 详情。
第 3 章 事件 sink 复制链接链接已复制到粘贴板!
3.1. 事件 sink 复制链接链接已复制到粘贴板!
在创建事件源时,您可以指定事件从源发送到的事件接收器(sink)。事件接收器是一个可寻址或可调用的资源,可以从其他资源接收传入的事件。Knative 服务、频道和代理都是事件接收器示例。还有一个特定的 Apache Kafka 接收器类型。
可寻址的对象接收和确认通过 HTTP 发送的事件到其 status.address.url 字段中定义的地址。作为特殊情况,核心 Kubernetes Service 对象也履行可寻址的接口。
可调用的对象可以接收通过 HTTP 发送的事件并转换事件,并在 HTTP 响应中返回 0 或 1 新事件。这些返回的事件可能会象处理外部事件源中的事件一样进一步处理。
3.1.1. Knative CLI sink 标记 复制链接链接已复制到粘贴板!
当使用 Knative (kn) CLI 创建事件源时,您可以使用 --sink 标志指定事件从该资源发送到的接收器。sink 可以是任何可寻址或可调用的资源,可以从其他资源接收传入的事件。
以下示例创建使用服务 http://event-display.svc.cluster.local 的接收器绑定作为接收器:
使用 sink 标记的命令示例
kn source binding create bind-heartbeat \ --namespace sinkbinding-example \ --subject "Job:batch/v1:app=heartbeat-cron" \ --sink http://event-display.svc.cluster.local \ --ce-override "sink=bound"
$ kn source binding create bind-heartbeat \
--namespace sinkbinding-example \
--subject "Job:batch/v1:app=heartbeat-cron" \
--sink http://event-display.svc.cluster.local \
--ce-override "sink=bound"
- 1
http://event-display.svc.cluster.local中的svc确定接收器是一个 Knative 服务。其他默认的接收器前缀包括channel和broker。
您可以通过自定义 kn,配置哪些 CR 可在 Knative (kn) CLI 命令中使用 --sink 标记。
3.2. 创建事件接收器 复制链接链接已复制到粘贴板!
在创建事件源时,您可以指定事件从源发送到的事件接收器(sink)。事件接收器是一个可寻址或可调用的资源,可以从其他资源接收传入的事件。Knative 服务、频道和代理都是事件接收器示例。还有一个特定的 Apache Kafka 接收器类型。
有关创建可用作事件接收器的资源的详情,请查看以下文档:
3.3. Apache Kafka 的接收器 复制链接链接已复制到粘贴板!
Apache Kafka sink 是集群中启用了 Apache Kafka 时可用的事件 sink 类型。您可以使用 Kafka sink 将事件从事件源发送到 Kafka 主题。
3.3.1. 使用 YAML 创建 Apache Kafka sink 复制链接链接已复制到粘贴板!
您可以创建一个 Kafka 接收器将事件发送到 Kafka 主题。默认情况下,Kafka sink 使用二进制内容模式,其效率比结构化模式更高效。要使用 YAML 创建 Kafka sink,您必须创建一个 YAML 文件来定义 KafkaSink 对象,然后使用 oc apply 命令应用它。
先决条件
-
在集群中安装了 OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源 (CR) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您可以访问 Red Hat AMQ Streams(Kafka)集群,该集群会生成您要导入的 Kafka 信息。
-
安装 OpenShift CLI (
oc) 。
流程
创建一个
KafkaSink对象定义作为一个 YAML 文件:Kafka sink YAML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要创建 Kafka sink,请应用
KafkaSinkYAML 文件:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置事件源,以便在其 spec 中指定 sink:
连接到 API 服务器源的 Kafka sink 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以创建一个 Kafka sink,将事件发送到 OpenShift Container Platform Web 控制台中的 Kafka 主题。默认情况下,Kafka sink 使用二进制内容模式,其效率比结构化模式更高效。
作为开发人员,您可以创建一个事件 sink 来从特定源接收事件并将其发送到 Kafka 主题。
先决条件
- 您已从 OperatorHub 安装了带有 Knative Serving、Knative Eventing 和 Knative 代理的 OpenShift Serverless Operator。
- 您已在 Kafka 环境中创建了一个 Kafka 主题。
流程
- 进入 +Add 视图。
- 点 Eventing 目录中的 Event Sink。
-
在目录项中搜索
KafkaSink并点它。 - 点 Create Event Sink。
在表单视图中,键入 bootstrap 服务器的 URL,这是主机名和端口的组合。
- 键入要发送事件数据的主题名称。
- 键入事件 sink 的名称。
- 点 Create。
验证
- 导航到 Topology 视图。
- 点创建的事件 sink 在右侧面板中查看其详情。
3.3.3. 为 Apache Kafka sink 配置安全性 复制链接链接已复制到粘贴板!
Apache Kafka 客户端和服务器使用 传输层安全性 (TLS) 来加密 Knative 和 Kafka 之间的流量,以及用于身份验证。TLS 是 Apache Kafka 的 Knative 代理实现唯一支持的流量加密方法。
Apache Kafka 使用 简单身份验证和安全层 (SASL) 进行身份验证。如果在集群中使用 SASL 身份验证,用户则必须向 Knative 提供凭证才能与 Kafka 集群通信,否则无法生成或消耗事件。
先决条件
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源(CR)已安装在 OpenShift Container Platform 集群中。 -
在
KnativeKafkaCR 中启用了 Kafka sink。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
您有一个 Kafka 集群 CA 证书存储为一个
.pem文件。 -
您有一个 Kafka 集群客户端证书,并存储为
.pem文件的密钥。 -
已安装 OpenShift (
oc) CLI。 -
您已选择使用 SASL 机制,例如
PLAIN、SCRAM-SHA-256或SCRAM-SHA-512。
流程
在与
KafkaSink对象相同的命名空间中创建一个 secret:重要证书和密钥必须采用 PEM 格式。
对于使用 SASL 时没有加密的身份验证:
oc create secret -n <namespace> generic <secret_name> \ --from-literal=protocol=SASL_PLAINTEXT \ --from-literal=sasl.mechanism=<sasl_mechanism> \ --from-literal=user=<username> \ --from-literal=password=<password>
$ oc create secret -n <namespace> generic <secret_name> \ --from-literal=protocol=SASL_PLAINTEXT \ --from-literal=sasl.mechanism=<sasl_mechanism> \ --from-literal=user=<username> \ --from-literal=password=<password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于使用 TLS 的 SASL 和加密进行身份验证:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果您使用公共云管理的 Kafka 服务,可以省略
ca.crt来使用系统的 root CA 设置。
使用 TLS 进行身份验证和加密:
oc create secret -n <namespace> generic <secret_name> \ --from-literal=protocol=SSL \ --from-file=ca.crt=<my_caroot.pem_file_path> \ --from-file=user.crt=<my_cert.pem_file_path> \ --from-file=user.key=<my_key.pem_file_path>
$ oc create secret -n <namespace> generic <secret_name> \ --from-literal=protocol=SSL \ --from-file=ca.crt=<my_caroot.pem_file_path> \1 --from-file=user.crt=<my_cert.pem_file_path> \ --from-file=user.key=<my_key.pem_file_path>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 如果您使用公共云管理的 Kafka 服务,可以省略
ca.crt来使用系统的 root CA 设置。
创建或修改
KafkaSink对象,并在authspec 中添加对 secret 的引用:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
KafkaSink对象:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4. JobSink 复制链接链接已复制到粘贴板!
事件处理通常在短时间内完成,比如几分钟。这样可确保 HTTP 连接保持打开状态,服务不会预先缩减。
维护长时间运行的连接会增加失败的风险,从而导致处理重启和重复请求重试。
您可以使用 JobSink 来使用完整的 Kubernetes batch/v1 作业资源和功能以及 Kubernetes 作业排队系统(如 Kue)支持长时间运行的异步作业和任务。
3.4.1. 使用 JobSink 复制链接链接已复制到粘贴板!
当事件发送到 时,Eventing 会创建一个作业,并将接收的事件作为 JSON 文件挂载到 Job Sink/etc/jobsink-event/event。
流程
创建一个
JobSink对象定义作为一个 YAML 文件:JobSink YAML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
JobSinkYAML 文件:oc apply -f <job-sink-file.yaml>
$ oc apply -f <job-sink-file.yaml>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
JobSink已就绪:oc get jobsinks.sinks.knative.dev
$ oc get jobsinks.sinks.knative.devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
NAME URL AGE READY REASON job-sink-logger http://job-sink.knative-eventing.svc.cluster.local/default/job-sink-logger 5s True
NAME URL AGE READY REASON job-sink-logger http://job-sink.knative-eventing.svc.cluster.local/default/job-sink-logger 5s TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 触发
JobSink。JobSink可以由任何事件源或触发器触发。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证已创建了
作业:oc logs job-sink-loggerszoi6-dqbtq
$ oc logs job-sink-loggerszoi6-dqbtqCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
{"specversion":"1.0","id":"123","source":"my/curl/command","type":"my.demo.event","datacontenttype":"application/json","data":{"details":"JobSinkDemo"}}{"specversion":"1.0","id":"123","source":"my/curl/command","type":"my.demo.event","datacontenttype":"application/json","data":{"details":"JobSinkDemo"}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Job Sink 为其接收的每个唯一事件创建一个作业。
事件通过其 source 和 id 属性的组合唯一标识。
如果在该事件的 作业 已存在时收到具有相同属性的事件,则不会创建另一个 作业。
3.4.2. 读取作业事件文件 复制链接链接已复制到粘贴板!
流程
读取
事件文件,并使用任何 CloudEvents JSON deserializer 进行反序列化。以下示例演示了如何使用 CloudEvents Go SDK 读取和处理事件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.3. 设置自定义事件文件挂载路径 复制链接链接已复制到粘贴板!
您可以在 JobSink 定义中设置自定义 事件 文件挂载路径。
流程
在容器定义中,包括
volumeMounts配置并根据需要设置。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.4. 清理完成的作业 复制链接链接已复制到粘贴板!
您可以通过在 JobSink 定义中设置 ttlSecondsAfterFinished 值来清理已完成的作业。例如,将值设置为 600 会在完成后删除 600 秒完成的作业 600 秒(10 分钟)。
流程
在定义中,将
ttlSecondsAfterFinished的值设置为所需的数量。ttlSecondsAfterFinished 设置为 600 的示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.5. 模拟 FailJob 操作 复制链接链接已复制到粘贴板!
流程
通过在 JobSink 定义中包含错误模拟命令来触发
FailJob操作。JobSink 失败示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 4 章 代理(Broker) 复制链接链接已复制到粘贴板!
4.1. 代理(Broker) 复制链接链接已复制到粘贴板!
代理可与触发器结合使用,用于将事件源发送到事件 sink。事件从事件源发送到代理,作为 HTTP POST 请求。事件进入代理后,可使用触发器根据 CloudEvent 属性 进行过滤,并作为 HTTP POST 请求发送到事件 sink。
4.2. 代理类型 复制链接链接已复制到粘贴板!
集群管理员可为集群设置 default 代理实施。创建代理时,会使用默认代理实现,除非在 Broker 对象中提供配置。
4.2.1. 用于开发的默认代理实现 复制链接链接已复制到粘贴板!
Knative 提供基于频道的默认代理实现。这个基于频道的代理可用于开发和测试目的,但不为生产环境提供适当的事件交付保证。默认代理由 InMemoryChannel 频道实现支持。
如果要使用 Apache Kafka 减少网络跃点,请为 Apache Kafka 使用 Knative 代理实现。不要将基于频道的代理配置为由 KafkaChannel 频道实现支持。
4.2.2. Apache Kafka 的生产环境就绪的 Knative 代理实现 复制链接链接已复制到粘贴板!
对于生产环境就绪的 Knative Eventing 部署,红帽建议为 Apache Kafka 使用 Knative 代理实现。代理是 Knative 代理的 Apache Kafka 原生实现,它将 CloudEvents 直接发送到 Kafka 实例。
Knative 代理与 Kafka 有一个原生集成,用于存储和路由事件。它可以更好地与 Kafka 集成用于代理,并在其他代理类型中触发模型,并减少网络跃点。Knative 代理实现的其他优点包括:
- 最少一次的交付保证
- 根据 CloudEvents 分区扩展排序事件交付
- 数据平面的高可用性
- 水平扩展数据平面
Apache Kafka 的 Knative 代理实现使用二进制内容模式将传入的 CloudEvents 存储为 Kafka 记录。这意味着,所有 CloudEvent 属性和扩展都会在 Kafka 记录上映射,而 CloudEvent 的 data 规格与 Kafka 记录的值对应。
4.3. 创建代理 复制链接链接已复制到粘贴板!
Knative 提供基于频道的默认代理实现。这个基于频道的代理可用于开发和测试目的,但不为生产环境提供适当的事件交付保证。
如果集群管理员将 OpenShift Serverless 部署配置为使用 Apache Kafka 作为默认代理类型,使用默认设置创建代理会为 Apache Kafka 创建一个 Knative 代理。
如果您的 OpenShift Serverless 部署没有配置为使用 Apache Kafka 的 Knative 代理作为默认代理类型,则按照以下流程中的默认设置时会创建基于频道的代理。
4.3.1. 使用 Knative CLI 创建代理 复制链接链接已复制到粘贴板!
代理可与触发器结合使用,用于将事件源发送到事件 sink。通过使用 Knative (kn) CLI 创建代理,通过直接修改 YAML 文件来提供更简化的、直观的用户界面。您可以使用 kn broker create 命令创建代理。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建代理:
kn broker create <broker_name>
$ kn broker create <broker_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用
kn命令列出所有现有代理:kn broker list
$ kn broker listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 True
NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果使用 OpenShift Container Platform Web 控制台,您可以进入 Topology 视图并观察代理是否存在:
4.3.2. 通过注解触发器来创建代理 复制链接链接已复制到粘贴板!
代理可与触发器结合使用,用于将事件源发送到事件 sink。您可以通过将 eventing.knative.dev/injection: enabled 注解添加到 Trigger 对象来创建代理。
如果您使用 eventing.knative.dev/injection: enabled 注解创建代理,则在没有集群管理员权限的情况下无法删除该代理。如果您在集群管理员还没有删除此注解前删除了代理,则代理会在删除后再次被创建。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
安装 OpenShift CLI (
oc) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建一个
Trigger对象作为 YAML 文件,该文件带有eventing.knative.dev/injection: enabled注解:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定触发器将事件发送到的事件 sink 或 subscriber。
应用
TriggerYAML 文件:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以使用 oc CLI,或使用 web 控制台中的 Topology 视图来验证代理是否已成功创建。
输入以下
oc命令来获取代理:oc -n <namespace> get broker default
$ oc -n <namespace> get broker defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56s
NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果使用 OpenShift Container Platform Web 控制台,您可以进入 Topology 视图并观察代理是否存在:
4.3.3. 通过标记命名空间来创建代理 复制链接链接已复制到粘贴板!
代理可与触发器结合使用,用于将事件源发送到事件 sink。您可以通过标记您拥有的命名空间或具有写入权限来自动创建 default 代理。
如果您删除该标签,则不会删除使用这个方法创建的代理。您必须手动删除它们。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
安装 OpenShift CLI (
oc) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 如果您在 AWS 或 OpenShift Dedicated 上使用 Red Hat OpenShift Service,则具有集群或专用管理员权限。
流程
使用
eventing.knative.dev/injection=enabled标识一个命名空间:oc label namespace <namespace> eventing.knative.dev/injection=enabled
$ oc label namespace <namespace> eventing.knative.dev/injection=enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
您可以使用 oc CLI,或使用 web 控制台中的 Topology 视图来验证代理是否已成功创建。
使用
oc命令获取代理:oc -n <namespace> get broker <broker_name>
$ oc -n <namespace> get broker <broker_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
oc -n default get broker default
$ oc -n default get broker defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56s
NAME READY REASON URL AGE default True http://broker-ingress.knative-eventing.svc.cluster.local/test/default 3m56sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果使用 OpenShift Container Platform Web 控制台,您可以进入 Topology 视图并观察代理是否存在:
4.3.4. 删除通过注入创建的代理 复制链接链接已复制到粘贴板!
如果通过注入创建了一个代理并在以后需要删除它时,您必须手动删除它。如果删除了标签或注解,则使用命名空间标签或触发器注解创建的代理不会被永久删除。
先决条件
-
安装 OpenShift CLI (
oc) 。
流程
从命名空间中删除
eventing.knative.dev/injection=enabled标识:oc label namespace <namespace> eventing.knative.dev/injection-
$ oc label namespace <namespace> eventing.knative.dev/injection-Copy to Clipboard Copied! Toggle word wrap Toggle overflow 移除注解可防止 Knative 在删除代理后重新创建代理。
从所选命名空间中删除代理:
oc -n <namespace> delete broker <broker_name>
$ oc -n <namespace> delete broker <broker_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用
oc命令获取代理:oc -n <namespace> get broker <broker_name>
$ oc -n <namespace> get broker <broker_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
oc -n default get broker default
$ oc -n default get broker defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
No resources found. Error from server (NotFound): brokers.eventing.knative.dev "default" not found
No resources found. Error from server (NotFound): brokers.eventing.knative.dev "default" not foundCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.5. 使用 Web 控制台创建代理 复制链接链接已复制到粘贴板!
在集群中安装 Knative Eventing 后,您可以使用 web 控制台创建代理。使用 OpenShift Container Platform Web 控制台提供了一个简化的用户界面来创建代理。
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
- 在集群中安装了 OpenShift Serverless Operator、Knative Serving 和 Knative Eventing。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
- 导航到 +Add → Broker。此时会显示 Broker 页面。
-
可选。更新代理的名称。如果您没有更新名称,则生成的代理名为
default。 - 点 Create。
验证
您可以通过在 Topology 页面中查看代理组件来验证代理是否已创建。
- 导航到 Topology。
查看
mt-broker-ingress、mt-broker-filter和mt-broker-controller组件。
4.3.6. 后续步骤 复制链接链接已复制到粘贴板!
- 配置事件交付参数,当事件无法发送到事件 sink 时。
4.4. 配置默认代理支持频道 复制链接链接已复制到粘贴板!
如果您使用基于频道的代理,您可以将代理的默认后备频道类型设置为 InMemoryChannel 或 KafkaChannel。
先决条件
- 在 OpenShift Container Platform 上具有管理员权限。
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
已安装 OpenShift (
oc) CLI。 -
如果要使用 Apache Kafka 频道作为默认后备频道类型,还必须在集群中安装
KnativeKafkaCR。
流程
修改
KnativeEventing自定义资源 (CR)以添加config-br-default-channel配置映射的配置详情:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用更新的
KnativeEventingCR:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5. 配置默认代理类 复制链接链接已复制到粘贴板!
您可以使用 config-br-defaults 配置映射来指定 Knative Eventing 的默认代理类设置。您可以为整个集群或一个或多个命名空间指定默认代理类。目前,支持 MTChannelBasedBroker 和 Kafka 代理类型。
先决条件
- 在 OpenShift Container Platform 上具有管理员权限。
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
如果要将 Apache Kafka 的 Knative 代理用作默认代理实现,还必须在集群中安装
KnativeKafkaCR。
流程
修改
KnativeEventing自定义资源,以添加config-br-defaults配置映射的配置详情:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Knative Eventing 的默认代理类。
- 2
- 在
spec.config中,您可以指定您要为修改的配置添加的配置映射。 - 3
config-br-defaults配置映射指定任何没有指定spec.config设置或代理类的代理的默认设置。- 4
- 集群范围的默认代理类配置。在本例中,集群的默认代理类实现是
Kafka。 - 5
kafka-broker-config配置映射指定 Kafka 代理的默认设置。请参阅"添加资源"部分中的"为 Apache Kafka 设置配置 Knative 代理"。- 6
- 存在
kafka-broker-config配置映射的命名空间。 - 7
- 命名空间范围的默认代理类配置。在本例中,
my-namespace命名空间的默认代理类实现是MTChannelbasedBroker。您可以为多个命名空间指定默认代理类实现。 - 8
config-br-default-channel配置映射指定代理的默认后备频道。请参阅"Additional resources"部分的"配置默认代理支持频道"部分。- 9
config-br-default-channel配置映射所在的命名空间。
重要配置特定于命名空间的默认设置会覆盖任何集群范围的设置。
4.6. Apache Kafka 的 Knative 代理实现 复制链接链接已复制到粘贴板!
对于生产环境就绪的 Knative Eventing 部署,红帽建议为 Apache Kafka 使用 Knative 代理实现。代理是 Knative 代理的 Apache Kafka 原生实现,它将 CloudEvents 直接发送到 Kafka 实例。
Knative 代理与 Kafka 有一个原生集成,用于存储和路由事件。它可以更好地与 Kafka 集成用于代理,并在其他代理类型中触发模型,并减少网络跃点。Knative 代理实现的其他优点包括:
- 最少一次的交付保证
- 根据 CloudEvents 分区扩展排序事件交付
- 数据平面的高可用性
- 水平扩展数据平面
Apache Kafka 的 Knative 代理实现使用二进制内容模式将传入的 CloudEvents 存储为 Kafka 记录。这意味着,所有 CloudEvent 属性和扩展都会在 Kafka 记录上映射,而 CloudEvent 的 data 规格与 Kafka 记录的值对应。
4.6.1. 当没有配置为 default 代理类型时,创建 Apache Kafka 代理 复制链接链接已复制到粘贴板!
如果您的 OpenShift Serverless 部署没有配置为使用 Kafka 代理作为默认代理类型,您仍可使用以下步骤创建基于 Kafka 的代理。
4.6.1.1. 使用 YAML 创建 Apache Kafka 代理 复制链接链接已复制到粘贴板!
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以声明性的方式描述应用程序,并以可重复的方式描述应用程序。要使用 YAML 创建 Kafka 代理,您必须创建一个 YAML 文件来定义 Broker 对象,然后使用 oc apply 命令应用它。
先决条件
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI(
oc)。
流程
创建一个基于 Kafka 的代理作为 YAML 文件:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用基于 Kafka 的代理 YAML 文件:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6.1.2. 创建使用外部管理的 Kafka 主题的 Apache Kafka 代理 复制链接链接已复制到粘贴板!
如果要在不创建自己的内部主题的情况下使用 Kafka 代理,您可以使用外部管理的 Kafka 主题。要做到这一点,您必须创建一个使用 kafka.eventing.knative.dev/external.topic 注解的 Kafka Broker 对象。
先决条件
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源已安装在 OpenShift Container Platform 集群中。 - 您可以访问 Kafka 实例,如 Red Hat AMQ Streams,并创建了 Kafka 主题。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI(
oc)。
4.6.1.3. 使用隔离数据平面的 Apache Kafka 的 Knative Broker 实现 复制链接链接已复制到粘贴板!
带有隔离数据平面的 Apache Kafka 的 Knative Broker 实现只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
Apache Kafka 的 Knative Broker 实现有 2 个平面:
- Control plane(控制平面)
- 由与 Kubernetes API 通信、监视自定义对象和管理数据平面的控制器组成。
- 数据平面
-
侦听传入事件、与 Apache Kafka 通信以及向事件接收器发送事件的组件集合。Apache Kafka 数据平面的 Knative Broker 实现是事件流的位置。实现由
kafka-broker-receiver和kafka-broker-dispatcher部署组成。
当您配置 Kafka 的代理类时,Apache Kafka 的 Knative Broker 实现会使用共享的数据平面。这意味着 knative-eventing 命名空间中的 kafka-broker-receiver 和 kafka-broker-dispatcher 部署用于集群中的所有 Apache Kafka Broker。
但是,当您配置 KafkaNamespaced 的代理类时,Apache Kafka 代理控制器会为代理存在的每个命名空间创建一个新的数据平面。该数据平面都会被该命名空间中的所有 KafkaNamespaced 代理使用。这提供了数据平面之间的隔离,因此用户命名空间中的 kafka-broker-receiver 和 kafka-broker-dispatcher 部署仅用于该命名空间中的代理。
由于具有单独的数据平面,这个安全功能会创建更多部署并使用更多资源。除非有这样的隔离要求,请使用一个带有 Kafka 类的 常规 代理。
4.6.1.4. 为使用隔离的数据平面的 Apache Kafka 创建 Knative 代理 复制链接链接已复制到粘贴板!
带有隔离数据平面的 Apache Kafka 的 Knative Broker 实现只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
要创建 KafkaNamespaced 代理,您必须将 eventing.knative.dev/broker.class 注解设置为 KafkaNamespaced。
先决条件
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源已安装在 OpenShift Container Platform 集群中。 - 您可以访问 Apache Kafka 实例,如 Red Hat AMQ Streams,并创建了 Kafka 主题。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI(
oc)。
流程
使用 YAML 文件创建基于 Apache Kafka 的代理:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用基于 Apache Kafka 的代理 YAML 文件:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
spec.config 中的 ConfigMap 对象必须与 Broker 对象位于同一个命名空间中:
使用 KafkaNamespaced 类创建第一个 Broker 对象后,在命名空间中创建 kafka-broker-receiver 和 kafka-broker-dispatcher 部署。因此,同一命名空间中的 KafkaNamespaced 类的所有代理都将使用相同的数据平面。如果命名空间中没有 KafkaNamespaced 类的代理,则会删除命名空间中的数据平面。
4.6.2. 配置 Apache Kafka 代理设置 复制链接链接已复制到粘贴板!
您可以通过创建配置映射并在 Kafka Broker 对象中引用此配置映射,配置复制因素、bootstrap 服务器和 Kafka 代理的主题分区数量。
Knative Eventing 支持 Kafka 支持的完整主题配置选项。要设置这些选项,您必须使用 default.topic.config. 前缀在 ConfigMap 中添加密钥。
先决条件
- 在 OpenShift Container Platform 上具有集群或专用管理员权限。
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源(CR)已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI(
oc)。
流程
修改
kafka-broker-config配置映射,或创建自己的配置映射来包含以下配置:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要default.topic.replication.factor值必须小于或等于集群中的 Kafka 代理实例数量。例如,如果您只有一个 Kafka 代理,则default.topic.replication.factor值应该不超过"1"。Kafka 代理配置映射示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用配置映射:
$ oc apply -f <config_map_filename>
$ oc apply -f <config_map_filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 指定 Kafka
Broker对象的配置映射:Broker 对象示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用代理:
$ oc apply -f <broker_filename>
$ oc apply -f <broker_filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6.3. Apache Kafka 的 Knative 代理实现的安全配置 复制链接链接已复制到粘贴板!
Kafka 集群通常使用 TLS 或 SASL 身份验证方法进行保护。您可以使用 TLS 或 SASL 将 Kafka 代理或频道配置为针对受保护的 Red Hat AMQ Streams 集群进行操作。
红帽建议您同时启用 SASL 和 TLS。
4.6.3.1. 为 Apache Kafka 代理配置 TLS 身份验证 复制链接链接已复制到粘贴板!
Apache Kafka 客户端和服务器使用 传输层安全性 (TLS) 来加密 Knative 和 Kafka 之间的流量,以及用于身份验证。TLS 是 Apache Kafka 的 Knative 代理实现唯一支持的流量加密方法。
先决条件
- 在 OpenShift Container Platform 上具有集群或专用管理员权限。
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafkaCR 已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
您有一个 Kafka 集群 CA 证书存储为一个
.pem文件。 -
您有一个 Kafka 集群客户端证书,并存储为
.pem文件的密钥。 -
安装 OpenShift CLI (
oc) 。
流程
在
knative-eventing命名空间中创建证书文件作为 secret:oc create secret -n knative-eventing generic <secret_name> \ --from-literal=protocol=SSL \ --from-file=ca.crt=caroot.pem \ --from-file=user.crt=certificate.pem \ --from-file=user.key=key.pem
$ oc create secret -n knative-eventing generic <secret_name> \ --from-literal=protocol=SSL \ --from-file=ca.crt=caroot.pem \ --from-file=user.crt=certificate.pem \ --from-file=user.key=key.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要使用密钥名称
ca.crt、user.crt和user.key。不要更改它们。编辑
KnativeKafkaCR,并在brokerspec 中添加对 secret 的引用:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.6.3.2. 为 Apache Kafka 代理配置 SASL 身份验证 复制链接链接已复制到粘贴板!
Apache Kafka 使用 简单身份验证和安全层 (SASL) 进行身份验证。如果在集群中使用 SASL 身份验证,用户则必须向 Knative 提供凭证才能与 Kafka 集群通信,否则无法生成或消耗事件。
先决条件
- 在 OpenShift Container Platform 上具有集群或专用管理员权限。
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafkaCR 已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您有一个 Kafka 集群的用户名和密码。
-
您已选择使用 SASL 机制,例如
PLAIN、SCRAM-SHA-256或SCRAM-SHA-512。 -
如果启用了 TLS,您还需要 Kafka 集群的
ca.crt证书文件。 -
安装 OpenShift CLI (
oc) 。
流程
在
knative-eventing命名空间中创建证书文件作为 secret:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用密钥名称
协议、sasl.mechanism、ca.crt、password和user。不要更改它们。注意如果 Kafka 集群使用证书已在系统信任存储中的公共 CA 签名的证书,则
ca.crt密钥是可选的。
编辑
KnativeKafkaCR,并在brokerspec 中添加对 secret 的引用:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7. 管理代理 复制链接链接已复制到粘贴板!
创建代理后,您可以使用 Knative (kn) CLI 命令管理代理,或者在 OpenShift Container Platform web 控制台中修改代理。
4.7.1. 使用 CLI 管理代理 复制链接链接已复制到粘贴板!
Knative (kn) CLI 提供了可用于描述和列出现有代理的命令。
4.7.1.1. 使用 Knative CLI 列出现有代理 复制链接链接已复制到粘贴板!
使用 Knative (kn) CLI 列出代理提供了精简且直观的用户界面。您可以使用 kn broker list 命令列出集群中的现有代理。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。
流程
列出所有存在的代理:
kn broker list
$ kn broker listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 True
NAME URL AGE CONDITIONS READY REASON default http://broker-ingress.knative-eventing.svc.cluster.local/test/default 45s 5 OK / 5 TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7.1.2. 使用 Knative CLI 描述现有代理 复制链接链接已复制到粘贴板!
使用 Knative (kn) 描述代理提供了精简且直观的用户界面。您可以使用 kn broker describe 命令通过 Knative CLI 输出集群中现有代理的信息。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。
流程
描述现有代理:
kn broker describe <broker_name>
$ kn broker describe <broker_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 default broker 的命令示例
kn broker describe default
$ kn broker describe defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7.2. 将代理连接到接收器 复制链接链接已复制到粘贴板!
您可以通过创建触发器将代理连接到 OpenShift Container Platform Web 控制台中的事件 sink。
先决条件
- OpenShift Serverless Operator、Knative Serving 和 Knative Eventing 已在 OpenShift Container Platform 集群中安装。
- 已登陆到 web 控制台。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您已创建了 sink,如 Knative 服务或频道。
- 您已创建了代理。
流程
- 在 Topology 视图中,指向您创建的代理。此时会出现箭头。将箭头拖到您要连接到代理的 sink 中。此操作将打开 Add Trigger 对话框。
- 在 Add Trigger 对话框中,输入触发器的名称并点 Add。
验证
您可以通过查看 Topology 页面来验证代理是否已连接到 sink。
- 导航到 Topology。
- 点击将代理连接到 sink 的行,在 Details 面板中查看触发器的详情。
第 5 章 触发器 复制链接链接已复制到粘贴板!
5.1. 触发器概述 复制链接链接已复制到粘贴板!
触发器是 Knative Eventing 中的基本组件,它根据定义的过滤器将特定事件源连接到订阅者服务。通过创建 Trigger,您可以动态管理系统中路由事件的方式,确保它们根据您的业务逻辑到达适当的目的地。
代理可与触发器结合使用,用于将事件源发送到事件 sink。事件从事件源发送到代理,作为 HTTP POST 请求。事件进入代理后,可使用触发器根据 CloudEvent 属性 进行过滤,并作为 HTTP POST 请求发送到事件 sink。
5.2. 创建触发器 复制链接链接已复制到粘贴板!
Knative Eventing 中的触发器允许您根据要求将事件从代理路由到特定的订阅者。通过定义 Trigger,您可以动态将事件制作者连接到消费者,确保事件传送到正确的目的地。本节论述了创建 Trigger、配置其过滤器并验证其功能的步骤。无论您是处理简单路由需求还是复杂的事件驱动的工作流。
以下示例显示了 Triggers 的常见配置,演示了如何将事件路由到 Knative 服务或自定义端点。
到 Knative Serving 服务的路由事件示例
以下 Trigger 将所有事件从 default 代理路由到名为 my-service 的 Knative Serving 服务:
建议路由所有没有 过滤器 属性的事件进行调试。它允许您观察和分析所有传入的事件,帮助识别问题或验证通过代理的事件流,然后再应用特定的过滤器。要了解有关过滤的更多信息,请参阅高级触发器过滤器。
要应用此触发器,您可以将配置保存到文件中,例如 trigger.yaml 并运行以下命令:
oc apply -f trigger.yaml
$ oc apply -f trigger.yaml
到自定义路径的路由事件示例
此 Trigger 将所有事件从 default 代理路由到名为 my-service 的服务上的自定义路径 /my-custom-path :
您可以将配置保存到文件中,如 custom-path-trigger.yaml,并运行以下命令:
oc apply -f custom-path-trigger.yaml
$ oc apply -f custom-path-trigger.yaml
5.2.1. 创建触发器 复制链接链接已复制到粘贴板!
使用 OpenShift Container Platform Web 控制台提供了一个简化且直观的用户界面来创建触发器。在集群中安装 Knative Eventing 并创建了代理后,您可以使用 web 控制台创建触发器。
先决条件
- OpenShift Serverless Operator、Knative Serving 和 Knative Eventing 已在 OpenShift Container Platform 集群中安装。
- 已登陆到 web 控制台。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您已创建了代理和 Knative 服务或其他事件 sink 以连接触发器。
流程
- 导航到 Topology 页面。
- 将鼠标悬停在您要创建触发器的代理上,并拖动箭头。此时会显示 Add Trigger 选项。
- 点 Add Trigger。
- 在 Subscriber 列表中选择您的接收器。
- 点 Add。
验证
- 创建订阅后,您可以在 Topology 页面中查看它,其中它是一个将代理连接到事件 sink 的行。
删除触发器
- 导航到 Topology 页面。
- 点您要删除的触发器。
- 在 Actions 上下文菜单中,选择 Delete Trigger。
5.2.2. 使用 Knative CLI 创建触发器 复制链接链接已复制到粘贴板!
您可以使用 kn trigger create 命令创建触发器。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建触发器:
kn trigger create <trigger_name> --broker <broker_name> --filter <key=value> --sink <sink_name>
$ kn trigger create <trigger_name> --broker <broker_name> --filter <key=value> --sink <sink_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,您可以创建触发器并使用代理注入同时创建
default代理:kn trigger create <trigger_name> --inject-broker --filter <key=value> --sink <sink_name>
$ kn trigger create <trigger_name> --inject-broker --filter <key=value> --sink <sink_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,触发器会将发送到代理的所有事件转发到订阅到该代理的 sink。通过对触发器使用
--filter属性,您可以从代理过滤事件,这样订阅者才会根据您定义的标准接收一小部分事件。
5.3. 从命令行列出触发器 复制链接链接已复制到粘贴板!
使用 Knative (kn) CLI 列出触发器提供精简、直观的用户界面。
5.3.1. 使用 Knative CLI 列出触发器 复制链接链接已复制到粘贴板!
您可以使用 kn trigger list 命令列出集群中的现有触发器。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。
流程
显示可用触发器列表:
kn trigger list
$ kn trigger listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME BROKER SINK AGE CONDITIONS READY REASON email default ksvc:edisplay 4s 5 OK / 5 True ping default ksvc:edisplay 32s 5 OK / 5 True
NAME BROKER SINK AGE CONDITIONS READY REASON email default ksvc:edisplay 4s 5 OK / 5 True ping default ksvc:edisplay 32s 5 OK / 5 TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:以 JSON 格式输出触发器列表:
kn trigger list -o json
$ kn trigger list -o jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4. 描述从命令行中的触发器 复制链接链接已复制到粘贴板!
使用 Knative (kn) CLI 描述触发器,提供了一个简化且直观的用户界面。
5.4.1. 使用 Knative CLI 描述触发器 复制链接链接已复制到粘贴板!
您可以通过 kn trigger describe 命令使用 Knative CLI 输出集群中现有触发器的信息。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。 - 您已创建了触发器。
流程
输入命令:
kn trigger describe <trigger_name>
$ kn trigger describe <trigger_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.5. 将触发器连接到 sink 复制链接链接已复制到粘贴板!
您可以将触发器连接到 sink,以便在将代理的事件发送到 sink 前过滤代理的事件。在 Trigger 对象的资源规格中,连接到触发器的 sink 会配置为 订阅者。
连接到 Apache Kafka sink 的 Trigger 对象示例
5.6. 从命令行过滤触发器 复制链接链接已复制到粘贴板!
使用 Knative (kn) CLI 使用 kn CLI 通过触发器过滤事件,可提供精简且直观的用户界面。您可以使用 kn trigger create 命令和适当的标记来通过使用触发器过滤事件。
5.6.1. 使用 Knative CLI 使用触发器过滤事件 复制链接链接已复制到粘贴板!
在以下触发器示例中,只有带有属性 type: dev.knative.samples.helloworld 的事件才会发送到事件 sink:
kn trigger create <trigger_name> --broker <broker_name> --filter type=dev.knative.samples.helloworld --sink ksvc:<service_name>
$ kn trigger create <trigger_name> --broker <broker_name> --filter type=dev.knative.samples.helloworld --sink ksvc:<service_name>
您还可以使用多个属性过滤事件。以下示例演示了如何使用类型、源和扩展属性过滤事件:
kn trigger create <trigger_name> --broker <broker_name> --sink ksvc:<service_name> \ --filter type=dev.knative.samples.helloworld \ --filter source=dev.knative.samples/helloworldsource \ --filter myextension=my-extension-value
$ kn trigger create <trigger_name> --broker <broker_name> --sink ksvc:<service_name> \
--filter type=dev.knative.samples.helloworld \
--filter source=dev.knative.samples/helloworldsource \
--filter myextension=my-extension-value
5.7. 高级触发器过滤器 复制链接链接已复制到粘贴板!
高级触发器过滤器为您提供了更精确的事件路由的高级选项。您可以根据完全匹配、前缀或后缀以及 CloudEvent 扩展过滤事件。通过这个添加的控制,可以更轻松地微调事件流如何确保只有相关事件触发特定的操作。
高级触发器过滤器功能只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
5.7.1. 高级触发器过滤器概述 复制链接链接已复制到粘贴板!
高级触发器过滤器功能添加新的 过滤器 字段,以与 CloudEvents Subscriptions API 中定义的过滤器 API 字段保持一致。您可以指定过滤器表达式,其中每个表达式评估为每个事件为 true 或 false。
以下示例显示了使用高级过滤器字段的触发器:
filters 字段包含一组过滤器表达式,每个过滤器表达式都评估为 true 或 false。如果任何表达式评估为 false,则事件不会发送到订阅者。每个过滤器表达式都使用特定的 dialect,它决定了过滤器的类型以及表达式中允许的额外属性集合。
5.7.2. 支持的过滤器描述 复制链接链接已复制到粘贴板!
您可以使用 dialects 为目标特定事件定义灵活的过滤器表达式。
高级触发器过滤器支持以下为匹配和过滤事件的不同方法的 dialects:
-
exact -
prefix -
suffix -
all -
any -
not -
cesql
每个 dialect 都提供了一种根据特定条件过滤事件的不同方法,为处理启用精确事件选择。
5.7.2.1. exact filter dialect 复制链接链接已复制到粘贴板!
通过比较 CloudEvent 属性的字符串值来准确过滤事件,使其与指定字符串完全匹配。比较区分大小写。如果属性不是字符串,则过滤器会将属性转换为字符串表示,然后再将其与指定的值进行比较。
确切的 过滤器 dialect 示例
5.7.2.2. prefix filter dialect 复制链接链接已复制到粘贴板!
前缀 dialect 过滤器事件通过比较以指定字符串开头的 CloudEvent 属性的字符串值。这种比较区分大小写。如果属性不是字符串,则过滤器会将属性转换为字符串表示,然后再将其与指定的值匹配。
前缀 过滤器 dialect 示例
5.7.2.3. 后缀 过滤器 dialect 复制链接链接已复制到粘贴板!
后缀 dialect 通过比较以指定字符串结尾的 CloudEvent 属性的字符串值来过滤事件。这种比较区分大小写。如果属性不是字符串,则过滤器会将属性转换为字符串表示,然后再将其匹配到指定的值。
后缀 过滤器 dialect 示例
5.7.2.4. 所有过滤器 dialect 复制链接链接已复制到粘贴板!
所有过滤器 dialect 需要所有嵌套过滤器表达式评估为 true 来处理事件。如果有任何嵌套表达式返回 false,则事件不会发送到订阅者。
所有过滤器 dialect 示例
5.7.2.5. 任何 过滤器 dialect 复制链接链接已复制到粘贴板!
任何 过滤器分离至少需要其中一个嵌套过滤器表达式来评估为 true。如果没有嵌套表达式返回 true,则事件不会发送到订阅者。
任何 过滤器 dialect 的示例
5.7.2.6. Not filter dialect 复制链接链接已复制到粘贴板!
not filter dialect 要求嵌套 过滤器表达式 评估为要处理的事件。如果嵌套表达式评估为 true,则事件不会发送到订阅者。
not filter dialect 示例
5.7.2.7. cesql 过滤器 dialect 复制链接链接已复制到粘贴板!
CloudEvents SQL 表达式(cesql)允许计算值以及与 CloudEvent 属性的匹配,这些表达式根据结构查询语言(SQL) WHERE 子句的语法调整。
cesql 过滤器 dialect 使用 CloudEvents SQL 表达式来过滤事件。提供的 CESQL 表达式必须评估为处理事件。
cesql 过滤器 dialect 的示例
有关 cesql 过滤器分离的语法和功能的更多信息,请参阅 CloudEvents SQL Expression Language。
5.7.3. 与现有过滤器字段冲突 复制链接链接已复制到粘贴板!
您可以同时 使用过滤器和 现有的 filter 字段。如果启用 new-trigger-filters 功能,并且对象同时包含 过滤器和过滤器,则 字段会覆盖。此设置允许您测试新 filters 的过滤器 字段,同时保持对现有过滤器的支持。您可以逐步将新字段引入现有的触发器对象。
过滤器 字段覆盖 filter 字段示例:
5.7.4. 传统属性过滤器 复制链接链接已复制到粘贴板!
传统属性过滤器对任意数量的 CloudEvents 属性启用完全匹配过滤,包括扩展。其功能反映了确切的过滤器分离,我们建议尽可能过渡到确切的过滤器。但是,为了向后兼容,属性过滤器仍可用。
以下示例演示了如何过滤 default 代理中的事件,该代理与 type 属性 dev.knative.foo.bar 匹配,且扩展 myextension 带有 my-extension-value 值:
使用特定属性过滤事件示例
当同时指定了 filters 字段和旧的 filter 字段时,filters 字段具有优先权。
例如,在以下示例配置中,会发送带有 dev.knative.a 类型的事件,而带有 dev.knative.b 类型的事件将被忽略:
5.8. 从命令行更新触发器 复制链接链接已复制到粘贴板!
使用 Knative (kn) CLI 更新触发器提供精简、直观的用户界面。
5.8.1. 使用 Knative CLI 更新触发器 复制链接链接已复制到粘贴板!
您可以使用带有特定标志的 kn trigger update 命令来更新触发器的属性。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
更新触发器:
kn trigger update <trigger_name> --filter <key=value> --sink <sink_name> [flags]
$ kn trigger update <trigger_name> --filter <key=value> --sink <sink_name> [flags]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以更新触发器来过滤与传入事件匹配的事件属性。例如,使用
type属性:kn trigger update <trigger_name> --filter type=knative.dev.event
$ kn trigger update <trigger_name> --filter type=knative.dev.eventCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以从触发器中删除过滤器属性。例如,您可以使用键
type来删除过滤器属性:kn trigger update <trigger_name> --filter type-
$ kn trigger update <trigger_name> --filter type-Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用
--sink参数来更改触发器的事件 sink:kn trigger update <trigger_name> --sink ksvc:my-event-sink
$ kn trigger update <trigger_name> --sink ksvc:my-event-sinkCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9. 从命令行删除触发器 复制链接链接已复制到粘贴板!
使用 Knative (kn) CLI 删除触发器提供精简而直观的用户界面。
5.9.1. 使用 Knative CLI 删除触发器 复制链接链接已复制到粘贴板!
您可以使用 kn trigger delete 命令删除触发器。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
删除触发器:
kn trigger delete <trigger_name>
$ kn trigger delete <trigger_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
列出现有触发器:
kn trigger list
$ kn trigger listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证触发器不再存在:
输出示例
No triggers found.
No triggers found.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.10. 触发器的事件交付顺序 复制链接链接已复制到粘贴板!
在 Knative Eventing 中,事件的交付顺序在确保消息按照应用程序要求处理时扮演着重要角色。使用 Kafka 代理时,您可以指定事件是否应按顺序或不严格排序。通过配置交付顺序,您可以为需要顺序处理或优先发送性能的用例优化事件处理。
5.10.1. 为触发器配置事件交付顺序 复制链接链接已复制到粘贴板!
如果使用 Kafka 代理,您可以将事件的交付顺序从触发器配置为事件 sink。
先决条件
- OpenShift Serverless Operator、Knative Eventing 和 Knative Kafka 安装在 OpenShift Container Platform 集群中。
- Kafka 代理被启用在集群中使用,您也创建了一个 Kafka 代理。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift (
oc) CLI。
流程
创建或修改
Trigger对象,并使用以下示例 Trigger YAML 文件设置kafka.eventing.knative.dev/delivery.order注解:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 支持的消费者交付保证有:
unordered- 未排序的消费者是一种非阻塞消费者,它能以未排序的方式提供消息,同时保持正确的偏移管理。
排序的一个订购的消费者是一个按分区阻止消费者,在提供分区的下一个消息前等待来自 CloudEvent 订阅者成功响应。
默认排序保证是
unordered。
使用以下命令应用
Trigger对象:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.10.2. 后续步骤 复制链接链接已复制到粘贴板!
- 配置事件交付参数,当事件无法发送到事件 sink 时。
第 6 章 Channels 复制链接链接已复制到粘贴板!
6.1. 频道和订阅 复制链接链接已复制到粘贴板!
频道是定义单一事件转发和持久层的自定义资源。事件源或生成程序在将事件发送到频道后,可使用订阅将这些事件发送到多个 Knative 服务或其他 sink。
您可以通过实例化受支持的 Channel 对象来创建频道,并通过修改 Subscription 对象中的 delivery 规格来配置重新发送尝试。
创建 Channel 对象后,根据默认频道实现,一个经过更改的准入 Webhook 会为 Channel 对象添加一组 spec.channelTemplate 属性。例如,对于 InMemoryChannel 默认实现,Channel 对象如下所示:
然后,频道控制器将根据这个 spec.channelTemplate 配置创建后备频道实例。
创建后,spec.channelTemplate 属性将无法更改,因为它们由默认频道机制设置,而不是由用户设置。
当此机制与上例搭配使用时,会创建两个对象:一个通用的后备频道和一个 InMemoryChannel 频道。如果您使用不同的默认频道实现,使用特定于您的实现的频道替换 InMemoryChannel。例如,在 Apache Kafka 的 Knative 代理中,会创建 KafkaChannel 频道。
后备频道充当将订阅复制到用户创建的频道对象的代理,并设置用户创建的频道对象状态来反映后备频道的状态。
6.1.1. 频道实现类型 复制链接链接已复制到粘贴板!
OpenShift Serverless 支持 InMemoryChannel 和 KafkaChannel 频道实现。因为其限制,才建议在开发中使用 InMemoryChannel 频道。您可以在生产环境中使用 KafkaChannel 频道。
以下是 InMemoryChannel 类型频道的限制:
- 事件没有持久性。如果 Pod 停机,则 Pod 上的事件将会丢失。
-
InMemoryChannel频道没有实现事件排序,因此同时接收到的两个事件可能会以任何顺序传送给订阅者。 -
如果订阅者拒绝某个事件,则不会默认重新发送尝试。您可以通过修改
Subscription对象中的delivery规格来配置重新发送尝试。
6.2. 创建频道 复制链接链接已复制到粘贴板!
频道是定义单一事件转发和持久层的自定义资源。事件源或生成程序在将事件发送到频道后,可使用订阅将这些事件发送到多个 Knative 服务或其他 sink。
您可以通过实例化受支持的 Channel 对象来创建频道,并通过修改 Subscription 对象中的 delivery 规格来配置重新发送尝试。
6.2.1. 创建频道 复制链接链接已复制到粘贴板!
使用 OpenShift Container Platform Web 控制台提供了一个简化的用户界面来创建频道。在集群中安装 Knative Eventing 后,您可以使用 web 控制台创建频道。
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
- 导航到 +Add → Channel。
选择您要在 Type 列表中创建的
Channel对象类型。注意目前默认只支持
InMemoryChannel频道对象。如果您在 OpenShift Serverless 上安装了 Apache Kafka 的 Knative 代理实现,则 Apache Kafka 的 Knative 频道可用。- 点 Create。
验证
通过导航到 Topology 页面确认频道现在存在。
6.2.2. 使用 Knative CLI 创建频道 复制链接链接已复制到粘贴板!
使用 Knative (kn) 创建频道提供了比直接修改 YAML 文件更精简且直观的用户界面。您可以使用 kn channel create 命令创建频道。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
已安装 Knative (
kn) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建频道:
kn channel create <channel_name> --type <channel_type>
$ kn channel create <channel_name> --type <channel_type>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 频道类型是可选的,但如果指定,则必须使用
Group:Version:Kind格式。例如,您可以创建一个InMemoryChannel对象:kn channel create mychannel --type messaging.knative.dev:v1:InMemoryChannel
$ kn channel create mychannel --type messaging.knative.dev:v1:InMemoryChannelCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Channel 'mychannel' created in namespace 'default'.
Channel 'mychannel' created in namespace 'default'.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要确认该频道现在存在,请列出现有频道并检查输出:
kn channel list
$ kn channel listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
kn channel list NAME TYPE URL AGE READY REASON mychannel InMemoryChannel http://mychannel-kn-channel.default.svc.cluster.local 93s True
kn channel list NAME TYPE URL AGE READY REASON mychannel InMemoryChannel http://mychannel-kn-channel.default.svc.cluster.local 93s TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
删除频道
删除频道:
kn channel delete <channel_name>
$ kn channel delete <channel_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.3. 使用 YAML 创建默认实现频道 复制链接链接已复制到粘贴板!
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以声明性的方式描述频道,并以可重复的方式描述频道。要使用 YAML 创建无服务器频道,您必须创建一个 YAML 文件来定义 Channel 对象,然后使用 oc apply 命令应用它。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
安装 OpenShift CLI (
oc) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建一个
Channel对象作为一个 YAML 文件:apiVersion: messaging.knative.dev/v1 kind: Channel metadata: name: example-channel namespace: default
apiVersion: messaging.knative.dev/v1 kind: Channel metadata: name: example-channel namespace: defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 YAML 文件:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.4. 使用 YAML 为 Apache Kafka 创建频道 复制链接链接已复制到粘贴板!
使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以声明性的方式描述频道,并以可重复的方式描述频道。您可以通过创建一个 Kafka 频道,创建由 Kafka 主题支持的 Knative Eventing 频道。要使用 YAML 创建 Kafka 频道,您必须创建一个 YAML 文件来定义 KafkaChannel 对象,然后使用 oc apply 命令应用它。
先决条件
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源已安装在 OpenShift Container Platform 集群中。 -
安装 OpenShift CLI (
oc) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建一个
KafkaChannel对象作为一个 YAML 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要仅支持 OpenShift Serverless 上的
KafkaChannel对象的v1beta1API 版本。不要使用这个 API 的v1alpha1版本,因为这个版本现已弃用。应用
KafkaChannelYAML 文件:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.5. 后续步骤 复制链接链接已复制到粘贴板!
- 创建频道后,您可以 将频道连接到 sink,以便 sink 可以接收事件。
- 配置事件交付参数,当事件无法发送到事件 sink 时。
6.3. 将频道连接到 sink 复制链接链接已复制到粘贴板!
来自事件源或制作者发送到频道的事件可使用 订阅 转发到一个或多个 sink。您可以通过配置 Subscription 对象来创建订阅,它指定消耗发送到该频道的事件的频道和接收器(也称为 订阅者)。
6.3.1. 创建订阅 复制链接链接已复制到粘贴板!
创建频道和事件 sink 后,您可以创建一个订阅来启用事件交付。使用 OpenShift Container Platform Web 控制台提供了一个简化且直观的用户界面来创建订阅。
先决条件
- OpenShift Serverless Operator、Knative Serving 和 Knative Eventing 已在 OpenShift Container Platform 集群中安装。
- 已登陆到 web 控制台。
- 您已创建了事件 sink,如 Knative 服务以及频道。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
- 导航到 Topology 页面。
使用以下方法之一创建订阅:
将鼠标悬停在您要为其创建订阅的频道上,并拖动箭头。此时会显示 Add Subscription 选项。
- 在 Subscriber 列表中选择您的接收器。
- 点 Add。
- 如果服务在与频道相同的命名空间或项目下的 Topology 视图中可用,点击您要为该频道创建订阅的频道,并将箭头直接拖到服务以立即从频道创建订阅到该服务。
验证
创建订阅后,您可以在 Topology 视图中将频道连接到该服务的行显示为:
6.3.2. 使用 YAML 创建订阅 复制链接链接已复制到粘贴板!
创建频道和事件 sink 后,您可以创建一个订阅来启用事件交付。使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以声明性的方式描述订阅,并以可重复的方式描述订阅。要使用 YAML 创建订阅,您必须创建一个 YAML 文件来定义 Subscription 对象,然后使用 oc apply 命令应用它。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
安装 OpenShift CLI (
oc) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建
Subscription对象:创建 YAML 文件并将以下示例代码复制到其中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 订阅的名称。
- 2
- 订阅连接的频道的配置设置。
- 3
- 事件交付的配置设置。这会告诉订阅无法发送给订阅者的事件。配置后,消耗的事件会发送到
deadLetterSink。事件将被丢弃,不会尝试重新发送该事件,并在系统中记录错误。deadLetterSink的值需要是一个 Destination。 - 4
- 订阅用户的配置设置。这是事件从频道发送的事件 sink。
应用 YAML 文件:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.3. 使用 Knative CLI 创建订阅 复制链接链接已复制到粘贴板!
创建频道和事件 sink 后,您可以创建一个订阅来启用事件交付。使用 Knative (kn) CLI 创建订阅提供了比直接修改 YAML 文件更精简且直观的用户界面。您可以使用带有适当标志的 kn subscription create 命令创建订阅。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建订阅以将接收器连接到频道:
kn subscription create <subscription_name> \ --channel <group:version:kind>:<channel_name> \ --sink <sink_prefix>:<sink_name> \ --sink-dead-letter <sink_prefix>:<sink_name>
$ kn subscription create <subscription_name> \ --channel <group:version:kind>:<channel_name> \1 --sink <sink_prefix>:<sink_name> \2 --sink-dead-letter <sink_prefix>:<sink_name>3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
--channel指定应处理的云事件的来源。您必须提供频道名称。如果您没有使用由Channel自定义资源支持的默认InMemoryChannel频道,您必须为指定频道类型添加<group:version:kind>前缀。例如,这是 Apache Kafka 支持的频道的messaging.knative.dev:v1beta1:KafkaChannel。- 2
--sink指定事件要传送到的目标目的地。默认情况下,<sink_name>解释为此名称的 Knative 服务,与订阅位于同一个命名空间中。您可以使用以下前缀之一指定接收器类型:ksvc- Knative 服务。
channel- 作为目的地的频道。这里只能引用默认频道类型。
broker- Eventing 代理。
- 3
- 可选:
--sink-dead-letter是一个可选标志,可用于指定在无法发送事件时哪些事件应发送到的接收器。如需更多信息,请参阅 OpenShift Serverless 事件交付文档。示例命令
kn subscription create mysubscription --channel mychannel --sink ksvc:event-display
$ kn subscription create mysubscription --channel mychannel --sink ksvc:event-displayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Subscription 'mysubscription' created in namespace 'default'.
Subscription 'mysubscription' created in namespace 'default'.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要确认频道已连接到事件接收器或 subscriber,使用一个订阅列出现有订阅并检查输出:
kn subscription list
$ kn subscription listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON mysubscription Channel:mychannel ksvc:event-display True
NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON mysubscription Channel:mychannel ksvc:event-display TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
删除订阅
删除订阅:
kn subscription delete <subscription_name>
$ kn subscription delete <subscription_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.4. 使用管理员权限创建订阅 复制链接链接已复制到粘贴板!
创建频道和事件 sink(也称为 订阅者 )后,您可以创建一个订阅来启用事件交付。订阅是通过配置 Subscription 对象创建的,它指定了要向其发送事件的频道和订阅者。您还可以指定一些特定于订阅者的选项,比如如何处理失败。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
- 已登陆到 web 控制台。
-
在 OpenShift Container Platform 上具有
cluster-admin权限,或者对 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 有集群或专用管理员权限。 - 您已创建了事件 sink,如 Knative 服务以及频道。
流程
- 在 OpenShift Container Platform web 控制台中导航至 Serverless → Eventing。
-
在 Channel 选项卡中,选择您要在其中添加订阅的频道的 Options 菜单
。
- 点击列表中的 Add Subscription。
- 在 Add Subscription 对话框中,为订阅选择 Subscriber。订阅者是可以从频道接收事件的 Knative 服务。
- 点 Add。
6.3.5. 后续步骤 复制链接链接已复制到粘贴板!
- 配置事件交付参数,当事件无法发送到事件 sink 时。
6.4. 默认频道实现 复制链接链接已复制到粘贴板!
default-ch-webhook 配置映射可以用来指定 Knative Eventing 的默认频道实现。您可以为整个集群或一个或多个命名空间指定默认频道实现。目前支持 InMemoryChannel 和 KafkaChannel 频道类型。
6.4.1. 配置默认频道实施 复制链接链接已复制到粘贴板!
先决条件
- 在 OpenShift Container Platform 上具有管理员权限。
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
如果要将 Apache Kafka 的 Knative 频道用作默认频道实现,还必须在集群中安装
KnativeKafkaCR。
流程
修改
KnativeEventing自定义资源,以添加default-ch-webhook配置映射的配置详情:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要配置特定于命名空间的默认设置会覆盖任何集群范围的设置。
6.5. 频道的安全配置 复制链接链接已复制到粘贴板!
6.5.1. 为 Apache Kafka 的 Knative 频道配置 TLS 身份验证 复制链接链接已复制到粘贴板!
Apache Kafka 客户端和服务器使用 传输层安全性 (TLS) 来加密 Knative 和 Kafka 之间的流量,以及用于身份验证。TLS 是 Apache Kafka 的 Knative 代理实现唯一支持的流量加密方法。
先决条件
- 在 OpenShift Container Platform 上具有集群或专用管理员权限。
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafkaCR 已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
您有一个 Kafka 集群 CA 证书存储为一个
.pem文件。 -
您有一个 Kafka 集群客户端证书,并存储为
.pem文件的密钥。 -
安装 OpenShift CLI (
oc) 。
流程
在所选命名空间中创建证书文件作为 secret:
oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-file=ca.crt=caroot.pem \ --from-file=user.crt=certificate.pem \ --from-file=user.key=key.pem
$ oc create secret -n <namespace> generic <kafka_auth_secret> \ --from-file=ca.crt=caroot.pem \ --from-file=user.crt=certificate.pem \ --from-file=user.key=key.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要使用密钥名称
ca.crt、user.crt和user.key。不要更改它们。编辑
KnativeKafka自定义资源:oc edit knativekafka
$ oc edit knativekafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 引用您的 secret 和 secret 的命名空间:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意确保指定 bootstrap 服务器中的匹配端口。
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.5.2. 为 Apache Kafka 的 Knative 频道配置 SASL 身份验证 复制链接链接已复制到粘贴板!
Apache Kafka 使用 简单身份验证和安全层 (SASL) 进行身份验证。如果在集群中使用 SASL 身份验证,用户则必须向 Knative 提供凭证才能与 Kafka 集群通信,否则无法生成或消耗事件。
先决条件
- 在 OpenShift Container Platform 上具有集群或专用管理员权限。
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafkaCR 已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
- 您有一个 Kafka 集群的用户名和密码。
-
您已选择使用 SASL 机制,例如
PLAIN、SCRAM-SHA-256或SCRAM-SHA-512。 -
如果启用了 TLS,您还需要 Kafka 集群的
ca.crt证书文件。 -
安装 OpenShift CLI (
oc) 。
流程
在所选命名空间中创建证书文件作为 secret:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用密钥名称
协议、sasl.mechanism、ca.crt、password和user。不要更改它们。注意如果 Kafka 集群使用证书已在系统信任存储中的公共 CA 签名的证书,则
ca.crt密钥是可选的。
编辑
KnativeKafka自定义资源:oc edit knativekafka
$ oc edit knativekafkaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 引用您的 secret 和 secret 的命名空间:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意确保指定 bootstrap 服务器中的匹配端口。
例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 7 章 订阅 复制链接链接已复制到粘贴板!
7.1. 创建订阅 复制链接链接已复制到粘贴板!
创建频道和事件 sink 后,您可以创建一个订阅来启用事件交付。订阅是通过配置 Subscription 对象创建的,它指定频道和接收器(也称为 订阅者)来发送事件。
7.1.1. 创建订阅 复制链接链接已复制到粘贴板!
创建频道和事件 sink 后,您可以创建一个订阅来启用事件交付。使用 OpenShift Container Platform Web 控制台提供了一个简化且直观的用户界面来创建订阅。
先决条件
- OpenShift Serverless Operator、Knative Serving 和 Knative Eventing 已在 OpenShift Container Platform 集群中安装。
- 已登陆到 web 控制台。
- 您已创建了事件 sink,如 Knative 服务以及频道。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
- 导航到 Topology 页面。
使用以下方法之一创建订阅:
将鼠标悬停在您要为其创建订阅的频道上,并拖动箭头。此时会显示 Add Subscription 选项。
- 在 Subscriber 列表中选择您的接收器。
- 点 Add。
- 如果服务在与频道相同的命名空间或项目下的 Topology 视图中可用,点击您要为该频道创建订阅的频道,并将箭头直接拖到服务以立即从频道创建订阅到该服务。
验证
创建订阅后,您可以在 Topology 视图中将频道连接到该服务的行显示为:
7.1.2. 使用 YAML 创建订阅 复制链接链接已复制到粘贴板!
创建频道和事件 sink 后,您可以创建一个订阅来启用事件交付。使用 YAML 文件创建 Knative 资源使用声明性 API,它允许您以声明性的方式描述订阅,并以可重复的方式描述订阅。要使用 YAML 创建订阅,您必须创建一个 YAML 文件来定义 Subscription 对象,然后使用 oc apply 命令应用它。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
安装 OpenShift CLI (
oc) 。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建
Subscription对象:创建 YAML 文件并将以下示例代码复制到其中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 订阅的名称。
- 2
- 订阅连接的频道的配置设置。
- 3
- 事件交付的配置设置。这会告诉订阅无法发送给订阅者的事件。配置后,消耗的事件会发送到
deadLetterSink。事件将被丢弃,不会尝试重新发送该事件,并在系统中记录错误。deadLetterSink的值需要是一个 Destination。 - 4
- 订阅用户的配置设置。这是事件从频道发送的事件 sink。
应用 YAML 文件:
oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.1.3. 使用 Knative CLI 创建订阅 复制链接链接已复制到粘贴板!
创建频道和事件 sink 后,您可以创建一个订阅来启用事件交付。使用 Knative (kn) CLI 创建订阅提供了比直接修改 YAML 文件更精简且直观的用户界面。您可以使用带有适当标志的 kn subscription create 命令创建订阅。
先决条件
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
-
已安装 Knative (
kn) CLI。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
创建订阅以将接收器连接到频道:
kn subscription create <subscription_name> \ --channel <group:version:kind>:<channel_name> \ --sink <sink_prefix>:<sink_name> \ --sink-dead-letter <sink_prefix>:<sink_name>
$ kn subscription create <subscription_name> \ --channel <group:version:kind>:<channel_name> \1 --sink <sink_prefix>:<sink_name> \2 --sink-dead-letter <sink_prefix>:<sink_name>3 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
--channel指定应处理的云事件的来源。您必须提供频道名称。如果您没有使用由Channel自定义资源支持的默认InMemoryChannel频道,您必须为指定频道类型添加<group:version:kind>前缀。例如,这是 Apache Kafka 支持的频道的messaging.knative.dev:v1beta1:KafkaChannel。- 2
--sink指定事件要传送到的目标目的地。默认情况下,<sink_name>解释为此名称的 Knative 服务,与订阅位于同一个命名空间中。您可以使用以下前缀之一指定接收器类型:ksvc- Knative 服务。
channel- 作为目的地的频道。这里只能引用默认频道类型。
broker- Eventing 代理。
- 3
- 可选:
--sink-dead-letter是一个可选标志,可用于指定在无法发送事件时哪些事件应发送到的接收器。如需更多信息,请参阅 OpenShift Serverless 事件交付文档。示例命令
kn subscription create mysubscription --channel mychannel --sink ksvc:event-display
$ kn subscription create mysubscription --channel mychannel --sink ksvc:event-displayCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Subscription 'mysubscription' created in namespace 'default'.
Subscription 'mysubscription' created in namespace 'default'.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
要确认频道已连接到事件接收器或 subscriber,使用一个订阅列出现有订阅并检查输出:
kn subscription list
$ kn subscription listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON mysubscription Channel:mychannel ksvc:event-display True
NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON mysubscription Channel:mychannel ksvc:event-display TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
删除订阅
删除订阅:
kn subscription delete <subscription_name>
$ kn subscription delete <subscription_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.1.4. 后续步骤 复制链接链接已复制到粘贴板!
- 配置事件交付参数,当事件无法发送到事件 sink 时。
7.2. 管理订阅 复制链接链接已复制到粘贴板!
7.2.1. 使用 Knative CLI 描述订阅 复制链接链接已复制到粘贴板!
您可以使用 kn subscription describe 命令在终端中使用 Knative (kn) 打印有关订阅的信息。使用 Knative CLI 描述订阅可提供比直接查看 YAML 文件更精简且直观的用户界面。
先决条件
-
已安装 Knative (
kn) CLI。 - 您已在集群中创建了订阅。
流程
描述订阅:
kn subscription describe <subscription_name>
$ kn subscription describe <subscription_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.2. 使用 Knative CLI 列出订阅 复制链接链接已复制到粘贴板!
您可以使用 kn subscription list 命令通过 Knative (kn) CLI 列出集群中的现有订阅。使用 Knative CLI 列出订阅提供了精简且直观的用户界面。
先决条件
-
已安装 Knative (
kn) CLI。
流程
列出集群中的订阅:
kn subscription list
$ kn subscription listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON mysubscription Channel:mychannel ksvc:event-display True
NAME CHANNEL SUBSCRIBER REPLY DEAD LETTER SINK READY REASON mysubscription Channel:mychannel ksvc:event-display TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.3. 使用 Knative CLI 更新订阅 复制链接链接已复制到粘贴板!
您可以使用 kn subscription update 命令以及使用 Knative (kn) CLI 从终端更新订阅的适当标志。使用 Knative CLI 更新订阅可提供比直接更新 YAML 文件更精简且直观的用户界面。
先决条件
-
已安装 Knative (
kn) CLI。 - 您已创建了订阅。
流程
更新订阅:
kn subscription update <subscription_name> \ --sink <sink_prefix>:<sink_name> \ --sink-dead-letter <sink_prefix>:<sink_name>
$ kn subscription update <subscription_name> \ --sink <sink_prefix>:<sink_name> \1 --sink-dead-letter <sink_prefix>:<sink_name>2 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
--sink指定要将事件传送到的更新目标目的地。您可以使用以下前缀之一指定接收器类型:ksvc- Knative 服务。
channel- 作为目的地的频道。这里只能引用默认频道类型。
broker- Eventing 代理。
- 2
- 可选:
--sink-dead-letter是一个可选标志,可用于指定在无法发送事件时哪些事件应发送到的接收器。如需更多信息,请参阅 OpenShift Serverless 事件交付文档。示例命令
kn subscription update mysubscription --sink ksvc:event-display
$ kn subscription update mysubscription --sink ksvc:event-displayCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 8 章 事件交付 复制链接链接已复制到粘贴板!
您可以配置事件交付参数,当事件无法发送到事件 sink 时。不同的频道和代理类型都有自己的行为模式,用于事件交付。
配置事件交付参数,包括死信接收器,可确保重试任何无法发送到事件接收器的事件。否则,未验证的事件将被丢弃。
如果事件成功传送到 Apache Kafka 的频道或代理接收器,接收器会使用 202 状态代码进行响应,这意味着事件已安全地存储在 Kafka 主题中,且不会丢失。如果接收器使用任何其他状态代码响应,则事件不会被安全存储,用户必须执行步骤来解决这个问题。
8.1. 可配置事件交付参数 复制链接链接已复制到粘贴板!
为事件交付配置以下参数:
- 死信接收器
-
您可以配置
deadLetterSink交付参数,以便在事件无法发送时,它存储在指定的事件 sink 中。取消请求没有存储在死信接收器中的事件会被丢弃。死信接收器是符合 Knative Eventing sink 合同的任何可寻址对象,如 Knative 服务、Kubernetes 服务或一个 URI。 - Retries
-
您可以通过使用整数值配置重试 delivery 参数,在事件发送到 dead letter sink 前
重试交付的次数。 - Back off 延迟
-
您可以设置
backoffDelay交付参数,以在失败后尝试事件交付重试前指定延迟。backoffDelay参数的持续时间使用 ISO 8601 格式指定。例如,PT1S指定 1 秒延迟。 - Back off 策略
-
backoffPolicy交付参数可以用来指定重试避退策略。该策略可以指定为linear或exponential。当使用linearback off 策略时,back off 延迟等同于backoffDelay * <numberOfRetries>。当使用exponentialbackoff 策略时,back off 的延迟等于backoffDelay*2^<numberOfRetries>。
8.2. 配置事件交付参数示例 复制链接链接已复制到粘贴板!
您可以为 Broker、Trigger、Channel 和 Subscription 对象配置事件交付参数。如果您为代理或频道配置事件交付参数,这些参数会传播到为这些对象创建的触发器或订阅。您还可以为触发器或订阅设置事件交付参数,以覆盖代理或频道的设置。
Broker 对象示例
Trigger 对象示例
Channel 对象示例
Subscription 对象示例
第 9 章 事件发现 复制链接链接已复制到粘贴板!
9.1. 列出事件源和事件源类型 复制链接链接已复制到粘贴板!
可以查看存在的事件源或事件源类型的列表,也可以在 OpenShift Container Platform 集群中使用。您可以使用 Knative (kn) CLI 或 OpenShift Container Platform Web 控制台列出可用事件源或事件源类型。
9.2. 从命令行列出事件源类型 复制链接链接已复制到粘贴板!
使用 Knative (kn) CLI 提供了简化和直观的用户界面,用来在集群中查看可用事件源类型。
9.2.1. 使用 Knative CLI 列出可用事件源类型 复制链接链接已复制到粘贴板!
您可以使用 kn source list-types CLI 命令列出集群中创建和使用的事件源类型。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
已安装 Knative (
kn) CLI。
流程
列出终端中的可用事件源类型:
kn source list-types
$ kn source list-typesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
TYPE NAME DESCRIPTION ApiServerSource apiserversources.sources.knative.dev Watch and send Kubernetes API events to a sink PingSource pingsources.sources.knative.dev Periodically send ping events to a sink SinkBinding sinkbindings.sources.knative.dev Binding for connecting a PodSpecable to a sink
TYPE NAME DESCRIPTION ApiServerSource apiserversources.sources.knative.dev Watch and send Kubernetes API events to a sink PingSource pingsources.sources.knative.dev Periodically send ping events to a sink SinkBinding sinkbindings.sources.knative.dev Binding for connecting a PodSpecable to a sinkCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 在 OpenShift Container Platform 中,您还可以以 YAML 格式列出可用事件源类型:
kn source list-types -o yaml
$ kn source list-types -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3. 从 Web 控制台列出事件源类型 复制链接链接已复制到粘贴板!
您可以查看集群中所有可用事件源类型的列表。使用 OpenShift Container Platform Web 控制台提供了一个简化的用户界面,可用事件源类型。
9.3.1. 查看可用事件源类型 复制链接链接已复制到粘贴板!
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
- OpenShift Serverless Operator 和 Knative Eventing 已安装在 OpenShift Container Platform 集群中。
- 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
流程
- 点 +Add。
- 点 Event Source。
- 查看可用的事件源类型。
9.4. 从命令行列出事件源 复制链接链接已复制到粘贴板!
使用 Knative (kn) CLI 提供了简化和直观的用户界面,用来查看集群中的现有事件源。
9.4.1. 使用 Knative CLI 列出可用事件源 复制链接链接已复制到粘贴板!
您可以使用 kn source list 命令列出现有的事件源。
先决条件
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
-
已安装 Knative (
kn) CLI。
流程
列出终端中的现有事件源:
kn source list
$ kn source listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME TYPE RESOURCE SINK READY a1 ApiServerSource apiserversources.sources.knative.dev ksvc:eshow2 True b1 SinkBinding sinkbindings.sources.knative.dev ksvc:eshow3 False p1 PingSource pingsources.sources.knative.dev ksvc:eshow1 True
NAME TYPE RESOURCE SINK READY a1 ApiServerSource apiserversources.sources.knative.dev ksvc:eshow2 True b1 SinkBinding sinkbindings.sources.knative.dev ksvc:eshow3 False p1 PingSource pingsources.sources.knative.dev ksvc:eshow1 TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 您可以使用
--type标志来只列出特定类型的事件源:kn source list --type <event_source_type>
$ kn source list --type <event_source_type>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例命令
kn source list --type PingSource
$ kn source list --type PingSourceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME TYPE RESOURCE SINK READY p1 PingSource pingsources.sources.knative.dev ksvc:eshow1 True
NAME TYPE RESOURCE SINK READY p1 PingSource pingsources.sources.knative.dev ksvc:eshow1 TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 10 章 调优事件配置 复制链接链接已复制到粘贴板!
10.1. 覆盖 Knative Eventing 系统部署配置 复制链接链接已复制到粘贴板!
您可以通过修改 KnativeEventing 自定义资源(CR)中的 workload spec 来覆盖某些特定部署的默认配置。目前,对于 eventing-controller、eventing-webhook 和 imc-controller 字段以及探测的 readiness 和 liveness 字段支持覆盖默认配置设置。
replicas spec 无法覆盖使用 Horizontal Pod Autoscaler (HPA) 的部署副本数,且不适用于 eventing-webhook 部署。
您只能覆盖部署中默认定义的探测。
10.1.1. 覆盖部署配置 复制链接链接已复制到粘贴板!
目前,对于 eventing-controller、eventing-webhook 和 imc-controller 字段以及探测的 readiness 和 liveness 字段支持覆盖默认配置设置。
replicas spec 无法覆盖使用 Horizontal Pod Autoscaler (HPA) 的部署副本数,且不适用于 eventing-webhook 部署。
在以下示例中,KnativeEventing CR 覆盖 eventing-controller 部署,以便:
-
readiness探测超时eventing-controller被设置为 10 秒。 - 部署指定了 CPU 和内存资源限制。
- 部署有 3 个副本。
-
添加
example-label: label标签。 -
添加
example-annotation:注解。 -
nodeSelector字段被设置为选择带有disktype: hdd标签的节点。
KnativeEventing CR 示例
- 1
- 您可以使用
readiness和liveness探测覆盖来覆盖在 Kubernetes API 中指定的一个部署中的一个容器探测的所有字段,与探测 handler:exec,grpc,httpGet, 和tcpSocket相关的字段除外。
KnativeEventing CR 标签和注解设置覆盖部署本身和生成的 Pod 的部署标签和注解。
10.1.2. 修改消费者组 ID 和主题名称 复制链接链接已复制到粘贴板!
您可以更改模板来生成由触发器、代理和频道使用的消费者组 ID 和主题名称。
先决条件
- 在 OpenShift Container Platform 上具有集群或专用管理员权限。
-
OpenShift Serverless Operator、Knative Eventing 和
KnativeKafka自定义资源(CR)已安装在 OpenShift Container Platform 集群中。 - 您已创建了一个项目,或者具有适当的角色和权限访问项目,以便在 OpenShift Container Platform 中创建应用程序和其他工作负载。
-
已安装 OpenShift CLI(
oc)。
流程
要更改生成由触发器、代理和频道使用的消费者组 ID 和主题名称的模板,请修改
KnativeKafka资源:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 模板配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
KnativeKafkaYAML 文件:$ oc apply -f <knative_kafka_filename>
$ oc apply -f <knative_kafka_filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.2. 高可用性 复制链接链接已复制到粘贴板!
高可用性 (HA) 是 Kubernetes API 的标准功能,有助于确保在出现中断时 API 保持正常运行。在 HA 部署中,如果活跃控制器崩溃或被删除,另一个控制器就可以使用。此控制器会接管处理由现在不可用的控制器提供服务的 API。
OpenShift Serverless 中的 HA 可通过领导选举机制获得,该机制会在安装 Knative Serving 和 Eventing control plane 后默认启用。在使用领导选举 HA 模式时,控制器实例在需要前应该已在集群内调度并运行。这些控制器实例争用共享资源,即领导选举锁定。在任何给定时间可以访问领导选举机制锁定资源的控制器实例被称为领导 (leader) 。
OpenShift Serverless 中的 HA 可通过领导选举机制获得,该机制会在安装 Knative Serving 和 Eventing control plane 后默认启用。在使用领导选举 HA 模式时,控制器实例在需要前应该已在集群内调度并运行。这些控制器实例争用共享资源,即领导选举锁定。在任何给定时间可以访问领导选举机制锁定资源的控制器实例被称为领导 (leader) 。
10.2.1. 为 Knative Eventing 配置高可用性副本 复制链接链接已复制到粘贴板!
默认情况下,Knative Eventing eventing-controller、eventing-webhook、imc-controller、imc-dispatcher 和 mt-broker-controller 组件都会具有高可用性 (HA) 。您可以通过修改 KnativeEventing 自定义资源 (CR) 中的 spec.high-availability.replicas 值来更改这些组件的副本数。
对于 Knative Eventing,HA 不会扩展 mt-broker-filter 和 mt-broker-ingress 部署。如果需要多个部署,请手动扩展这些组件。
先决条件
- 在 OpenShift Container Platform 上具有集群管理员权限,或者具有 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 的集群或专用管理员权限。
- 在集群中安装了 OpenShift Serverless Operator 和 Knative Eventing。
流程
- 在 OpenShift Container Platform Web 控制台中导航至 OperatorHub → Installed Operators。
-
选择
knative-eventing命名空间。 - 点 OpenShift Serverless Operator 的 Provided APIs 列表中的 Knative Eventing 来进入 Knative Eventing 选项卡。
- 点 knative-eventing,然后进入 knative-eventing 页面中的 YAML 选项卡。
修改
KnativeEventingCR 中的副本数量:YAML 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以指定特定工作负载的副本数量。
注意特定于工作负载的配置会覆盖 Knative Eventing 的全局设置。
YAML 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证是否遵循高可用性限制:
示例命令
oc get hpa -n knative-eventing
$ oc get hpa -n knative-eventingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE broker-filter-hpa Deployment/mt-broker-filter 1%/70% 3 12 3 112s broker-ingress-hpa Deployment/mt-broker-ingress 1%/70% 3 12 3 112s eventing-webhook Deployment/eventing-webhook 4%/100% 3 7 3 115s
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE broker-filter-hpa Deployment/mt-broker-filter 1%/70% 3 12 3 112s broker-ingress-hpa Deployment/mt-broker-ingress 1%/70% 3 12 3 112s eventing-webhook Deployment/eventing-webhook 4%/100% 3 7 3 115sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
10.2.2. 为 Apache Kafka 为 Knative 代理实现配置高可用性副本 复制链接链接已复制到粘贴板!
默认情况下,对于 Apache Kafka 组件 kafka-controller 和 kafka-webhook-eventing 的 Knative 代理实现,高可用性 (HA) 默认为每个副本有两个副本。您可以通过修改 KnativeKafka 自定义资源 (CR) 中的 spec.high-availability.replicas 值来更改这些组件的副本数。
先决条件
- 在 OpenShift Container Platform 上具有集群管理员权限,或者具有 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 的集群或专用管理员权限。
- 在集群中安装了 OpenShift Serverless Operator 和 Apache Kafka 的 Knative 代理。
流程
- 在 OpenShift Container Platform Web 控制台中导航至 OperatorHub → Installed Operators。
-
选择
knative-eventing命名空间。 - 点 OpenShift Serverless Operator 的 Provided APIs 列表中的 Knative Kafka 进入 Knative Kafka 标签页。
- 点 knative-kafka,然后进入 knative-kafka 页面中的 YAML 选项卡。
修改
KnativeKafkaCR 中的副本数量:YAML 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.2.3. 覆盖中断预算 复制链接链接已复制到粘贴板!
Pod Disruption Budget (PDB)是 Kubernetes API 的一个标准功能,有助于限制因维护原因需要重新调度 pod 时对应用程序的中断。
流程
-
通过修改
KnativeEventing自定义资源(CR)中的minAvailable配置值来覆盖特定资源的默认 PDB。
PDB 示例,minAvailable 设置为 70%
例如,如果您通过将 high-availability.replicas 值更改为 1,请确保也将对应的 PDB minAvailable 值更新为 0。否则,pod 中断预算会阻止自动集群或 Operator 更新。
第 11 章 在 Eventing 中配置 TLS 加密 复制链接链接已复制到粘贴板!
使用传输加密功能,您可以使用 传输层安全 (TLS)通过安全和加密的 HTTPS 连接传输数据和事件。
Eventing 的 OpenShift Serverless 传输加密只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
transport-encryption 功能标记是一个 enum 配置,用于定义可寻址的配置,如 Broker、Channel 和 Sink 接受事件。它根据所选设置控制地址是否必须通过 HTTP 或 HTTPS 接受事件。
transport-encryption 的可能值如下:
| value | 描述 |
|---|---|
|
|
|
|
|
|
|
|
|
11.1. 为 Eventing 创建自助化的 ClusterIssuer 资源 复制链接链接已复制到粘贴板!
ClusterIssuers 是代表证书颁发机构(CA)的 Kubernetes 资源,它可以通过遵循证书签名请求来生成签名证书。所有 cert-manager 证书都需要在就绪条件中引用的签发者尝试遵循请求。如需了解更多详细信息,请参阅 Issuer。
为了简单起见,这个过程使用 SelfSigned issuer 作为 root 证书颁发机构。有关 SelfSigned issuer effect 和 limitations 的详情,请参阅 SelfSigned issuers。如果您使用的是自定义公钥基础架构 (PKI) ,您必须将其配置为在集群中识别其私有签名的 CA 证书。有关 cert-manager 的详情,请参阅 证书颁发机构(CA)。您可以使用可用于集群本地服务的任何其他签发者。
先决条件
- 在 OpenShift Container Platform 上具有集群管理员权限,或者具有 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 的集群或专用管理员权限。
- 已安装 OpenShift Serverless Operator。
- 您已为 Red Hat OpenShift 安装了 cert-manager Operator。
-
已安装 OpenShift (
oc) CLI。
流程
创建
SelfSignedClusterIssuer资源,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用
ClusterIssuer资源:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
SelfSignedClusterIssuer资源创建根证书,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用
证书资源:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.2. 为 Eventing 创建 ClusterIssuer 资源 复制链接链接已复制到粘贴板!
ClusterIssuers 是代表证书颁发机构(CA)的 Kubernetes 资源,它可以通过遵循证书签名请求来生成签名证书。
先决条件
- 在 OpenShift Container Platform 上具有集群管理员权限,或者具有 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 的集群或专用管理员权限。
- 已安装 OpenShift Serverless Operator。
- 您已为 Red Hat OpenShift 安装了 cert-manager Operator。
-
已安装 OpenShift (
oc) CLI。
流程
创建
knative-eventing-ca-issuerClusterIssuer资源,如下所示:每个 Eventing 组件都使用这个签发者来发布其服务器的证书。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
cert-manager命名空间中的secretName值(默认为 Red Hat OpenShift 的 cert-manager Operator)包含 Knative Eventing 组件可以使用的证书。
注意ClusterIssuer名称必须是knative-eventing-ca-issuer。运行以下命令来应用
ClusterIssuer资源:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.3. 为 Knative Eventing 启用传输功能 复制链接链接已复制到粘贴板!
您可以通过将 transport-encryption 功能设置为 strict 在 KnativeEventing 中启用传输加密。
先决条件
- 在 OpenShift Container Platform 上具有集群管理员权限,或者具有 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 的集群或专用管理员权限。
- 已安装 OpenShift Serverless Operator。
- 您已为 Red Hat OpenShift 安装了 cert-manager Operator。
-
已安装 OpenShift (
oc) CLI。
流程
在
KnativeEventing中启用transport-encryption,如下所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用
KnativeEventing资源:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.4. 配置额外的 CA 信任捆绑包 复制链接链接已复制到粘贴板!
默认情况下,Eventing 客户端信任为自定义 PKI 配置的 OpenShift CA 捆绑包。如需了解更多详细信息,请参阅 配置自定义 PKI。
建立新连接时,Eventing 客户端会在其可信列表中自动包含这些 CA 捆绑包。
先决条件
- 在 OpenShift Container Platform 上具有集群管理员权限,或者具有 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 的集群或专用管理员权限。
- 已安装 OpenShift Serverless Operator。
- 您已为 Red Hat OpenShift 安装了 cert-manager Operator。
11.5. 配置自定义事件源以信任 Eventing CA 复制链接链接已复制到粘贴板!
要创建自定义事件源,请使用 SinkBinding。SinkBinding 可以使用 knative-custom-certs 目录将配置的 CA 信任捆绑包作为投射卷注入每个容器。
在某些情况下,您可以将特定于公司的 CA 信任捆绑包注入基础容器镜像,并自动配置运行时,如 OpenJDK 或 Node.js,以信任这些 CA 捆绑包。在这种情况下,您可能不需要配置客户端。
通过使用上例中的 my_org_eventing_bundle 配置映射,ca.crt、ca1.crt 和 tls.crt 数据密钥,knative-custom-certs 目录具有以下布局:
/knative-custom-certs/ca.crt /knative-custom-certs/ca1.crt /knative-custom-certs/tls.crt
/knative-custom-certs/ca.crt
/knative-custom-certs/ca1.crt
/knative-custom-certs/tls.crt
您可以使用这些文件将 CA 信任捆绑包添加到发送事件到 Eventing 的 HTTP 客户端。
根据您使用的运行时、编程语言或库,存在用于配置自定义 CA 证书文件的不同方法,如使用命令行标志、环境变量或读取文件的内容。
11.6. 将 SelfSigned ClusterIssuer 资源添加到 CA 信任捆绑包中 复制链接链接已复制到粘贴板!
如果使用 SelfSigned ClusterIssuer 资源,您可以将 CA 添加到 Eventing CA 信任捆绑包中。
先决条件
- 在 OpenShift Container Platform 上具有集群管理员权限,或者具有 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 的集群或专用管理员权限。
- 已安装 OpenShift Serverless Operator。
- 您已为 Red Hat OpenShift 安装了 cert-manager Operator。
-
已安装 OpenShift (
oc) CLI。
流程
运行以下命令,在 Red Hat OpenShift 命名空间的 cert-manager Operator (默认为
cert-manager证书)中导出knative-eventing-casecret 的 CA:oc get secret -n cert-manager knative-eventing-ca -o=jsonpath='{.data.ca\.crt}' | base64 -d > ca.crt$ oc get secret -n cert-manager knative-eventing-ca -o=jsonpath='{.data.ca\.crt}' | base64 -d > ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,在
knative-eventing命名空间中创建 CA 信任捆绑包:oc create configmap -n knative-eventing my-org-selfsigned-ca-bundle --from-file=ca.crt
$ oc create configmap -n knative-eventing my-org-selfsigned-ca-bundle --from-file=ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来标记
ConfigMap:oc label configmap -n knative-eventing my-org-selfsigned-ca-bundle networking.knative.dev/trust-bundle=true
$ oc label configmap -n knative-eventing my-org-selfsigned-ca-bundle networking.knative.dev/trust-bundle=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
11.7. 确保无缝 CA 轮转 复制链接链接已复制到粘贴板!
确保无缝 CA 轮转至关重要,以避免服务停机或处理紧急情况。
先决条件
- 在 OpenShift Container Platform 上具有集群管理员权限,或者具有 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 的集群或专用管理员权限。
- 已安装 OpenShift Serverless Operator。
- 您已为 Red Hat OpenShift 安装了 cert-manager Operator。
-
已安装 OpenShift (
oc) CLI。
流程
- 创建 CA 证书。
将新 CA 证书的公钥添加到 CA 信任捆绑包中。
确保您也保留现有 CA 的公钥。
确保所有客户端都使用最新的 CA 信任捆绑包。
Knative Eventing 组件自动重新载入更新的 CA 信任捆绑包。对于使用信任捆绑包的自定义工作负载,请根据需要重新加载或重启它们。
-
更新
knative-eventing-ca-issuerClusterIssuer,以引用包含在第 1 步中创建的 CA 证书的 secret。 强制
cert-manager续订knative-eventing 命名空间中的证书。有关
cert-manager的更多信息,请参阅 用户操作触发的 Reissuance。- 当 CA 轮转完全完成后,从信任捆绑包配置映射中删除旧 CA 的公钥。
11.8. 在 Eventing 中验证传输加密 复制链接链接已复制到粘贴板!
要确认正确配置了传输加密,您可以创建并测试 InMemoryChannel 资源。按照以下步骤确保它按预期使用 HTTPS。
先决条件
- 在 OpenShift Container Platform 上具有集群管理员权限,或者具有 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 的集群或专用管理员权限。
- 已安装 OpenShift Serverless Operator。
- 您已为 Red Hat OpenShift 安装了 cert-manager Operator。
-
已安装 OpenShift (
oc) CLI。
流程
创建一个
InMemoryChannel资源,如下所示:apiVersion: messaging.knative.dev/v1 kind: InMemoryChannel metadata: name: transport-encryption-test
apiVersion: messaging.knative.dev/v1 kind: InMemoryChannel metadata: name: transport-encryption-testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用
InMemoryChannel资源:oc apply -f <filename>
$ oc apply -f <filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来查看
InMemoryChannel地址:oc get inmemorychannels.messaging.knative.dev transport-encryption-test
$ oc get inmemorychannels.messaging.knative.dev transport-encryption-testCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME URL AGE READY REASON transport-encryption-test https://imc-dispatcher.knative-eventing.svc.cluster.local/default/transport-encryption-test 17s True
NAME URL AGE READY REASON transport-encryption-test https://imc-dispatcher.knative-eventing.svc.cluster.local/default/transport-encryption-test 17s TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 12 章 为 Eventing 配置 kube-rbac-proxy 复制链接链接已复制到粘贴板!
kube-rbac-proxy 组件为 Knative Eventing 提供内部身份验证和授权功能。
12.1. 为 Eventing 配置 kube-rbac-proxy 资源 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Serverless Operator CR 全局覆盖 kube-rbac-proxy 容器的资源分配。
您还可以覆盖特定部署的资源分配。
以下配置设置 Knative Eventing kube-rbac-proxy 最小和最大 CPU 和内存分配:
KnativeEventing CR 示例
12.2. 为 Apache Kafka 为 Knative 配置 kube-rbac-proxy 资源 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Serverless Operator CR 全局覆盖 kube-rbac-proxy 容器的资源分配。
您还可以覆盖特定部署的资源分配。
以下配置设置 Knative Kafka kube-rbac-proxy 最小和最大 CPU 和内存分配:
KnativeKafka CR 示例
第 13 章 在 Service Mesh 中使用 ContainerSource 复制链接链接已复制到粘贴板!
您可以在 Service Mesh 中使用容器源。
13.1. 使用 Service Mesh 配置 ContainerSource 复制链接链接已复制到粘贴板!
这个步骤描述了如何使用 Service Mesh 配置容器源。
先决条件
- 您已设置了 Service Mesh 和 Serverless 的集成。
流程
在作为
成员的命名空间中创建 Service:ServiceMeshMemberRollevent-display-service.yaml配置文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
Service资源:oc apply -f event-display-service.yaml
$ oc apply -f event-display-service.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在作为
ServiceMeshMemberRoll和 sink 成员的命名空间中创建ContainerSource对象,设置为event-display:test-heartbeats-containersource.yaml配置文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
ContainerSource资源:oc apply -f test-heartbeats-containersource.yaml
$ oc apply -f test-heartbeats-containersource.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:查看消息转储程序功能日志来验证事件是否已发送到 Knative 事件接收器:
示例命令
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 14 章 在 Service Mesh 中使用接收器绑定 复制链接链接已复制到粘贴板!
您可以将接收器绑定与 Service Mesh 搭配使用。
14.1. 使用 Service Mesh 配置接收器绑定 复制链接链接已复制到粘贴板!
此流程描述了如何使用 Service Mesh 配置接收器绑定。
先决条件
- 您已设置了 Service Mesh 和 Serverless 的集成。
流程
在作为
成员的命名空间中创建 Service 对象:ServiceMeshMemberRollevent-display-service.yaml配置文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
Service对象:oc apply -f event-display-service.yaml
$ oc apply -f event-display-service.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
SinkBinding对象:heartbeat-sinkbinding.yaml配置文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
SinkBinding对象:oc apply -f heartbeat-sinkbinding.yaml
$ oc apply -f heartbeat-sinkbinding.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
CronJob对象:heartbeat-cronjob.yaml配置文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用
CronJob对象:oc apply -f heartbeat-cronjob.yaml
$ oc apply -f heartbeat-cronjob.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:查看消息转储程序功能日志来验证事件是否已发送到 Knative 事件接收器:
示例命令
oc logs $(oc get pod -o name | grep event-display) -c user-container
$ oc logs $(oc get pod -o name | grep event-display) -c user-containerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow