Secrets应用

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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦子yumeko

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值