注意
此集成目前处于 Alpha 阶段。我们正尝试评估其使用情况,因此如果您正在使用或对此感兴趣,请通过 #knative-serving Slack 频道与我们联系。
使用 QPOptions 启用的扩展¶
QPOptions 是一项队列代理 (Queue Proxy) 功能,它能够使用额外的 Go 包来扩展队列代理。例如,security-guard 仓库通过添加运行时安全功能来保护用户服务,从而扩展了队列代理。
一旦您的集群使用 QPOptions 启用的扩展进行了设置,服务就可以决定它希望使用哪些扩展以及如何配置这些扩展。激活和配置扩展的说明见此处。
概述¶
服务可以通过在 Service 自定义资源定义 (CRD) 的 `spec.template.metadata` 下添加 qpoption.knative.dev/* 注解来激活和配置扩展。
设置值为:qpoption.knative.dev/<ExtensionName>-activate: "enable" 可激活该扩展。
设置值为:qpoption.knative.dev/<extension-name>-config-<key>: "<value>" 可向该扩展添加一个配置:key: value。
此外,服务必须确保 Pod 信息卷 (Pod Info volume) 已挂载,方法是在 Service CRD 的 `spec.template.metadata` 下添加 features.knative.dev/queueproxy-podinfo: enabled 注解。
您可以通过应用 YAML 文件或使用 kn service create CLI 命令来创建 Knative 服务。
先决条件¶
在使用 QPOptions 启用的扩展之前,您必须
- 准备您的集群
- 确保您使用的队列代理镜像是使用您希望使用的扩展构建的 - 请参阅 使用 QPOptions 扩展队列代理镜像。
- 确保集群的 config-features 中设置了
queueproxy.mount-podinfo: allowed。更多详细信息请参阅 启用队列代理 Pod 信息。 - 满足 创建服务 中的先决条件
步骤¶
提示
以下命令创建一个 helloworld-go 示例服务,同时为该服务激活并配置 test-gate 扩展。您可以修改这些命令,包括要激活的扩展和扩展的配置。
创建一个示例服务
-
使用以下示例创建 YAML 文件
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go namespace: default spec: template: metadata: annotations: features.knative.dev/queueproxy-podinfo: enabled qpoption.knative.dev/testgate-activate: enable qpoption.knative.dev/testgate-config-response: CU qpoption.knative.dev/testgate-config-sender: Joe spec: containers: - image: ghcr.io/knative/helloworld-go:latest env: - name: TARGET value: "World" -
通过运行命令应用 YAML 文件
其中kubectl apply -f <filename>.yaml<filename>是您在上一步中创建的文件的名称。
kn service create helloworld-go \
--image ghcr.io/knative/helloworld-go:latest \
--env TARGET=World \
--annotation features.knative.dev/queueproxy-podinfo=enabled \
--annotation qpoption.knative.dev/testgate-activate=enable \
--annotation qpoption.knative.dev/testgate-config-response=Goodbye \
--annotation qpoption.knative.dev/testgate-config-sender=Joe
创建服务后,Knative 会将这些注解传播到服务的部署 (deployment) 的 podSpec。当创建服务 Pod 时,队列代理 sidecar 会挂载一个包含 pod 注解的卷,并激活 testgate 扩展。如果 testgate 扩展在队列代理镜像中可用,则会发生这种情况。然后,testgate 扩展将使用配置:{ sender: "Joe", response: "CU"} 进行配置。