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/