本文档介绍了如何配置在 Google Kubernetes Engine (GKE) 上运行的 Knative serving,以使用 GKE Sandbox 提高工作负载与主机内核的隔离性。
目标
- 了解如何在 Knative serving 集群上启用 GKE Sandbox。
- 部署在沙盒化节点上运行的服务。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
准备工作
- 本教程假定您已在集群上安装并配置了 Knative serving。
- 确保命令行环境已设置,并且工具为最新:
将 GKE Sandbox 节点池添加到现有 Knative serving 集群
按照相应步骤将启用了 GKE Sandbox 的节点池添加到现有 Knative serving 集群。这是您选择使用 GKE Sandbox 的工作负载运行的位置。
在 GKE Sandbox 节点池上部署工作负载
拥有启用了 GKE Sandbox 节点池的 GKE 集群后,请更新 Knative serving 配置。此外,请更新每个服务规范以利用新节点。这些更新只需执行一次。
启用运行时类功能标志
在本部分中,您将使用 knative-serving
命名空间中的 config-features
ConfigMap 中的 Knative 功能和扩展标志来启用 Kubernetes 运行时类。如需启用运行时类,请将 ConfigMap 标志 kubernetes.podspec-runtimeclassname
设置为 enabled
。如需了解详情,请参阅 Knative 功能和扩展程序文档中的 Kubernetes 运行时类和配置标志。
打开
config-features
ConfigMap 进行修改:kubectl edit configmap config-features -n knative-serving
将
kubernetes.podspec-runtimeclassname: enabled
功能标志添加到data
字段。作为上述步骤的替代方案,您可以运行以下命令,将此标志修补到 Knative 功能中:
kubectl patch configmap config-features \ --type='json' \ -p="[{'op': 'replace', 'path': '/data/kubernetes.podspec-runtimeclassname', 'value': 'enabled'}]" \ -n knative-serving
如需验证修改,请运行以下命令以查看 ConfigMap:
kubectl get configmap config-features -n knative-serving -o yaml
ConfigMap 应如下所示:
apiVersion: v1 kind: ConfigMap metadata: name: config-features namespace: knative-serving labels: serving.knative.dev/release: v0.22.0 data: kubernetes.podspec-runtimeclassname: enabled
部署配置为在 GKE Sandbox 中运行的 Service
启用运行时类功能标志后,您可以创建在规范中指定 runtimeClassName
的 Service。将 runtimeClassName
设置为 gvisor
,以指示服务应在 GKE Sandbox 节点池上运行。
通过运行以下命令来部署“Hello World”Knative 应用:
cat <<EOF | kubectl apply -f - apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go spec: template: spec: runtimeClassName: gvisor containers: - image: gcr.io/knative-samples/helloworld-go env: - name: TARGET value: "gVisor User" EOF
如果启用了 Kubernetes 运行时类名称功能,则该命令应完成并且不会出现错误。
通过运行以下命令来获取正在运行的服务的 Pod 及其配置的运行时类:
kubectl get pods \ -o=custom-columns='NAME:.metadata.name,RUNTIME CLASS:.spec.runtimeClassName,STATUS:.status.phase'
您应该会看到类似如下所示的输出:
NAME RUNTIME CLASS STATUS helloworld-go-00001-deployment-55f58477f-fxm6m gvisor Running
后续步骤
验证您可以在新创建的 GKE Sandbox 节点池上部署不受信任的应用后,您就可以将 runtimeClassName: gvisor
添加到您想要在 GKE Sandbox 节点池上执行的其他不受信任服务的 Kubernetes 规范中。
附加阅读材料:
- GKE Sandbox 文档介绍了可能会破坏某些服务兼容性的限制。
- 有关部署 Knative 服务的 gVisor 文档,以了解在 gVisor(也称为 GKE Sandbox)上部署 Knative 应用的更详细的指南。