搜索

6.2. Camel K 功能特征

download PDF

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

可用的配置选项如下:

属性类型描述

knative.enabled

bool

可用于启用或禁用特征。所有特征共享这个通用属性。

knative.configuration

字符串

可用于以 JSON 格式注入 Knative 完成配置。

knative.channel-sources

[]string

用作集成路由源的频道列表。可以包含简单的频道名称或完整的 Camel URI。

knative.channel-sinks

[]string

用作集成路由的频道列表。可以包含简单的频道名称或完整的 Camel URI。

knative.endpoint-sources

[]string

用作集成路由源的频道列表。

knative.endpoint-sinks

[]string

用作集成路由目标的端点列表。可以包含简单的端点名称或完整的 Camel URI。

knative.event-sources

[]string

集成将订阅的事件类型列表。可以包含简单事件类型或完整 Camel URI (使用与"默认")不同的特定代理。

knative.event-sinks

[]string

集成生成的事件类型列表。可以包含简单的事件类型或完整 Camel URI (使用特定代理)。

knative.filter-source-channels

bool

启用根据标头 "ce-knativehistory" 过滤事件。因为这个标头已在较新版本的 Knative 中删除,所以默认禁用过滤。

knative.sink-binding

bool

允许通过 Knative SinkBinding 资源将集成绑定到接收器。当集成以单一接收器为目标时使用。当集成以单个 sink 为目标时(除集成由 Knative 源所有时),它会被默认启用。

knative.auto

bool

启用所有特征属性的自动发现。

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-service.enabled

bool

可用于启用或禁用特征。所有特征共享这个通用属性。

knative-service.annotations

map[string]string

注解添加到路由中。这可用于设置 knative 服务特定注解。如需了解更多详细信息,请参阅 特定于路由的注解

CLI usage example: -t "knative-service.annotations.'haproxy.router.openshift.io/balance'=roundrobin"

knative-service.autoscaling-class

字符串

配置 Knative autoscaling class 属性(例如,设置 hpa.autoscaling.knative.devkpa.autoscaling.knative.dev 自动扩展)。

如需更多信息,请参阅 Knative 文档。

knative-service.autoscaling-metric

字符串

配置 Knative 自动扩展指标属性(例如,设置基于 并发cpu 的自动扩展)。

如需更多信息,请参阅 Knative 文档。

knative-service.autoscaling-target

int

为每个 Pod 设置允许的并发级别或 CPU 百分比(取决于自动扩展指标)。

如需更多信息,请参阅 Knative 文档。

knative-service.min-scale

int

集成时应随时运行的最小 Pod 数量。默认情况下 为零,这意味着当没有用于配置的时间时,集成将缩减为零。

如需更多信息,请参阅 Knative 文档。

knative-service.max-scale

int

一个上限,用于可以并行针对集成运行的 Pod 数量。Knative 都有自己的 cap 值,它依赖于安装。

如需更多信息,请参阅 Knative 文档。

knative-service.auto

bool

当所有条件满足时,自动将集成部署为 Knative 服务:

  • 集成使用 Knative 配置集
  • 所有路由都从基于 HTTP 的消费者或被动消费者开始(例如,直接 是被动消费者)

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

可用的配置选项如下:

属性类型描述

prometheus.enabled

bool

可用于启用或禁用特征。所有特征共享这个通用属性。

prometheus.pod-monitor

bool

是否已创建 PodMonitor 资源(默认为 true)。

prometheus.pod-monitor-labels

[]string

PodMonitor 资源标签,适用于 pod-monitortrue

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

可用的配置选项如下:

属性类型描述

pdb.enabled

bool

可用于启用或禁用特征。所有特征共享这个通用属性。

pdb.min-available

字符串

集成的 pod 数量,在驱除后仍可用。它可以是绝对数字或一个百分比。只能指定 min-availablemax-unavailable 之一。

pdb.max-unavailable

字符串

驱除后可以无法使用的集成 pod 数量。它可以是一个绝对数字或一个百分比(如果 min-available 也未设置,则默认为 1)。只能指定 max-unavailablemin-available 之一。

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

可用的配置选项如下:

属性类型描述

pull-secret.enabled

bool

可用于启用或禁用特征。所有特征共享这个通用属性。

pull-secret.secret-name

字符串

在 Pod 上设置的 pull secret 名称。如果留空,则会自动从 IntegrationPlatform registry 配置获取。

pull-secret.image-puller-delegation

bool

将全局 Operator 与共享平台搭配使用时,这将启用将 operator 命名空间中的 system:image-puller 集群角色委派到集成服务帐户。

pull-secret.auto

bool

如果 pod 类型为 kubernetes.io/dockerconfigjson,则自动配置 pod 上的平台 registry secret。

6.2.6. 路由 Trait

Route 特征可用于配置用于集成的 OpenShift 路由的创建。

证书和密钥内容可以从本地文件系统或 Openshift secret 对象中提供。用户可以使用以 -secret 结尾的参数(例如: tls-certificate-secret)来引用存储在 secret 中的证书。以 -secret 结尾的参数具有更高的优先级,如果设置了相同的路由参数,例如: tls-key-secrettls-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

可用的配置选项如下:

属性类型描述

route.enabled

bool

可用于启用或禁用特征。所有特征共享这个通用属性。

route.annotations

map[string]string

注解添加到路由中。这可用于设置路由特定注解。有关注解选项,请参阅特定于路由的注解。CLI usage example: -t "route.annotations.'haproxy.router.openshift.io/balance'=roundrobin

route.host

字符串

配置路由公开的主机。

route.tls-termination

字符串

TLS 终止类型,如 边缘透传 或重新加密

如需更多信息,请参阅 OpenShift 路由文档。

route.tls-certificate

字符串

TLS 证书内容。

如需更多信息,请参阅 OpenShift 路由文档。

route.tls-certificate-secret

字符串

对 TLS 证书的 secret 名称和密钥引用。如果 secret 中只有一个键要读取,则格式为 "secret-name[/key-name]",则值代表 secret 名称,否则您可以设置使用 "/" 分隔的密钥名称。

如需更多信息,请参阅 OpenShift 路由文档。

route.tls-key

字符串

TLS 证书密钥内容。

如需更多信息,请参阅 OpenShift 路由文档。

route.tls-key-secret

字符串

对 TLS 证书密钥的 secret 名称和密钥引用。如果 secret 中只有一个键要读取,则格式为 "secret-name[/key-name]",则值代表 secret 名称,否则您可以设置使用 "/" 分隔的密钥名称。

如需更多信息,请参阅 OpenShift 路由文档。

route.tls-ca-certificate

字符串

TLS CA 证书内容。

如需更多信息,请参阅 OpenShift 路由文档。

route.tls-ca-certificate-secret

字符串

对 TLS CA 证书的 secret 名称和密钥引用。如果 secret 中只有一个键要读取,则格式为 "secret-name[/key-name]",则值代表 secret 名称,否则您可以设置使用 "/" 分隔的密钥名称。

如需更多信息,请参阅 OpenShift 路由文档。

route.tls-destination-ca-certificate

字符串

目标 CA 证书提供最终目的地的 ca 证书的内容。使用重新加密终止时,应提供此文件,以便让路由器将它用于安全连接上的健康检查。如果没有指定此字段,路由器可能会提供自己的目标 CA,并使用短服务名称(service.namespace.svc)执行主机名验证,它允许基础架构生成的证书自动验证。

如需更多信息,请参阅 OpenShift 路由文档。

route.tls-destination-ca-certificate-secret

字符串

对目标 CA 证书的 secret 名称和密钥引用。如果 secret 中只有一个键要读取,则格式为 "secret-name[/key-name]",则值代表 secret 名称,否则您可以设置使用 "/" 分隔的密钥名称。

如需更多信息,请参阅 OpenShift 路由文档。

route.tls-insecure-edge-termination-policy

字符串

要配置如何处理不安全的流量,例如 允许禁用 或重定向流量。

如需更多信息,请参阅 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.keytls.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.keytls.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.keytls.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.keytls.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

可用的配置选项如下:

属性类型描述

service.enabled

bool

可用于启用或禁用特征。所有特征共享这个通用属性。

service.auto

bool

如果需要创建服务,从代码自动检测。

service.node-port

bool

启用服务以 NodePort 的形式公开(默认为 false)。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.