跳到内容

使用 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 启用的扩展之前,您必须

流程

提示

以下命令在激活和配置此服务的 test-gate 扩展的同时创建 helloworld-go 示例服务。您可以修改这些命令,包括要激活的扩展和扩展配置。

创建示例服务

  1. 使用以下示例创建 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"
    
  2. 通过运行以下命令来应用 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"}

我们使用分析和 Cookie 来了解网站流量。有关您使用我们网站的信息将与 Google 共享,用于该目的。 了解更多。