本文将描述 WASM 扩展在 TSB 中是如何定义的,以及它们如何分配给层次结构中的组件。
TSB 中的 WASM
为了控制网格中允许的扩展,避免安全泄漏并简化扩展升级过程,TSB 拥有一个WASM 扩展目录, 管理员将在其中注册所有可用于不同组件中使用的扩展。 此目录将包含每个扩展的描述、镜像和执行属性。 当扩展的新版本可用时,更改 WASM 扩展目录记录的内容将将更新传播到该扩展的所有分配。
![image](/book/tsb/howto/wasm/wasm-extension/wasm-ui.png)
这些扩展被打包为 OCI 镜像,包含 WASM 文件,并部署在容器镜像仓库中,Istio 将从中拉取并提取内容。 使用 OCI 镜像交付 WASM 扩展的好处在于,安全性已经实现并标准化,与其他工作负载镜像一样。
扩展可以允许全局使用,也可以在一组租户中受到限制,这将影响扩展可以附加的位置。
在扩展在目录中创建后,它们将启用并可用于与同一组织层次结构中的 TSB 组件的附件中使用。它们的属性将成为附件的配置。 可以配置 WASM 扩展的组件包括:组织、租户、工作区、安全组、入口网关、出口网关和第一层网关。
在 TSB 资源中使用 WASM 扩展
WASM 扩展可以在组织设置、租户设置、工作区设置的defaultSecuritySettings
属性中指定,并将影响层次结构中属于这些资源的所有工作负载。
此外,这些附件可以在 IngressGateway、EgressGateway 和 Tier1Gateway 的extension
属性中指定,只有与这些网关链接的工作负载才会受到 WASM 扩展的影响。TSB 将使用工作负载选择器来指定工作负载。
extension:
- fqn: "organizations/tetrate/extensions/wasm-add-header"
config:
header: x-wasm-header
value: igw-tsb
在 TSB 中使用 WASM 扩展的另一种方式是使用 Istio 直接模式,创建一个IstioInternalGroup和一个WasmPlugin,并引用该组。 例如:
apiVersion: istiointernal.tsb.tetrate.io/v2
kind: Group
metadata:
organization: tetrate
tenant: mytenant
workspace: myworkspace
name: internal-group
spec:
namespaceSelector:
names:
- "*/httpbin"
然后直接创建 Istio WasmPlugin:
apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
name: demo-wasm-add-header
namespace: app-namespace
annotations:
tsb.tetrate.io/organization: tetrate
tsb.tetrate.io/tenant: mytenant
tsb.tetrate.io/workspace: myworkspace
tsb.tetrate.io/istioInternalGroup: internal-group
spec:
selector:
matchLabels:
app: httpbin
url: oci://docker.io/tetrate/xcp-wasm-e2e:0.3
imagePullPolicy: IfNotPresent
pluginConfig:
header: x-wasm-header
value: xcp