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 \
--docker-email=12345678@qq.com
#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 \
--docker-email=xxxx@qq.com
步骤二:创建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的运行情况
相关推荐
Warren9815 分钟前
datagrip新建oracle连接教程
数据库·windows·云原生·oracle·容器·kubernetes·django
ascarl20101 小时前
准确--Kubernetes 修改 NodePort 端口范围操作文档
云原生·容器·kubernetes
何包蛋H1 小时前
Docker Maven 插件深度配置指南:Spotify vs Fabric8
docker·容器·maven
从零开始学习人工智能1 小时前
解决Docker容器无法访问宿主机IP和端口的全维度实践指南
tcp/ip·docker·容器
运维技术小记1 小时前
以Jellyfin为例,给群晖NAS容器里的应用升级
容器
隔壁阿布都2 小时前
Docker 安装 Redis
redis·docker·容器
少陽君2 小时前
Kubernetes Debug 专用镜像实践指南
云原生·容器·kubernetes
一过菜只因2 小时前
Docker入门
运维·docker·容器
weixin_46683 小时前
K8S-RBAC2
docker·容器·kubernetes
木风小助理4 小时前
云原生热点聚焦:OpenTofu 1.11.0 发布与关键工具更新
云原生