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输出MTExMTExecho -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
相关产品推荐
相关产品推荐

