编程 Kubewarden 深度解析:WebAssembly 驱动的 Kubernetes 策略引擎,让安全策略编写不再受限

2026-04-22 05:20:13 +0800 CST views 9

Kubewarden 深度解析:WebAssembly 驱动的 Kubernetes 策略引擎,让安全策略编写不再受限

引言:Kubernetes 安全治理的困境与突破

在 Kubernetes 集群中,安全策略的管理一直是运维团队的心头之痛。

想象一下这样的场景:你的团队正在使用 OPA Gatekeeper 来强制执行安全策略,但策略编写需要学习 Rego 这门专用语言;或者你选择了 Kyverno,虽然可以用 YAML 定义策略,但灵活性受限,复杂逻辑难以表达。更糟糕的是,当你需要在策略中实现一些业务特定的校验逻辑时,发现现有的策略引擎要么力不从心,要么需要引入复杂的 sidecar 架构。

这就是 Kubewarden 诞生的背景——一个由 SUSE Rancher 创建、现为 CNCF Sandbox 项目的开源策略引擎,它通过 WebAssembly 技术彻底改变了 Kubernetes 策略的编写和执行方式。

Kubewarden 的核心理念很简单:让开发者用自己喜欢的编程语言编写策略,用 WebAssembly 实现跨平台兼容,用标准 OCI 仓库分发策略。这种设计不仅解决了多语言支持的问题,还带来了性能、可移植性和生态兼容性的全面提升。

本文将从架构原理、实战部署、策略开发到性能优化,全方位解析 Kubewarden 的技术内幕,帮助你理解为什么它正在成为 Kubernetes 策略管理的新选择。


一、Kubewarden 架构设计:WebAssembly 如何重塑策略引擎

1.1 传统策略引擎的局限性

在深入 Kubewarden 之前,让我们先看看现有的 Kubernetes 策略引擎存在哪些问题:

策略引擎策略语言主要局限
OPA GatekeeperRego学习曲线陡峭,调试困难,生态相对封闭
KyvernoYAML表达能力有限,复杂逻辑难以实现
Pod Security Standards内置策略灵活性差,无法满足定制化需求
Admission Webhooks任意语言需要独立部署服务,运维复杂度高

这些方案各有优劣,但共同的痛点是:要么牺牲灵活性换取易用性,要么牺牲易用性换取灵活性

1.2 Kubewarden 的核心架构

Kubewarden 采用了一种独特的架构设计,将策略执行与策略定义解耦:

┌─────────────────────────────────────────────────────────────────┐
│                        Kubernetes API Server                     │
│                                                                  │
│  ┌─────────────┐    ┌─────────────────────────────────────────┐ │
│  │   Request   │───▶│      Validating/Mutating Webhook        │ │
│  │  (Pod/Dep)  │    │         (kubewarden-controller)         │ │
│  └─────────────┘    └─────────────────────────────────────────┘ │
│                              │                                   │
│                              ▼                                   │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │              Policy Server (WebAssembly Runtime)           │  │
│  │  ┌─────────────┐  ┌─────────────┐  ┌───────────────────┐  │  │
│  │  │  Policy 1   │  │  Policy 2   │  │     Policy N      │  │  │
│  │  │  (Wasm)     │  │  (Wasm)     │  │     (Wasm)        │  │  │
│  │  │  Go/Rust    │  │  Rust/JS    │  │  Swift/Assembly   │  │  │
│  │  └─────────────┘  └─────────────┘  └───────────────────┘  │  │
│  └───────────────────────────────────────────────────────────┘  │
│                              │                                   │
│                              ▼                                   │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │              OCI Registry (Policy Distribution)            │  │
│  │    ghcr.io/kubewarden/policies/disallow-privileged:latest │  │
│  └───────────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────┘

关键组件解析:

  1. kubewarden-controller:Kubernetes Operator,负责管理 PolicyServer 和 ClusterAdmissionPolicy 资源
  2. Policy Server:基于 WebAssembly 的运行时,负责加载和执行策略
  3. kwctl:CLI 工具,用于策略的构建、测试、推送和拉取
  4. Audit Scanner:定期扫描集群中已运行的资源,检查是否符合策略

1.3 WebAssembly:策略执行的沙盒环境

Kubewarden 选择 WebAssembly 作为策略执行环境,这一决策背后有深刻的技术考量:

为什么选 WebAssembly?

┌────────────────────────────────────────────────────────────┐
│                    WebAssembly 优势                         │
├────────────────────────────────────────────────────────────┤
│ 1. 语言无关性                                               │
│    • 支持 Rust、Go、Swift、AssemblyScript 等                │
│    • 复用现有技能和工具链                                   │
│                                                            │
│ 2. 沙盒安全                                                 │
│    • 内存隔离,策略无法访问宿主机资源                        │
│    • 确定性执行,无网络/文件系统访问                         │
│                                                            │
│ 3. 高性能                                                   │
│    • 接近原生的执行速度                                      │
│    • 毫秒级冷启动                                            │
│                                                            │
│ 4. 可移植性                                                 │
│    • 编译一次,到处运行                                      │
│    • x86/ARM 架构兼容                                        │
│                                                            │
│ 5. 标准化分发                                               │
│    • 支持 OCI 镜像仓库                                       │
│    • 与容器生态无缝集成                                      │
└────────────────────────────────────────────────────────────┘

执行模型对比:

特性OPA/RegoKyvernoKubewarden/WebAssembly
执行方式解释执行解释执行预编译字节码
启动延迟中等极低(毫秒级)
内存隔离进程级进程级沙盒级
多语言支持
策略大小文本YAML二进制(通常 <10MB)

二、快速开始:5 分钟部署 Kubewarden

2.1 环境准备

在开始之前,确保你的环境满足以下要求:

  • Kubernetes 1.26+ 集群
  • kubectl 已配置
  • Helm 3.x 已安装

2.2 使用 Helm 安装 Kubewarden

Kubewarden 提供了一键式 Helm 安装方案:

# 添加 Kubewarden Helm 仓库
helm repo add kubewarden https://charts.kubewarden.io
helm repo update

# 安装 Kubewarden 控制器(使用官方推荐的默认值)
helm install --create-namespace -n kubewarden kubewarden-controller \
  kubewarden/kubewarden-controller

# 等待部署完成
kubectl wait --for=condition=Ready -n kubewarden pods --all --timeout=300s

验证安装:

# 检查控制器状态
kubectl get pods -n kubewarden

# 预期输出:
# NAME                                        READY   STATUS    RESTARTS   AGE
# kubewarden-controller-xxx                   1/1     Running   0          2m
# kubewarden-default-policy-server-xxx        1/1     Running   0          1m

2.3 部署第一条策略:禁止特权容器

让我们从一个最基础的安全策略开始——禁止运行特权容器:

# privileged-pod-policy.yaml
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
  name: privileged-pod-policy
spec:
  module: registry://ghcr.io/kubewarden/policies/pod-privileged:v0.3.0
  rules:
    - apiGroups: [""]
      apiVersions: ["v1"]
      resources: ["pods"]
      operations:
        - CREATE
        - UPDATE
  mutating: false
  settings:
    # 策略配置:禁止特权模式
    skip_init_containers: false
    skip_ephemeral_containers: false

应用策略:

kubectl apply -f privileged-pod-policy.yaml

# 等待策略生效
kubectl wait --for=condition=PolicyActive clusteradmissionpolicy/privileged-pod-policy

2.4 测试策略效果

测试 1:尝试创建特权容器(应该被拒绝)

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: privileged-test
spec:
  containers:
    - name: nginx
      image: nginx:latest
      securityContext:
        privileged: true
EOF

预期结果:

Error from server: error when creating "STDIN": admission webhook "privileged-pod-policy.kubewarden.admission" denied the request: Pod is privileged

测试 2:创建普通容器(应该成功)

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: normal-pod
spec:
  containers:
    - name: nginx
      image: nginx:latest
EOF

预期结果:

pod/normal-pod created

三、策略开发实战:用 Rust 编写自定义策略

3.1 开发环境准备

Kubewarden 支持多种语言编写策略,这里我们选择 Rust 作为示例,因为它在 WebAssembly 生态中成熟度最高。

安装工具链:

# 安装 Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env

# 添加 WebAssembly 目标
rustup target add wasm32-wasi

# 安装 kwctl(Kubewarden CLI)
curl -sSfL https://github.com/kubewarden/kwctl/releases/latest/download/kwctl-linux-x86_64.tar.gz | \
  tar xz -C /usr/local/bin kwctl

3.2 创建策略项目

使用官方提供的模板快速创建策略项目:

# 安装 cargo-generate
cargo install cargo-generate

# 从模板创建项目
cargo generate --git https://github.com/kubewarden/rust-policy-template.git \
  --name required-labels-policy

cd required-labels-policy

项目结构:

required-labels-policy/
├── Cargo.toml          # Rust 依赖配置
├── metadata.yml        # 策略元数据
├── settings.yml.sample # 策略配置示例
├── src/
│   └── lib.rs         # 策略核心代码
└── tests/
    └── mod.rs         # 单元测试

3.3 编写策略逻辑:强制标签校验

假设我们需要一个策略,强制要求所有 Deployment 必须包含 appteam 标签:

// src/lib.rs
use kubewarden_policy_sdk::wapc_guest as guest;
use guest::prelude::*;
use k8s_openapi::api::apps::v1::Deployment;
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Default, Debug)]
#[serde(default)]
struct Settings {
    required_labels: Vec<String>,
}

// 策略入口点
#[no_mangle]
pub extern "C" fn wapc_init() {
    register_function("validate", validate);
    register_function("validate_settings", validate_settings);
}

fn validate(payload: &[u8]) -> CallResult {
    let validation_req: ValidationRequest<Settings> = ValidationRequest::new(payload)?;
    let deployment: Deployment = serde_json::from_value(validation_req.request.object)?;
    
    let settings = validation_req.settings;
    let labels = deployment.metadata.labels.unwrap_or_default();
    
    let mut missing_labels = Vec::new();
    for label in &settings.required_labels {
        if !labels.contains_key(label) {
            missing_labels.push(label.clone());
        }
    }
    
    if missing_labels.is_empty() {
        // 所有必需标签都存在
        accept_request()
    } else {
        // 缺少必需标签
        let message = format!(
            "Deployment 缺少必需标签: {}",
            missing_labels.join(", ")
        );
        reject_request(Some(message), None)
    }
}

fn validate_settings(payload: &[u8]) -> CallResult {
    let settings: Settings = serde_json::from_slice(payload)?;
    
    if settings.required_labels.is_empty() {
        reject_request(
            Some("必须配置至少一个必需标签".to_string()),
            None
        )
    } else {
        accept_request()
    }
}

3.4 编译和测试策略

# 编译为 WebAssembly
cargo build --target wasm32-wasi --release

# 使用 kwctl 测试策略
kwctl run \
  --request-path test_data/deployment-without-labels.json \
  --settings-json '{"required_labels": ["app", "team"]}' \
  target/wasm32-wasi/release/required_labels_policy.wasm

# 预期输出:拒绝请求,因为缺少标签

测试数据示例:

// test_data/deployment-without-labels.json
{
  "apiVersion": "admission.k8s.io/v1",
  "kind": "AdmissionReview",
  "request": {
    "uid": "test-uid",
    "kind": {"group": "apps", "version": "v1", "kind": "Deployment"},
    "resource": {"group": "apps", "version": "v1", "resource": "deployments"},
    "operation": "CREATE",
    "object": {
      "apiVersion": "apps/v1",
      "kind": "Deployment",
      "metadata": {
        "name": "test-deployment",
        "namespace": "default"
        // 注意:没有 app 和 team 标签
      },
      "spec": {
        "replicas": 1,
        "selector": {"matchLabels": {"app": "test"}},
        "template": {
          "metadata": {"labels": {"app": "test"}},
          "spec": {
            "containers": [{"name": "nginx", "image": "nginx:latest"}]
          }
        }
      }
    }
  }
}

3.5 推送策略到镜像仓库

# 登录到镜像仓库(以 GitHub Container Registry 为例)
echo $GITHUB_TOKEN | kwctl login ghcr.io -u $GITHUB_USER --password-stdin

# 推送策略
kwctl push \
  --allowed-to-mutate \
  target/wasm32-wasi/release/required_labels_policy.wasm \
  ghcr.io/$GITHUB_USER/kubewarden-policies/required-labels:v0.1.0

# 验证推送
kwctl pull ghcr.io/$GITHUB_USER/kubewarden-policies/required-labels:v0.1.0

3.6 在集群中部署自定义策略

# required-labels-policy.yaml
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
  name: required-labels-policy
spec:
  module: registry://ghcr.io/$GITHUB_USER/kubewarden-policies/required-labels:v0.1.0
  rules:
    - apiGroups: ["apps"]
      apiVersions: ["v1"]
      resources: ["deployments"]
      operations:
        - CREATE
        - UPDATE
  mutating: false
  settings:
    required_labels:
      - app
      - team
kubectl apply -f required-labels-policy.yaml

四、高级特性:审计扫描、变异策略与 Sigstore 集成

4.1 审计扫描:发现已运行的违规资源

传统的准入控制器只能拦截新创建的资源,但集群中可能已经存在大量不合规的资源。Kubewarden 的 Audit Scanner 可以定期扫描所有资源,生成合规报告。

启用审计扫描:

# audit-scanner-config.yaml
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
  name: audit-privileged-pods
  annotations:
    # 启用审计扫描
    io.kubewarden.policy.audit: "true"
spec:
  module: registry://ghcr.io/kubewarden/policies/pod-privileged:v0.3.0
  rules:
    - apiGroups: [""]
      apiVersions: ["v1"]
      resources: ["pods"]
      operations: ["CREATE", "UPDATE"]
  # 审计模式:即使策略失败也不阻止请求
  # 仅用于报告生成
  mode: monitor

查看审计报告:

# 审计扫描会创建 PolicyReport 资源
kubectl get policyreports.wgpolicyk8s.io

# 查看详细报告
kubectl get policyreport -o yaml | grep -A 20 "results:"

报告示例:

results:
  - category: security
    message: "Pod is privileged"
    policy: audit-privileged-pods
    resources:
      - apiVersion: v1
        kind: Pod
        name: legacy-app-pod
        namespace: production
        uid: xxxx-xxxx
    result: fail
    severity: high
    timestamp: "2026-04-22T10:30:00Z"

4.2 变异策略(Mutating Policies)

除了验证(Validating)策略,Kubewarden 还支持变异(Mutating)策略,可以在资源创建时自动修改其配置。

示例:自动注入资源限制

// 变异策略:为没有资源限制的 Pod 自动添加默认值
fn mutate(payload: &[u8]) -> CallResult {
    let validation_req: ValidationRequest<Settings> = ValidationRequest::new(payload)?;
    let mut pod: Pod = serde_json::from_value(validation_req.request.object)?;
    
    let spec = pod.spec.as_mut().ok_or("Pod spec is missing")?;
    
    for container in spec.containers.iter_mut() {
        if container.resources.is_none() {
            container.resources = Some(ResourceRequirements {
                limits: Some({
                    let mut m = BTreeMap::new();
                    m.insert("cpu".to_string(), Quantity("500m".to_string()));
                    m.insert("memory".to_string(), Quantity("512Mi".to_string()));
                    m
                }),
                requests: Some({
                    let mut m = BTreeMap::new();
                    m.insert("cpu".to_string(), Quantity("100m".to_string()));
                    m.insert("memory".to_string(), Quantity("128Mi".to_string()));
                    m
                }),
                ..Default::default()
            });
        }
    }
    
    // 返回修改后的对象
    let mutated_object = serde_json::to_value(pod)?;
    mutate_request(mutated_object)
}

4.3 Sigstore 集成:策略供应链安全

Kubewarden 1.31 版本新增了对 Sigstore 的增强支持,可以在离线环境中验证策略签名:

# 配置 Sigstore 信任配置
kwctl verify \
  --verification-config sigstore-config.json \
  ghcr.io/kubewarden/policies/pod-privileged:v0.3.0

# sigstore-config.json 示例
{
  "allOf": [
    {
      "kind": "pubKey",
      "owner": "Kubewarden Developers",
      "key": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"
    }
  ],
  "anyOf": null
}

在集群中强制签名验证:

apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
  name: verified-policy-only
spec:
  module: registry://ghcr.io/kubewarden/policies/pod-privileged:v0.3.0
  # 启用签名验证
  verificationConfig: |
    {
      "allOf": [
        {
          "kind": "pubKey",
          "owner": "Kubewarden",
          "key": "..."
        }
      ]
    }
  rules:
    - apiGroups: [""]
      apiVersions: ["v1"]
      resources: ["pods"]
      operations: ["CREATE", "UPDATE"]

五、性能优化与生产实践

5.1 策略性能调优

WebAssembly 运行时优化:

# policy-server-config.yaml
apiVersion: policies.kubewarden.io/v1
kind: PolicyServer
metadata:
  name: optimized-policy-server
spec:
  # 资源限制
  resources:
    limits:
      cpu: "2000m"
      memory: "2Gi"
    requests:
      cpu: "500m"
      memory: "512Mi"
  
  # 并发设置
  env:
    # 每个策略的并发执行数
    - name: KUBEWARDEN_POLICY_WORKERS
      value: "10"
    # WebAssembly 实例池大小
    - name: KUBEWARDEN_WASM_INSTANCE_POOL_SIZE
      value: "20"

策略缓存策略:

# 预热策略缓存
kwctl pull ghcr.io/kubewarden/policies/pod-privileged:v0.3.0
kwctl pull ghcr.io/kubewarden/policies/trusted-repos:latest

# 查看本地缓存
kwctl policies

5.2 高可用部署

在多集群环境中,建议采用以下架构:

┌─────────────────────────────────────────────────────────────┐
│                    管理集群 (Management Cluster)              │
│                                                              │
│  ┌───────────────────────────────────────────────────────┐  │
│  │              Kubewarden Policy Catalog                 │  │
│  │         (集中管理所有策略版本和配置)                     │  │
│  └───────────────────────────────────────────────────────┘  │
│                          │                                   │
│                          ▼                                   │
│  ┌───────────────────────────────────────────────────────┐  │
│  │              Policy Distribution (OCI Registry)        │  │
│  │              (Harbor / GHCR / 私有仓库)                 │  │
│  └───────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘
                              │
        ┌─────────────────────┼─────────────────────┐
        ▼                     ▼                     ▼
┌───────────────┐    ┌───────────────┐    ┌───────────────┐
│  生产集群 A    │    │  生产集群 B    │    │  生产集群 C    │
│               │    │               │    │               │
│ ┌───────────┐ │    │ ┌───────────┐ │    │ ┌───────────┐ │
│ │Kubewarden │ │    │ │Kubewarden │ │    │ │Kubewarden │ │
│ │Controller │ │    │ │Controller │ │    │ │Controller │ │
│ └───────────┘ │    │ └───────────┘ │    │ └───────────┘ │
│ ┌───────────┐ │    │ ┌───────────┐ │    │ ┌───────────┐ │
│ │Policy     │ │    │ │Policy     │ │    │ │Policy     │ │
│ │Server     │ │    │ │Server     │ │    │ │Server     │ │
│ └───────────┘ │    │ └───────────┘ │    │ └───────────┘ │
└───────────────┘    └───────────────┘    └───────────────┘

5.3 监控与告警

Kubewarden 提供了 Prometheus metrics,可以集成到现有的监控体系中:

# servicemonitor.yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: kubewarden-metrics
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: kubewarden-policy-server
  namespaceSelector:
    matchNames:
      - kubewarden
  endpoints:
    - port: metrics
      interval: 30s
      path: /metrics

关键监控指标:

指标名称说明告警阈值建议
kubewarden_policy_evaluations_total策略评估总数-
kubewarden_policy_evaluations_denied_total拒绝请求数突增 > 100/分钟
kubewarden_policy_evaluation_duration_seconds评估延迟P99 > 100ms
kubewarden_wasm_memory_bytesWebAssembly 内存使用> 80% 限制

5.4 故障排查指南

常见问题及解决方案:

# 1. 策略未生效
kubectl get clusteradmissionpolicy -o wide
# 检查 POLICY STATUS 是否为 Active

# 2. 查看 Policy Server 日志
kubectl logs -n kubewarden deployment/kubewarden-default-policy-server

# 3. 测试策略(本地调试)
kwctl run \
  --request-path test-request.json \
  --settings-json '{}' \
  policy.wasm

# 4. 检查 Webhook 配置
kubectl get validatingwebhookconfigurations | grep kubewarden

# 5. 策略性能分析
kwctl bench \
  --warmup 100 \
  --iterations 1000 \
  --request-path test-request.json \
  policy.wasm

六、与其他策略引擎的对比分析

6.1 功能对比矩阵

特性KubewardenOPA GatekeeperKyvernoJS Policy
策略语言任意(Wasm)RegoYAMLJavaScript
学习曲线中(需学 Wasm)高(Rego)
执行性能⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
多语言支持✅ 任意❌ 仅 Rego❌ 仅 YAML❌ 仅 JS
策略复用✅ OCI 仓库✅ OPA Bundle❌ ConfigMap✅ NPM
签名验证✅ Sigstore⚠️ 部分支持
审计扫描✅ 内置⚠️ 需额外配置✅ 内置
CNCF 项目✅ Sandbox✅ Graduated✅ Incubating

6.2 选型建议

选择 Kubewarden 的场景:

  • 团队有多语言背景,不想学习 Rego
  • 需要高性能的策略执行(毫秒级延迟)
  • 重视供应链安全(Sigstore 集成)
  • 策略逻辑复杂,需要完整的编程语言支持

选择 OPA Gatekeeper 的场景:

  • 已经在使用 OPA 进行其他授权场景
  • 团队熟悉 Rego 语言
  • 需要与云厂商托管服务集成(如 Azure Policy)

选择 Kyverno 的场景:

  • 策略需求简单,主要是标签/资源限制检查
  • 团队不想引入额外的编程语言
  • 快速上手,低运维成本优先

七、总结与展望

7.1 Kubewarden 的核心价值

Kubewarden 通过 WebAssembly 技术,为 Kubernetes 策略管理带来了革命性的变化:

  1. 语言自由:不再被 Rego 或 YAML 束缚,用你熟悉的语言写策略
  2. 性能卓越:WebAssembly 的预编译特性带来接近原生的执行速度
  3. 生态兼容:OCI 镜像仓库、Sigstore 签名验证,与云原生生态无缝集成
  4. 安全可靠:沙盒执行环境,策略无法越权访问集群资源

7.2 2026 年发展路线图

根据 Kubewarden 社区的规划,2026 年将重点推进以下方向:

  • AI 辅助策略生成:通过大模型自动生成策略代码
  • 策略市场:类似 Helm Chart 的官方策略仓库
  • 多集群联邦:跨集群的统一策略管理和审计
  • WASM 组件模型:支持更复杂的策略组合和复用

7.3 给读者的建议

如果你是 Kubernetes 运维人员,建议从以下步骤开始:

  1. Week 1:在测试集群安装 Kubewarden,部署官方提供的安全策略
  2. Week 2:使用 kwctl 测试和调试策略,熟悉工作流程
  3. Week 3:尝试用你熟悉的语言编写一条简单策略
  4. Week 4:在生产环境试点,逐步替换现有策略引擎

Kubewarden 代表了 Kubernetes 策略管理的未来方向——开放、灵活、高性能。在这个云原生安全日益重要的时代,掌握这项技术将为你的职业生涯增添重要砝码。


参考资源


本文撰写于 2026 年 4 月,基于 Kubewarden 1.31 版本。技术发展迅速,建议读者关注官方文档获取最新信息。

推荐文章

Python设计模式之工厂模式详解
2024-11-19 09:36:23 +0800 CST
从Go开发者的视角看Rust
2024-11-18 11:49:49 +0800 CST
Vue3中的Store模式有哪些改进?
2024-11-18 11:47:53 +0800 CST
LLM驱动的强大网络爬虫工具
2024-11-19 07:37:07 +0800 CST
php strpos查找字符串性能对比
2024-11-19 08:15:16 +0800 CST
SQL常用优化的技巧
2024-11-18 15:56:06 +0800 CST
快速提升Vue3开发者的效率和界面
2025-05-11 23:37:03 +0800 CST
Rust 中的所有权机制
2024-11-18 20:54:50 +0800 CST
#免密码登录服务器
2024-11-19 04:29:52 +0800 CST
介绍Vue3的静态提升是什么?
2024-11-18 10:25:10 +0800 CST
MySQL数据库的36条军规
2024-11-18 16:46:25 +0800 CST
程序员茄子在线接单