Kubewarden 推出 JavaScript/TypeScript SDK

新聞
HongKong
29
01:41 PM · Nov 27 ,2025

Kubewarden JavaScript/TypeScript SDK 的 alpha 版本現已發佈。

“Kubewarden 一直主張自由選擇,讓你用最熟悉的語言寫策略。JavaScript/TypeScript SDK 讓數百萬熟悉 JavaScript 生態的開發者加入,無需學習新語言,就能寫 Kubewarden 策略。”

工作原理

Kubewarden 使用 Bytecode Alliance 的 Javy 項目,將 JavaScript 編譯成 WebAssembly。這樣你的 JavaScript 策略能擁有和其他 Kubewarden 支持語言同樣的安全性、可移植性和性能。

編譯流程很簡單:

  1. 用 JavaScript 或 TypeScript 寫策略

  2. 使用 SDK 工具鏈編譯成 WebAssembly

  3. 像其他 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/

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.