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

Kubernetes MySQL Secret部署报错,请求排查修复并匹配配置

问题与修复:Kubernetes MySQL Secret部署错误

问题描述

现有用于创建MySQL数据库Kubernetes Secret的YAML文件:

apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
  key: MYSQL_KEY
type: Opaque
data:  
  mysql-root-password: 11111
  mysql-user: a
  mysql-password: 11111

部署时触发如下错误:

- Error from server (BadRequest): error when creating "STDIN": Secret in version "v1" cannot be handled as a Secret: json: cannot unmarshal number into Go struct field Secret.data of type []uint8

补充背景:此前通过命令kubectl create secret generic mysql-secret --from-literal MYSQL_KEY=11111在集群部署了MySQL,现在希望用YAML生成完全一致的Secret,且需要MYSQL_KEY供auth pod连接MySQL,auth pod的Deployment配置如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: auth-depl
spec:
  replicas: 1
  selector:
    matchLabels:
      app: auth
  template:
    metadata:
      labels:
        app: auth
    spec:
      containers:
        - name: auth
          image: auth
          env:
            - name: MYSQL_URI
              value: 'mysql://auth-mysql-srv:3306/users_auth'
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-secret
                  key: MYSQL_KEY

问题分析与修复步骤

核心问题1:Secret的data字段值未做Base64编码

Kubernetes要求Secret的data字段所有值必须是Base64编码后的字符串,直接写入明文数字(如11111)或纯字符(如a),会导致集群无法将这些原始值解析为要求的[]uint8类型,这是触发报错的直接原因。

核心问题2:metadata中错误添加key字段

key: MYSQL_KEY不属于metadata的合法配置项,Secret的键值对应当放在data(需Base64编码)或stringData(可直接写明文)字段下,而非metadata区域。你之前用--from-literal创建的Secret,MYSQL_KEY是Secret内部的一个键,不是元数据属性。

修复后的YAML配置

方案1:使用stringData(推荐,无需手动编码)

stringData允许直接写入明文,Kubernetes会自动完成Base64编码,便于维护:

apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
type: Opaque
stringData:  
  MYSQL_KEY: "11111"
  mysql-root-password: "11111"
  mysql-user: "a"
  mysql-password: "11111"

方案2:使用data字段(需手动Base64编码)

先对每个值执行Base64编码:

  • echo -n "11111" | base64 输出 MTExMTEx
  • echo -n "a" | base64 输出 YQ==

对应的YAML:

apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
type: Opaque
data:  
  MYSQL_KEY: MTExMTEx
  mysql-root-password: MTExMTEx
  mysql-user: YQ==
  mysql-password: MTExMTEx

验证修复结果

部署修复后的配置文件:

kubectl apply -f <你的Secret文件名>.yaml

查看Secret确认配置正确:

kubectl get secret mysql-secret -o yaml

此时Secret会包含MYSQL_KEY键,可被auth pod的secretKeyRef正确引用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:40:35