Secrets 应用部署示例(Kubernetes)
本示例演示如何在 Kubernetes 中使用 Secret 保存敏感信息,并通过 Deployment 部署 MariaDB,再通过 Service 暴露服务,最终实现数据库的安全配置与访问。
1️⃣ 编写 Secret:保存敏感信息
文件名:mariadb-secret.yml
🎯 用途:将数据库的敏感信息(如 root 密码、用户密码、数据库名等)以 Secret 形式保存,避免明文出现在 Deployment 中。
apiVersion: v1
kind: Secret
metadata:
name: mariadb-secrets
labels:
app: mariadb
tier: database
type: Opaque
stringData:
root-password: root # Root 用户密码(明文,K8s 会自动转为 Base64)
db-user: yumeko # 数据库普通用户名
user-password: yumeko # 普通用户密码
database-name: test # 数据库名称
🔐 说明:使用 stringData 字段,可以直接写明文,Kubernetes 会自动将其编码为 Base64 并存入真正的 Secret 数据字段 data 中。
2️⃣ 编写 Deployment:部署 MariaDB 容器
文件名:mariadb-deployment.yml
🎯 用途:基于 MariaDB 官方镜像启动一个 Pod,并注入上述 Secret 中的数据库敏感信息作为环境变量。
apiVersion: apps/v1
kind: Deployment
metadata:
name: mariadb
labels:
app: mariadb
spec:
replicas: 1
selector:
matchLabels:
app: mariadb
template:
metadata:
labels:
app: mariadb
spec:
restartPolicy: Always
containers:
- name: mariadb
image: mariadb:latest
ports:
- containerPort: 3306 # MariaDB 默认端口
imagePullPolicy: Never # 仅使用本地镜像(开发调试用,生产请勿使用)
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb-secrets
key: root-password
- name: MYSQL_DATABASE
valueFrom:
secretKeyRef:
name: mariadb-secrets
key: database-name
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: mariadb-secrets
key: db-user
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb-secrets
key: user-password
- name: TZ
value: Asia/Shanghai # 设置时区为上海
args:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci # 设置字符集与排序规则
🔧 关键说明:
- 通过
valueFrom.secretKeyRef引用了mariadb-secrets中的各项敏感信息。 - 设置了时区
TZ: Asia/Shanghai,保证数据库时间与日志友好。 - 指定了 UTF8MB4 字符集,支持完整的 Unicode(包括 Emoji)。
imagePullPolicy: Never表示仅使用本地镜像(仅用于开发测试,确保镜像已存在,生产环境请删除或改为IfNotPresent)。
3️⃣ 编写 Service:暴露 MariaDB 服务
文件名:mariadb-service.yml
🎯 用途:为 MariaDB 创建一个 Kubernetes Service,使其可被集群内其他组件访问;这里使用 NodePort 方式,也可选 ClusterIP 或 LoadBalancer。
apiVersion: v1
kind: Service
metadata:
name: mariadb-service
spec:
type: NodePort # 可选类型:ClusterIP(仅集群内)、NodePort、LoadBalancer(云平台)
selector:
app: mariadb
ports:
- protocol: TCP
port: 3306 # Service 暴露的端口
targetPort: 3306 # 容器内端口(MariaDB 默认端口)
nodePort: 30001 # 手动指定 NodePort(范围通常是 30000 ~ 32767)
🔍 说明:
type: NodePort:将 Service 暴露在每个节点的一个指定端口上(这里是30001),可通过节点 IP + 30001 访问。port: 3306:Service 自身的虚拟端口。targetPort: 3306:Pod 中容器实际监听的端口。- 如果你希望仅限集群内访问,可以将
type改为ClusterIP。
4️⃣ 执行部署命令
在终端中依次运行以下命令,部署所有资源:
kubectl apply -f mariadb-secret.yml
kubectl apply -f mariadb-deployment.yml
kubectl apply -f mariadb-service.yml
481

被折叠的 条评论
为什么被折叠?



