Kubewarden 推出 JavaScript/TypeScript SDK
Kubewarden JavaScript/TypeScript SDK 的 alpha 版本现已发布。
“Kubewarden 一直主张自由选择,让你用最熟悉的语言写策略。JavaScript/TypeScript SDK 让数百万熟悉 JavaScript 生态的开发者加入,无需学习新语言,就能写 Kubewarden 策略。”
工作原理
Kubewarden 使用 Bytecode Alliance 的 Javy 项目,将 JavaScript 编译成 WebAssembly。这样你的 JavaScript 策略能拥有和其他 Kubewarden 支持语言同样的安全性、可移植性和性能。
编译流程很简单:
-
用 JavaScript 或 TypeScript 写策略
-
使用 SDK 工具链编译成 WebAssembly
-
像其他 Kubewarden 策略一样部署到集群
SDK 提供了开发所需的全部资源:
Host Capabilities API
实现了完整的 TypeScript API,支持 Kubewarden 的主机能力,策略可以访问:
- 容器镜像仓库操作:查询 OCI 清单摘要,获取清单和镜像配置
- 网络能力:执行 DNS 查询和主机名解析
- Kubernetes 资源访问:查询集群资源,跨命名空间列表,权限验证
- 加密操作:证书验证和加密校验
- Sigstore 集成:用公钥验证签名、无钥验证、GitHub Actions 来源验证等
所有 API 都有完整类型支持,开发时享受智能提示和类型安全。
策略模板
开始时可以克隆策略模板仓库。模板包含:
- 预配置的 TypeScript 编译流程
- 与 Kubewarden SDK 集成
- 使用 bats 的端到端测试框架
- 演示最佳实践的示例策略
- 集成 Kubernetes TypeScript 类型,保证类型安全
简单策略示例
import { Validation, writeOutput } from'kubewarden-policy-sdk';
exportfunction validate(): void {
try {
const validationRequest = Validation.Validation.readValidationRequest();
const settings: PolicySettings = validationRequest.settings || {};
const resource = getKubernetesResource(validationRequest);
if (!resource) {
writeOutput(Validation.Validation.rejectRequest('Failed to parse Kubernetes resource.'));
return;
}
if (resource.kind !== 'Pod') {
writeOutput(Validation.Validation.acceptRequest());
return;
}
const hostname = getPodHostname(resource as Pod);
const deniedHostnames = settings.denied_hostnames || [];
if (!hostname) {
writeOutput(Validation.Validation.acceptRequest());
return;
}
if (deniedHostnames.includes(hostname)) {
writeOutput(
Validation.Validation.rejectRequest(
`Pod hostname '${hostname}' is not allowed. Denied hostnames: [${deniedHostnames.join(', ')}]`
),
);
} else {
writeOutput(Validation.Validation.acceptRequest());
}
} catch (err) {
console.error('Validation error:', err);
writeOutput(Validation.Validation.rejectRequest(`Validation failed: ${err}`));
}
}
更多详情可查看官方公告:https://www.kubewarden.io/blog/2025/11/policy-sdk-js/