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
可用的配置选项如下:
属性 | 类型 | 描述 |
---|---|---|
|
| 可用于启用或禁用特征。所有特征共享这个通用属性。 |
|
| 可用于以 JSON 格式注入 Knative 完成配置。 |
|
| 用作集成路由源的频道列表。可以包含简单的频道名称或完整的 Camel URI。 |
|
| 用作集成路由的频道列表。可以包含简单的频道名称或完整的 Camel URI。 |
|
| 用作集成路由源的频道列表。 |
|
| 用作集成路由目标的端点列表。可以包含简单的端点名称或完整的 Camel URI。 |
|
| 集成将订阅的事件类型列表。可以包含简单事件类型或完整 Camel URI (使用与"默认")不同的特定代理。 |
|
| 集成生成的事件类型列表。可以包含简单的事件类型或完整 Camel URI (使用特定代理)。 |
|
| 启用根据标头 "ce-knativehistory" 过滤事件。因为这个标头已在较新版本的 Knative 中删除,所以默认禁用过滤。 |
|
| 允许通过 Knative SinkBinding 资源将集成绑定到接收器。当集成以单一接收器为目标时使用。当集成以单个 sink 为目标时(除集成由 Knative 源所有时),它会被默认启用。 |
|
| 启用所有特征属性的自动发现。 |
6.2.2. Knative Service Trait
Knative Service trait 允许在作为 Knative 服务而不是标准 Kubernetes Deployment 运行集成时配置选项。
以 Knative Services 身份运行集成会添加自动扩展(和扩展到零)功能,但这些功能仅在路由使用 HTTP 端点消费者时才有意义。
这个特征包括在以下配置集:Knative。
6.2.2.1. 配置
运行与 CLI 的任何集成时可以指定特征属性:
$ kamel run --trait knative-service.[key]=[value] --trait knative-service.[key2]=[value2] Integration.java
可用的配置选项如下:
属性 | 类型 | 描述 |
---|---|---|
|
| 可用于启用或禁用特征。所有特征共享这个通用属性。 |
|
| 注解添加到路由中。这可用于设置 knative 服务特定注解。如需了解更多详细信息,请参阅 特定于路由的注解。 CLI usage example: -t "knative-service.annotations.'haproxy.router.openshift.io/balance'=roundrobin" |
|
|
配置 Knative autoscaling class 属性(例如,设置 如需更多信息,请参阅 Knative 文档。 |
|
|
配置 Knative 自动扩展指标属性(例如,设置基于 如需更多信息,请参阅 Knative 文档。 |
|
| 为每个 Pod 设置允许的并发级别或 CPU 百分比(取决于自动扩展指标)。 如需更多信息,请参阅 Knative 文档。 |
|
| 集成时应随时运行的最小 Pod 数量。默认情况下 为零,这意味着当没有用于配置的时间时,集成将缩减为零。 如需更多信息,请参阅 Knative 文档。 |
|
| 一个上限,用于可以并行针对集成运行的 Pod 数量。Knative 都有自己的 cap 值,它依赖于安装。 如需更多信息,请参阅 Knative 文档。 |
|
| 当所有条件满足时,自动将集成部署为 Knative 服务:
|
6.2.3. Prometheus Trait
Prometheus trait 配置一个与 Prometheus 兼容的端点。它还会创建一个 PodMonitor
资源,以便在使用 Prometheus operator 时自动提取端点。
指标通过 MicroProfile 指标来公开。
创建 PodMonitor
资源需要安装 Prometheus Operator 自定义资源定义。您可以将 pod-monitor
设置为 false
,以便 Prometheus 特征在没有 Prometheus Operator 的情况下正常工作。
Prometheus 特征默认为禁用。
此特征位于以下配置集: Kubernetes、Knative、OpenShift。
6.2.3.1. 配置
运行与 CLI 的任何集成时可以指定特征属性:
$ 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
可用的配置选项如下:
属性 | 类型 | 描述 |
---|---|---|
|
| 可用于启用或禁用特征。所有特征共享这个通用属性。 |
|
|
集成的 pod 数量,在驱除后仍可用。它可以是绝对数字或一个百分比。只能指定 |
|
|
驱除后可以无法使用的集成 pod 数量。它可以是一个绝对数字或一个百分比(如果 |
6.2.5. Pull Secret Trait
Pull Secret trait 在 pod 上设置 pull secret,以允许 Kubernetes 从外部 registry 检索容器镜像。
可以手动指定 pull secret,或者在 IntegrationPlatform
上为外部容器 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
可用的配置选项如下:
属性 | 类型 | 描述 |
---|---|---|
|
| 可用于启用或禁用特征。所有特征共享这个通用属性。 |
|
|
在 Pod 上设置的 pull secret 名称。如果留空,则会自动从 |
|
|
将全局 Operator 与共享平台搭配使用时,这将启用将 operator 命名空间中的 |
|
|
如果 pod 类型为 |
6.2.6. 路由 Trait
Route 特征可用于配置用于集成的 OpenShift 路由的创建。
证书和密钥内容可以从本地文件系统或 Openshift secret
对象中提供。用户可以使用以 -secret
结尾的参数(例如: tls-certificate-secret
)来引用存储在 secret
中的证书。以 -secret
结尾的参数具有更高的优先级,如果设置了相同的路由参数,例如: tls-key-secret
和 tls-key
,然后使用 tls-key-secret
。设置密钥和证书的建议方法是使用 secret
存储其内容,并使用以下参数引用它们: tls-certificate-secret
,tls-ca-certificate-secret
, tls-
destination-ca-certificate-secret ,tls-destination-ca-certificate-secret
查看此页面末尾的 examples 部分,以查看设置选项。
此特征位于以下配置集: OpenShift。
6.2.6.1. 配置
运行与 CLI 的任何集成时可以指定特征属性:
$ kamel run --trait route.[key]=[value] --trait route.[key2]=[value2] integration.java
可用的配置选项如下:
属性 | 类型 | 描述 |
---|---|---|
|
| 可用于启用或禁用特征。所有特征共享这个通用属性。 |
|
| 注解添加到路由中。这可用于设置路由特定注解。有关注解选项,请参阅特定于路由的注解。CLI usage example: -t "route.annotations.'haproxy.router.openshift.io/balance'=roundrobin |
|
| 配置路由公开的主机。 |
|
|
TLS 终止类型,如 如需更多信息,请参阅 OpenShift 路由文档。 |
|
| TLS 证书内容。 如需更多信息,请参阅 OpenShift 路由文档。 |
|
| 对 TLS 证书的 secret 名称和密钥引用。如果 secret 中只有一个键要读取,则格式为 "secret-name[/key-name]",则值代表 secret 名称,否则您可以设置使用 "/" 分隔的密钥名称。 如需更多信息,请参阅 OpenShift 路由文档。 |
|
| TLS 证书密钥内容。 如需更多信息,请参阅 OpenShift 路由文档。 |
|
| 对 TLS 证书密钥的 secret 名称和密钥引用。如果 secret 中只有一个键要读取,则格式为 "secret-name[/key-name]",则值代表 secret 名称,否则您可以设置使用 "/" 分隔的密钥名称。 如需更多信息,请参阅 OpenShift 路由文档。 |
|
| TLS CA 证书内容。 如需更多信息,请参阅 OpenShift 路由文档。 |
|
| 对 TLS CA 证书的 secret 名称和密钥引用。如果 secret 中只有一个键要读取,则格式为 "secret-name[/key-name]",则值代表 secret 名称,否则您可以设置使用 "/" 分隔的密钥名称。 如需更多信息,请参阅 OpenShift 路由文档。 |
|
| 目标 CA 证书提供最终目的地的 ca 证书的内容。使用重新加密终止时,应提供此文件,以便让路由器将它用于安全连接上的健康检查。如果没有指定此字段,路由器可能会提供自己的目标 CA,并使用短服务名称(service.namespace.svc)执行主机名验证,它允许基础架构生成的证书自动验证。 如需更多信息,请参阅 OpenShift 路由文档。 |
|
| 对目标 CA 证书的 secret 名称和密钥引用。如果 secret 中只有一个键要读取,则格式为 "secret-name[/key-name]",则值代表 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
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
要使用 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
要使用 secret 添加 passthrough 路由,在集成 pod 中设置了 TLS,在运行集成 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
要使用 secret 添加 重新加密路由,在集成 pod 中设置 TLS,在运行集成 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
使用来自路由和 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
然后,您应该注解集成服务来注入 Openshift 服务服务证书
oc annotate service platform-http-server service.beta.openshift.io/serving-cert-secret-name=cert-from-openshift
使用证书和私钥添加 边缘路由,请从本地文件系统提供的私钥。这个示例使用内联脚本读取证书和私钥文件内容,然后删除所有新行字符(这需要将证书设置为参数的值),因此这些值位于一行中。
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;}')"
6.2.7. Service 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
可用的配置选项如下:
属性 | 类型 | 描述 |
---|---|---|
|
| 可用于启用或禁用特征。所有特征共享这个通用属性。 |
|
| 如果需要创建服务,从代码自动检测。 |
|
|
启用服务以 NodePort 的形式公开(默认为 |