You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pulumi和TypeScript创建含嵌套数据的K8s Secret?

解决Pulumi TypeScript创建K8s Secret时嵌套remote_write数据的类型错误

问题根源很明确:Kubernetes Secret的data或stringData字段只接受字符串类型的值,你直接传入了对象数组,自然会触发类型不匹配的错误。要把嵌套的remote_write配置存入Secret,需要先把结构序列化为JSON字符串,再存入Secret。

直接使用stringData(推荐)

stringData是K8s和Pulumi都支持的字段,会自动帮你完成base64编码,不用手动处理,代码更简洁:

import * as k8s from "@pulumi/kubernetes";

// 定义你的remote_write嵌套配置
const remoteWriteConfig = [
  {
    url: "https://your-gateway.example.com/api/v1/write",
    basic_auth: {
      username: "monitor-user",
      password: "monitor-pass"
    }
  }
];

// 创建Secret
const prometheusRemoteWriteSecret = new k8s.core.v1.Secret("prometheus-remote-write", {
  metadata: {
    name: "prometheus-remote-write",
    namespace: "monitoring" // 替换成你的命名空间
  },
  stringData: {
    // 将配置序列化为JSON字符串存入
    "remote_write_config.json": JSON.stringify(remoteWriteConfig)
  }
});

手动使用data字段(需自行base64编码)

如果你一定要用data字段,需要先把JSON字符串转成base64编码:

import * as k8s from "@pulumi/kubernetes";

const remoteWriteConfig = [
  {
    url: "https://your-gateway.example.com/api/v1/write",
    basic_auth: {
      username: "monitor-user",
      password: "monitor-pass"
    }
  }
];

const prometheusRemoteWriteSecret = new k8s.core.v1.Secret("prometheus-remote-write", {
  metadata: {
    name: "prometheus-remote-write",
    namespace: "monitoring"
  },
  data: {
    "remote_write_config.json": Buffer.from(JSON.stringify(remoteWriteConfig)).toString("base64")
  }
});

处理敏感配置(从Pulumi Config读取密钥)

如果你的密码等敏感数据存在Pulumi配置里(用pulumi config set --secret设置),需要先解析Secret类型的值,再序列化:

import * as pulumi from "@pulumi/pulumi";
import * as k8s from "@pulumi/kubernetes";

const config = new pulumi.Config();
const remoteWriteUrl = config.require("remoteWriteUrl");
const remoteWriteUser = config.require("remoteWriteUsername");
const remoteWritePass = config.requireSecret("remoteWritePassword");

// 用pulumi.all处理异步的Secret值
const prometheusRemoteWriteSecret = pulumi.all([remoteWritePass]).apply(([password]) => {
  const resolvedConfig = [
    {
      url: remoteWriteUrl,
      basic_auth: {
        username: remoteWriteUser,
        password: password
      }
    }
  ];

  return new k8s.core.v1.Secret("prometheus-remote-write", {
    metadata: {
      name: "prometheus-remote-write",
      namespace: "monitoring"
    },
    stringData: {
      "remote_write_config.json": JSON.stringify(resolvedConfig)
    }
  });
});

内容的提问来源于stack exchange,提问作者robolott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 11:30:53