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

如何用K8s Python Client将YAML文件编码为Secret?

正确使用Kubernetes Python Client创建包含YAML文件的Secret

Kubernetes Secret的data字段要求每个值是文件原始二进制内容的Base64编码字符串,这和kubectl--from-file的行为完全一致——kubectl会直接读取文件的原始内容做Base64编码,而非解析YAML后再处理。你的问题出在没有对齐这个逻辑,下面是正确的实现方式:

核心步骤

  1. 读取YAML文件的原始字节内容(不要解析成字典)
  2. 对原始字节进行Base64编码,转成UTF-8字符串
  3. 构造Secret对象时,将编码后的字符串放入data字段对应键下

示例代码

from kubernetes import client, config
import base64

# 加载K8s配置(集群内运行请用load_incluster_config)
config.load_kube_config()
v1 = client.CoreV1Api()

# 读取YAML文件原始内容并编码
with open("my-values.yaml", "rb") as f:
    raw_yaml_content = f.read()
encoded_content = base64.b64encode(raw_yaml_content).decode("utf-8")

# 构造Secret对象
secret_body = client.V1Secret(
    api_version="v1",
    kind="Secret",
    metadata=client.V1ObjectMeta(name="values"),
    data={"my-values.yaml": encoded_content}
)

# 创建Secret(替换为你的目标namespace)
v1.create_namespaced_secret(namespace="default", body=secret_body)

错误原因说明

  • 直接传YAML解析后的字典:Secret的data字段仅接受Base64编码字符串,K8s会尝试将字典当作待解码内容处理,自然触发Base64解码错误。
  • 编码解析后的字典:你编码的是字典的字符串表示(比如str(parsed_dict)),而非原始YAML文件的字节内容,这和kubectl的处理逻辑不符,导致K8s识别为格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:50:13