使用 QPOptions 启用的扩展¶
QPOptions 是一个队列代理功能,它允许使用其他 Go 包扩展队列代理。例如,security-guard 存储库通过添加运行时安全功能来扩展队列代理,以保护用户服务。
一旦您的集群设置了 QPOptions 启用的扩展,服务就可以决定它希望使用哪些扩展以及如何配置这些扩展。激活和配置扩展在此处描述。
概述¶
服务可以通过在服务自定义资源定义 (CRD) 的 spec.template.metadata
下添加 qpoption.knative.dev/*
注释来激活和配置扩展。
设置值为:qpoption.knative.dev/<ExtensionName>-activate: "enable"
激活扩展。
设置值为:qpoption.knative.dev/<extension-name>-config-<key>: "<value>"
向扩展添加 key: value
配置。
此外,服务必须通过在服务 CRD 的 spec.template.metadata
下添加 features.knative.dev/queueproxy-podinfo: enabled
注释来确保 Pod 信息卷已挂载。
您可以通过应用 YAML 文件或使用 kn service create
CLI 命令来创建 Knative 服务。
先决条件¶
在使用 QPOptions 启用的扩展之前,您必须
- 准备您的集群
- 确保您正在使用使用您想要使用的扩展构建的队列代理映像 - 请参阅 使用 QPOptions 扩展队列代理映像。
- 确保集群配置功能设置为
queueproxy.mount-podinfo: allowed
。有关更多详细信息,请参阅 启用队列代理 Pod 信息。 - 满足 创建服务 中的先决条件
流程¶
提示
以下命令在激活和配置此服务的 test-gate
扩展的同时创建 helloworld-go
示例服务。您可以修改这些命令,包括要激活的扩展和扩展配置。
创建示例服务
-
使用以下示例创建 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 会将注释传播到服务部署的 podSpec 中。当创建服务 Pod 时,队列代理 sidecar 将挂载一个包含 Pod 注释的卷并激活 testgate
扩展。如果队列代理映像中存在 testgate
扩展,则会发生这种情况。然后,testgate
扩展将使用以下配置进行配置:{ sender: "Joe", response: "CU"}
。