k8s基础(7)—Kubernetes-Secret

Secret概述:

Secret 是一种包含少量敏感信息例如密码、令牌或密钥的对象。 这样的信息可能会被放在 Pod 规约中或者镜像中。 使用 Secret 意味着你不需要在应用程序代码中包含机密数据。

由于创建 Secret 可以独立于使用它们的 Pod, 因此在创建、查看和编辑 Pod 的工作流程中暴露 Secret(及其数据)的风险较小。 Kubernetes 和在集群中运行的应用程序也可以对 Secret 采取额外的预防措施, 例如避免将敏感数据写入非易失性存储。

Secret 类似于 ConfigMap 但专门用于保存机密数据。

资料来自官网:Secret | Kubernetes

(一)实验准备

1、创建阿里云私有仓库

1.1、创建私有仓库mysql
1.2、验证私有仓库是否可用

往创建的私有仓库中推镜像

bash 复制代码
#打标签
docker tag mysql:5.7 registry.cn-hangzhou.aliyuncs.com/yangbin-docker/mysql:5.7
#推镜像
docker push  registry.cn-hangzhou.aliyuncs.com/yangbin-docker/mysql:5.7
1.3、退出之前的登录确保环境整洁
bash 复制代码
 #退出登录
 docker logout master01:5000
 
 #拉取镜像
 docker pull master01:5000/test/kube-webhook-certgen:v2023
 
 报错:
 #Error response from daemon: unauthorized: unauthorized to access repository: test/kube-webhook-certgen, action: pull: unauthorized to access repository: test/kube-webhook-certgen, action: pull

(二)创建Secret并验证

1、使用命令行创建Sercret

bash 复制代码
#格式如下
kubectl create secret docker-registry yb-docker \
--docker-server=registry.cn-hangzhou.aliyuncs.com \
--docker-username=admin \
--docker-password=123456 \
[email protected]
#yaml配置如下

#查看secret的内容
kubectl get secret yb-docker -oyaml

yaml格式如下

bash 复制代码
apiVersion: v1
data:
  .dockerconfigjson: eyJhdXRocyI6eyJodHRwczovL2luZGV4LmRvY2tlci5pby92MS8iOnsidXNlcm5hbWUiOiJhZG1pbiIsInBhc3N3b3JkIjoicHBwIiwiYXV0aCI6IllXUnRhVzQ2Y0hCdyJ9fX0=
kind: Secret
metadata:
  name: secret-docker
  namespace: default
type: kubernetes.io/dockerconfigjson

注意:虽然加密了,但是还是可以用解码工具对secret的内容进行解密

2、创建Pod拉取私有仓库镜像时应用Secret中的数据

采用secret方式保存敏感信息时,在部署或者需要安全验证时都会从secret中取数据。

例如:从私有仓库拉取数据时每台机器上都可以取secret中配置的验证信息,而正常的docker的部署方式是先在应用机器上执行docker login xxx 然后才能拉取镜像。

2.1、从阿里云私有仓库拉取nginx镜像并部署

步骤一:创建secret
bash 复制代码
创建secret
kubectl create secret docker-registry yangbin-docker \
--docker-server=registry.cn-hangzhou.aliyuncs.com \
--docker-username=xxx \
--docker-password=xxx \
[email protected]
步骤二:创建pod
bash 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: nginx-secret
spec:
  containers:
    - name: nginx
      image: registry.cn-hangzhou.aliyuncs.com/yangbin-docker/nginx:latest
  imagePullSecrets:
  - name: yangbin-docker

2.2、从阿里云私有仓库拉取mysql的镜像并部署

步骤一:创建PV和PVC
步骤二:创建pod
bash 复制代码
#创建PV
apiVersion: v1
kind: PersistentVolume
metadata:
  name: p01-50m
spec:
  capacity:
    storage: 50M
  accessModes:
    - ReadWriteOnce
  storageClassName: nfs
  nfs:
    path: /opt/nfs/data/pv01
    server: 192.168.72.130
#创建PVC
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-pvc10mi
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Mi
  storageClassName: nfs
  #创建pod
  ---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-master
spec:
  replicas: 2
  selector:
    matchLabels:
      app: mysql-master
  template:
    metadata:
      labels:
        app: mysql-master
    spec:
      containers:
      - name: mysql
        image: registry.cn-hangzhou.aliyuncs.com/yangbin-docker/mysql:5.7
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "ppp"
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
      volumes:
        - name: mysql-data
          persistentVolumeClaim:
            claimName: nginx-pvc8gi
      imagePullSecrets:
      - name: yangbin-docker
步骤三:验证mysql的运行情况
相关推荐
你是我的天晴1 小时前
k8s教程4:Kubernetes中的服务发现与负载均衡
kubernetes·服务发现·负载均衡
Java后端何哥1 小时前
Docker Compose 和 Kubernetes(k8s)区别
docker·容器·kubernetes
周周的奇妙编程1 小时前
解决方案评测|告别复杂配置!基于阿里云云原生应用开发平台CAP快速部署Bolt.diy
阿里云·云原生·云计算
problc2 小时前
探索 Higress:下一代云原生 API 网关
云原生
yuzhangfeng2 小时前
【日志体系】ELK Stack与云原生日志服务
elk·云原生·云计算
别致的影分身2 小时前
Docker Image(镜像)
运维·docker·容器
kevin_cheng3 小时前
ByConity x CubeFS: 万亿级OLAP平台云原生构建方案
云原生
moxiaoran57533 小时前
Kubernetes(k8s)学习笔记(二)--k8s 集群安装
笔记·学习·kubernetes
NPE~4 小时前
[渗透测试]渗透测试靶场docker搭建 — —全集
网络安全·docker·容器·渗透测试·渗透靶场
阿里云云原生4 小时前
从零开始开发 MCP Server
云原生