Red Hat Camel K is no longer supported.
As of June 30, 2025, Red Hat build of Camel K has reached End of Life. The suggested replacements is Red Hat build of Apache Camel. For details about moving, see the Camel K to Camel Quarkus migration guide.6.2. Camel K 功能特征
6.2.1. Knative Trait 复制链接链接已复制到粘贴板!
Knative trait 会自动发现 Knative 资源的地址,并将它们注入正在运行的集成中。
完整的 Knative 配置以 JSON 格式使用 CAMEL_KNATIVE_CONFIGURATION 注入。然后,Camel Knative 组件将使用完整配置来配置路由。
当 Knative 配置集处于活跃状态时,代表会被默认启用。
这个特征包括在以下配置集:Knative。
6.2.1.1. 配置 复制链接链接已复制到粘贴板!
可在运行任何 CLI 集成时指定特征属性:
kamel run --trait knative.[key]=[value] --trait knative.[key2]=[value2] integration.java
$ kamel run --trait knative.[key]=[value] --trait knative.[key2]=[value2] integration.java
可用的配置选项如下:
属性 | 类型 | 描述 |
---|---|---|
|
| 可用于启用或禁用特征。所有特征共享这个通用属性。 |
|
| 可用于注入 JSON 格式的 Knative 完成配置。 |
|
| 用作集成路由源的频道列表。可以包含简单的频道名称或完整的 Camel URI。 |
|
| 用作集成路由的目的地的频道列表。可以包含简单的频道名称或完整的 Camel URI。 |
|
| 用作集成路由源的频道列表。 |
|
| 用作集成路由的目的地的端点列表。可以包含简单的端点名称或完整的 Camel URI。 |
|
| 集成将订阅的事件类型列表。可以包含简单的事件类型或完整的 Camel URI (使用不同于"默认"的特定代理)。 |
|
| 集成将生成的事件类型列表。可以包含简单的事件类型或完整的 Camel URI (使用特定代理)。 |
|
| 启用根据标头 "ce-knativehistory" 对事件进行过滤。由于此标头在较新版本的 Knative 中被删除,所以默认禁用过滤。 |
|
| 允许通过 Knative SinkBinding 资源将集成绑定到 sink。当集成以单个 sink 为目标时,可以使用它。当集成以单个 sink 为目标时,它会被默认启用(集成归 Knative 源所有时除外)。 |
|
| 启用自动发现所有特征属性。 |
6.2.2. Knative Service Trait 复制链接链接已复制到粘贴板!
在将集成作为 Knative 服务而不是标准的 Kubernetes Deployment 运行时,Knative Service trait 允许配置选项。
作为 Knative 服务运行集成会添加自动扩展(和缩减到零)功能,但这些功能仅在路由使用 HTTP 端点消费者时才有意义。
这个特征包括在以下配置集:Knative。
6.2.2.1. 配置 复制链接链接已复制到粘贴板!
可在运行任何 CLI 集成时指定特征属性:
kamel run --trait knative-service.[key]=[value] --trait knative-service.[key2]=[value2] Integration.java
$ kamel run --trait knative-service.[key]=[value] --trait knative-service.[key2]=[value2] Integration.java
可用的配置选项如下:
属性 | 类型 | 描述 |
---|---|---|
|
| 可用于启用或禁用特征。所有特征共享这个通用属性。 |
|
|
配置 Knative 自动扩展类属性(例如,设置 如需更多信息,请参阅 Knative 文档。 |
|
|
配置 Knative 自动扩展指标属性(例如,设置基于 如需更多信息,请参阅 Knative 文档。 |
|
| 为每个 Pod 设置允许的并发级别或 CPU 百分比(取决于自动扩展指标)。 如需更多信息,请参阅 Knative 文档。 |
|
| 应该随时运行集成的最小 Pod 数量。默认情况下,它 为零,这意味着在没有用于配置的时间时,集成会缩减为零。 如需更多信息,请参阅 Knative 文档。 |
|
| 可并行运行用于集成的 Pod 数的上限。Knative 都有自己的上限值,具体取决于安装。 如需更多信息,请参阅 Knative 文档。 |
|
| 在所有条件都满足时自动将集成部署为 Knative 服务:
|
6.2.3. Prometheus Trait 复制链接链接已复制到粘贴板!
Prometheus trait 配置与 Prometheus 兼容的端点。它还会创建一个 PodMonitor
资源,以便在使用 Prometheus operator 时自动提取端点。
指标通过 MicroProfile 指标来公开。
创建 PodMonitor
资源需要安装 Prometheus Operator 自定义资源定义。您可以将 Prometheus 特征的 pod-monitor
设置为 false
,以便在没有 Prometheus Operator 的情况下工作。
Prometheus trait 默认禁用。
此特征包括在以下配置集中: Kubernetes、Knative、OpenShift。
6.2.3.1. 配置 复制链接链接已复制到粘贴板!
可在运行任何 CLI 集成时指定特征属性:
kamel run --trait prometheus.[key]=[value] --trait prometheus.[key2]=[value2] Integration.java
$ kamel run --trait prometheus.[key]=[value] --trait prometheus.[key2]=[value2] Integration.java
可用的配置选项如下:
属性 | 类型 | 描述 |
---|---|---|
|
| 可用于启用或禁用特征。所有特征共享这个通用属性。 |
|
|
是否已创建 |
|
|
|
6.2.4. PDB Trait 复制链接链接已复制到粘贴板!
PDB 特征允许为集成 pod 配置 PodDisruptionBudget 资源。
此特征包括在以下配置集中: Kubernetes、Knative、OpenShift。
6.2.4.1. 配置 复制链接链接已复制到粘贴板!
可在运行任何 CLI 集成时指定特征属性:
kamel run --trait pdb.[key]=[value] --trait pdb.[key2]=[value2] Integration.java
$ kamel run --trait pdb.[key]=[value] --trait pdb.[key2]=[value2] Integration.java
可用的配置选项如下:
属性 | 类型 | 描述 |
---|---|---|
|
| 可用于启用或禁用特征。所有特征共享这个通用属性。 |
|
|
驱除后必须仍然可用的集成的 pod 数量。它可以是绝对数字或一个百分比。只能指定 |
|
|
驱除后可以不可用的集成的 pod 数量。它可以是一个绝对数字或一个百分比(如果 |
6.2.5. Pull Secret Trait 复制链接链接已复制到粘贴板!
Pull Secret 特征在 pod 上设置 pull secret,以允许 Kubernetes 从外部 registry 检索容器镜像。
可以手动指定 pull secret,或者您已为 集成
平台上的外部容器 registry 配置身份验证,则使用相同的 secret 来拉取镜像。
每当为外部容器 registry 配置身份验证时,它会被默认启用,因此它假定外部 registry 是私有的。
如果您的 registry 不需要身份验证来拉取镜像,您可以禁用此特征。
此特征包括在以下配置集中: Kubernetes、Knative、OpenShift。
6.2.5.1. 配置 复制链接链接已复制到粘贴板!
可在运行任何 CLI 集成时指定特征属性:
kamel run --trait pull-secret.[key]=[value] --trait pull-secret.[key2]=[value2] Integration.java
$ kamel run --trait pull-secret.[key]=[value] --trait pull-secret.[key2]=[value2] Integration.java
可用的配置选项如下:
属性 | 类型 | 描述 |
---|---|---|
|
| 可用于启用或禁用特征。所有特征共享这个通用属性。 |
|
|
在 Pod 上设置的 pull secret 名称。如果留空,则会自动从 |
|
|
将全局操作器与共享平台搭配使用时,这会将 operator 命名空间中的 |
|
|
如果是 |
6.2.6. 路由垃圾 复制链接链接已复制到粘贴板!
Route trait 可用于为集成配置 OpenShift 路由。
证书和密钥内容可以从本地文件系统或 Openshift secret
对象中提供。用户可以使用以 -
结尾的参数(例如: secret
tls-certificate-secret
)来引用存储在机密中的证书。以 -secret
结尾的参数具有更高的优先级,如果设置了相同的路由参数,例如: tls-key-secret
和 tls-key
,则使用 tls-key-secret
。设置密钥和证书的建议方法是使用 secret
来存储其内容,并使用以下参数引用它们: tls-certificate-secret
、tls-key-secret
、tls-ca-certificate-secret
、tls-destination-ca-certificate-secret
查看此页面末尾的示例部分,以查看设置选项。
此特征包括在以下配置集中: OpenShift。
6.2.6.1. 配置 复制链接链接已复制到粘贴板!
可在运行任何 CLI 集成时指定特征属性:
kamel run --trait route.[key]=[value] --trait route.[key2]=[value2] integration.java
$ kamel run --trait route.[key]=[value] --trait route.[key2]=[value2] integration.java
可用的配置选项如下:
属性 | 类型 | 描述 |
---|---|---|
|
| 可用于启用或禁用特征。所有特征共享这个通用属性。 |
|
| 配置路由公开的主机: |
|
|
TLS 终止类型,如 如需更多信息,请参阅 OpenShift 路由文档。 |
|
| TLS 证书内容。 如需更多信息,请参阅 OpenShift 路由文档。 |
|
| 对 TLS 证书的 secret 名称和密钥引用。格式为 "secret-name[/key-name]",如果 secret 中只有一个键,则该值代表 secret 名称,否则您可以设置以"/"分隔的键名称。 如需更多信息,请参阅 OpenShift 路由文档。 |
|
| TLS 证书密钥内容。 如需更多信息,请参阅 OpenShift 路由文档。 |
|
| 对 TLS 证书密钥的 secret 名称和密钥引用。格式为 "secret-name[/key-name]",如果 secret 中只有一个键,则该值代表 secret 名称,否则您可以设置以"/"分隔的键名称。 如需更多信息,请参阅 OpenShift 路由文档。 |
|
| TLS CA 证书内容。 如需更多信息,请参阅 OpenShift 路由文档。 |
|
| secret 名称和密钥引用 TLS CA 证书。格式为 "secret-name[/key-name]",如果 secret 中只有一个键,则该值代表 secret 名称,否则您可以设置以"/"分隔的键名称。 如需更多信息,请参阅 OpenShift 路由文档。 |
|
| 目标 CA 证书提供最终目的地的 ca 证书的内容。使用重新加密终止时,应提供此文件,以便让路由器将它用于安全连接上的健康检查。如果没有指定此字段,路由器可能会提供自己的目标 CA,并使用短服务名称(service.namespace.svc)执行主机名验证,它允许基础架构生成的证书自动验证。 如需更多信息,请参阅 OpenShift 路由文档。 |
|
| secret 名称和密钥引用目标 CA 证书。格式为 "secret-name[/key-name]",如果 secret 中只有一个键,则该值代表 secret 名称,否则您可以设置以"/"分隔的键名称。 如需更多信息,请参阅 OpenShift 路由文档。 |
|
|
要配置如何处理不安全的流量,例如 如需更多信息,请参阅 OpenShift 路由文档。 |
6.2.6.2. 例子 复制链接链接已复制到粘贴板!
这些示例使用 secret 来存储集成中引用的证书和密钥。有关路由的详细信息,请参阅 Openshift 路由文档。PlatformHttpServer.java 是集成示例。
作为运行这些示例的要求,您应该有一个带有密钥和证书的 secret
。
6.2.6.2.1. 生成自签名证书并创建 secret 复制链接链接已复制到粘贴板!
openssl genrsa -out tls.key openssl req -new -key tls.key -out csr.csr -subj "/CN=my-server.com" openssl x509 -req -in csr.csr -signkey tls.key -out tls.crt oc create secret tls my-combined-certs --key=tls.key --cert=tls.crt
openssl genrsa -out tls.key
openssl req -new -key tls.key -out csr.csr -subj "/CN=my-server.com"
openssl x509 -req -in csr.csr -signkey tls.key -out tls.crt
oc create secret tls my-combined-certs --key=tls.key --cert=tls.crt
6.2.6.2.2. 向路由发出 HTTP 请求 复制链接链接已复制到粘贴板!
对于所有示例,您可以使用以下 curl 命令发出 HTTP 请求。如果使用不支持这些内联脚本的 shell,它会使用内联脚本来检索 openshift 命名空间和集群基域,您应该将内联脚本替换为实际命名空间和基域的值。
curl -k https://platform-http-server-`oc config view --minify -o 'jsonpath={..namespace}'`.`oc get dnses/cluster -ojsonpath='{.spec.baseDomain}'`/hello?name=Camel-K
curl -k https://platform-http-server-`oc config view --minify -o 'jsonpath={..namespace}'`.`oc get dnses/cluster -ojsonpath='{.spec.baseDomain}'`/hello?name=Camel-K
要使用 secret 添加 边缘路由,请使用以
-secret
结尾的参数来设置包含证书的 secret 名称。此路由示例特征引用名为my-combined-certs
的 secret,其包含两个名为tls.key
和tls.crt
的键。kamel run --dev PlatformHttpServer.java -t route.tls-termination=edge -t route.tls-certificate-secret=my-combined-certs/tls.crt -t route.tls-key-secret=my-combined-certs/tls.key
kamel run --dev PlatformHttpServer.java -t route.tls-termination=edge -t route.tls-certificate-secret=my-combined-certs/tls.crt -t route.tls-key-secret=my-combined-certs/tls.key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用 secret 添加 passthrough 路由,TLS 在集成 pod 中设置,密钥和证书应该在运行的 pod 中看到,以达到此目的,使用
--resource
kamel 参数在集成 pod 中挂载 secret,然后使用一些 camel quarkus 参数在运行的 pod 中引用这些证书文件,它们以-p quarkus.http.ssl.certificate
开始。此路由示例特征引用名为my-combined-certs
的 secret,其包含两个名为tls.key
和tls.crt
的键。kamel run --dev PlatformHttpServer.java --resource secret:my-combined-certs@/etc/ssl/my-combined-certs -p quarkus.http.ssl.certificate.file=/etc/ssl/my-combined-certs/tls.crt -p quarkus.http.ssl.certificate.key-file=/etc/ssl/my-combined-certs/tls.key -t route.tls-termination=passthrough -t container.port=8443
kamel run --dev PlatformHttpServer.java --resource secret:my-combined-certs@/etc/ssl/my-combined-certs -p quarkus.http.ssl.certificate.file=/etc/ssl/my-combined-certs/tls.crt -p quarkus.http.ssl.certificate.key-file=/etc/ssl/my-combined-certs/tls.key -t route.tls-termination=passthrough -t container.port=8443
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用 secret 添加 重新加密路由,TLS 在集成 pod 中设置,在运行的 pod 中应该看到密钥和证书,以达到此目的,使用
--resource
kamel 参数在集成 pod 中挂载 secret,然后使用一些 camel quarkus 参数在运行的 pod 中引用这些证书文件,它们以-p quarkus.http.ssl.certificate
开始。此路由示例特征引用名为my-combined-certs
的 secret,其包含两个名为tls.key
和tls.crt
的键。kamel run --dev PlatformHttpServer.java --resource secret:my-combined-certs@/etc/ssl/my-combined-certs -p quarkus.http.ssl.certificate.file=/etc/ssl/my-combined-certs/tls.crt -p quarkus.http.ssl.certificate.key-file=/etc/ssl/my-combined-certs/tls.key -t route.tls-termination=reencrypt -t route.tls-destination-ca-certificate-secret=my-combined-certs/tls.crt -t route.tls-certificate-secret=my-combined-certs/tls.crt -t route.tls-key-secret=my-combined-certs/tls.key -t container.port=8443
kamel run --dev PlatformHttpServer.java --resource secret:my-combined-certs@/etc/ssl/my-combined-certs -p quarkus.http.ssl.certificate.file=/etc/ssl/my-combined-certs/tls.crt -p quarkus.http.ssl.certificate.key-file=/etc/ssl/my-combined-certs/tls.key -t route.tls-termination=reencrypt -t route.tls-destination-ca-certificate-secret=my-combined-certs/tls.crt -t route.tls-certificate-secret=my-combined-certs/tls.crt -t route.tls-key-secret=my-combined-certs/tls.key -t container.port=8443
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要使用来自路由和 Openshift 服务证书的 secret 的特定证书 来添加 重新加密路由。这样,Openshift 服务证书仅在集成 pod 中设置。密钥和证书应该在正在运行的集成 pod 中可见,为了达到此目的,我们使用
--resource
kamel 参数在集成 pod 中挂载 secret,然后使用一些 camel quarkus 参数来引用正在运行的 pod 中的这些证书文件,它们以-p quarkus.http.ssl.certificate
开始。此路由示例特征引用名为my-combined-certs
的 secret,其包含两个名为tls.key
和tls.crt
的键。kamel run --dev PlatformHttpServer.java --resource secret:cert-from-openshift@/etc/ssl/cert-from-openshift -p quarkus.http.ssl.certificate.file=/etc/ssl/cert-from-openshift/tls.crt -p quarkus.http.ssl.certificate.key-file=/etc/ssl/cert-from-openshift/tls.key -t route.tls-termination=reencrypt -t route.tls-certificate-secret=my-combined-certs/tls.crt -t route.tls-key-secret=my-combined-certs/tls.key -t container.port=8443
kamel run --dev PlatformHttpServer.java --resource secret:cert-from-openshift@/etc/ssl/cert-from-openshift -p quarkus.http.ssl.certificate.file=/etc/ssl/cert-from-openshift/tls.crt -p quarkus.http.ssl.certificate.key-file=/etc/ssl/cert-from-openshift/tls.key -t route.tls-termination=reencrypt -t route.tls-certificate-secret=my-combined-certs/tls.crt -t route.tls-key-secret=my-combined-certs/tls.key -t container.port=8443
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 然后,您应该注解集成服务来注入 Openshift 服务证书
oc annotate service platform-http-server service.beta.openshift.io/serving-cert-secret-name=cert-from-openshift
oc annotate service platform-http-server service.beta.openshift.io/serving-cert-secret-name=cert-from-openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用本地文件系统提供的证书和私钥添加 边缘路由。本例使用内联脚本读取证书和私钥文件内容,然后删除所有新行字符(这需要将证书设置为参数的值),因此这些值位于一行中。
kamel run PlatformHttpServer.java --dev -t route.tls-termination=edge -t route.tls-certificate="$(cat tls.crt|awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}')" -t route.tls-key="$(cat tls.key|awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}')"
kamel run PlatformHttpServer.java --dev -t route.tls-termination=edge -t route.tls-certificate="$(cat tls.crt|awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}')" -t route.tls-key="$(cat tls.key|awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}')"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.7. 服务 Trait 复制链接链接已复制到粘贴板!
Service trait 会公开与 Service 资源的集成,以便它可以被同一命名空间中的其他应用程序(或集成)访问。
如果集成依赖于可以公开 HTTP 端点的 Camel 组件,则默认启用它。
此特征包括在以下配置集中: Kubernetes、OpenShift。
6.2.7.1. 配置 复制链接链接已复制到粘贴板!
可在运行任何 CLI 集成时指定特征属性:
kamel run --trait service.[key]=[value] --trait service.[key2]=[value2] Integration.java
$ kamel run --trait service.[key]=[value] --trait service.[key2]=[value2] Integration.java
可用的配置选项如下:
属性 | 类型 | 描述 |
---|---|---|
|
| 可用于启用或禁用特征。所有特征共享这个通用属性。 |
|
| 如果需要创建服务,可以从代码中自动检测。 |
|
|
启用 Service 作为 NodePort 公开(默认为 |