6.k8s中的secrets资源

一、Secret

secrets资源,类似于configmap资源,只是secrets资源是用来传递重要的信息的;

secret资源就是将value的值使用base64编译后传输,当pod引用secret后,k8s会自动将其base64的编码,反编译回正常的字符串;

  1. Secret 用于保存机密数据的对象。一般由于保存密码、令牌或密钥等。
    • data字段用来存储 base64 编码数据。
    • stringData存储未编码的字符串。
  2. Secret 意味着你不需要在应用程序代码中包含机密数据,减少机密数据(如密码)泄露的风险。
  3. Secret 可以用作环境变量、命令行参数或者存储卷文件。

二、创建secrets资源

1.创建工作目录

[root@k8s1 k8s]# mkdir secrets

[root@k8s1 k8s]# cd secrets/

2.尝试使用base64进行编码

编码

[root@k8s1 secrets]# echo oslee | base64

b3NsZWUK

解码

[root@k8s1 secrets]# echo b3NsZWUK | base64 -d

oslee

3.声明式创建secrets资源

编辑secrets资源清单

vi 01-secret.yaml

bash 复制代码
apiVersion: v1
kind: Secret
metadata:
  name: s1

#用户自定义的类型(Opaque为自定义类型;generic为)
type: Opaque
data: 
  k8s: b3NsZWUK
  oslee: b3NsZWUK

创建secret资源

[root@k8s1 secrets]# kubectl apply -f 01-secret.yaml

secret/s1 created

查看

[root@k8s1 secrets]# kubectl get secrets

NAME TYPE DATA AGE

default-token-xwhzs kubernetes.io/service-account-token 3 23h

s1 Opaque 2 2m46s

[root@k8s1 secrets]# kubectl describe secret s1

Name: s1

Namespace: default

Labels: <none>

Annotations: <none>

Type: Opaque

Data

====

k8s: 6 bytes

oslee: 6 bytes

4.响应式创建secret

[root@k8s1 secrets]# kubectl create secret generic secret-02 --from-literal=school=os --from-literal=class=lee

  1. docker-registry:创建一个给Docker registry容器镜像仓库使用的secret
  2. generic: 从本地file, directory或者literal value创建一个 secret(这是大多数情况使用的)也就是资源清单中的type:Opaque是一个意思;
  3. tls: 创建一个TLS secret

三、pod引用secret资源

1.pod资源env环境变量引用

创建pod资源

[root@k8s1 secrets]# cat pod.yaml

bash 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: m13
spec:
  containers:
  - image: nginx:1.20.1-alpine
    name: nginx
    env: 
    - name: secret-env01
      valueFrom:
        #声明引用sercet
        secretKeyRef: 
          #声明secret名称
          name: s1
          #声明secret的key
          key: oslee
    - name: secret-env02
      valueFrom:
        secretKeyRef:
          name: secret-02
          key: class

创建资源

[root@k8s1 secrets]# kubectl apply -f pod.yaml

pod/m13 created

登录pod资源查看env变量

[root@k8s1 secrets]# kubectl exec m13 -it -- sh

/ # env

secret-env01=oslee

secret-env02=lee

2.pod资源volume存储卷引用secret资源

编辑资源清单

[root@k8s1 secrets]# vi pod-env-volume.yaml

bash 复制代码
#pod资源env环境变量方式引用secret
apiVersion: v1
kind: Pod
metadata:
  name: pod-secret-01
spec:
  containers:
  - name: c1
    image: nginx:1.20.1-alpine
    env:
    - name: k8s
      valueFrom:
        #声明引用secret资源
        secretKeyRef: 
          name: s1
          #声明使用secret资源中的那一个key
          key: k8s

---

#vomlume方式引用
apiVersion: v1
kind: Pod
metadata:
  name: pod-secret-02
spec: 
  #声明存储卷
  volumes:
  - name: vol-secret
    #声明存储卷的类型是secret
    secret:
      #指定secret资源的名称(使用哪个secret资源?)
      secretName: s1
  containers:
  - name: c2
    image: nginx:1.24.0-alpine
    volumeMounts:
    - name: vol-secret
      #挂载到容器的哪个位置路径
      mountPath: /secret/

创建资源

[root@k8s1 secrets]# kubectl apply -f pod-env-volume.yaml

pod/pod-secret-01 created

pod/pod-secret-02 created

查看挂载

[root@k8s1 secrets]# kubectl exec pod-secret-01 -it -- sh

[root@k8s1 secrets]# kubectl exec pod-secret-02 -it -- sh

3.pod资源清单指定key引用secret

[root@k8s1 secrets]# kubectl apply -f pod-path.yaml

pod/pod-secret-03 created

[root@k8s1 secrets]# cat pod-path.yaml

bash 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: pod-secret-03
spec: 
  #声明存储卷
  volumes:
  - name: vol-secret
    #声明存储卷的类型是secret
    secret:
      #1,指定secret资源的名称(使用哪个secret资源?)
      secretName: s1
      #2,指定secret资源中要引用的key
      items: 
      - key: k8s
        path: oslee.path
  containers:
  - name: c2
    image: nginx:1.24.0-alpine
    volumeMounts:
    - name: vol-secret
      #挂载到容器的哪个位置路径?
      mountPath: /secret/oslee.path
      #只挂在文件,不清空容器原有文件夹
      subPath: oslee.path

进入pod查看

[root@k8s1 secrets]# kubectl exec -it pod-secret-03 -- sh

四、secret类型之-私有镜像仓库使用

  1. docker-registry:创建一个给Docker registry容器镜像仓库使用的secret
  2. generic: 从本地file, directory或者literal value创建一个 secret(这是大多数情况使用的)也就是资源清单中的type:Opaque是一个意思;
  3. tls: 创建一个TLS secret
    创建Docker harbor的secret信息:

因为,k8s拉取镜像与Docker拉取镜像是不同的方式,所以k8s需要创建一个属于自己的拉取镜像的方式;

1.harbor创建私有仓库

2.推送镜像到私有仓库

[root@k8s2 ~]# docker login harbor.oslee.com

[root@k8s2 ~]# docker tag nginx:1.20.1-alpine harbor.oslee.com/oslee-private/nginx:1.20.1-alpine

[root@k8s2 ~]# docker push harbor.oslee.com/oslee-private/nginx:1.20.1-alpine

3.响应式创建拉取镜像的secret资源

[root@k8s1 ~]# kubectl create secret docker-registry oslee-harbor --docker-username=admin --docker-password=harbor123 --docker-email=oslee@qq.com --docker-server=harbor.oslee.com

secret/oslee-harbor created

4.创建pod引用拉取镜像的secret资源

bash 复制代码
[root@k8s1 secrets]# cat pod-harbor-secret.yaml
apiVersion: v1
kind: Pod
metadata:
  name: pod-harbor-01
spec:
  #指定镜像拉取的secret资源(secret的拉取镜像类型);
  imagePullSecrets:
  - name: oslee-harbor
  containers:
  - name: c3
    image: harbor.oslee.com/oslee-private/nginx:1.20.1-alpine

5.声明式创建docker registry类型的secret资源

5.1.【-o yaml】模仿系统声明式的写法

[root@k8s1 secrets]# kubectl get secrets oslee-harbor -oyaml

5.2.base64解码查看内容

[root@k8s1 secrets]# echo eyJhdXRocyI6eyJoYXJib3Iub3NsZWUuY29tIjp7InVzZXJuYW1lIjoiYWRtaW4iLCJwYXNzd29yZCI6ImhhcmJvcjEyMyIsImVtYWlsIjoib3NsZWVAcXEuY29tIiwiYXV0aCI6IllXUnRhVzQ2YUdGeVltOXlNVEl6In19fQ== | base64 -d

{"auths":{"harbor.oslee.com":{"username":"admin","password":"harbor123","email":"oslee@qq.com","auth":"YWRtaW46aGFyYm9yMTIz"}}}[root@k8s1 secrets]#
[root@k8s1 secrets]# echo YWRtaW46aGFyYm9yMTIz | base64 -d

admin:harbor123

5.3根据上述信息,自己编辑secret声明式资源清单

bash 复制代码
[root@k8s1 secrets]# cat harbor-secret.yaml 
apiVersion: v1
kind: Secret
metadata:
  name: oslee-harbor02
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: eyJhdXRocyI6eyJoYXJib3Iub3NsZWUuY29tIjp7InVzZXJuYW1lIjoiYWRtaW4iLCJwYXNzd29yZCI6ImhhcmJvcjEyMyIsImVtYWlsIjoib3NsZWVAcXEuY29tIiwiYXV0aCI6IllXUnRhVzQ2YUdGeVltOXlNVEl6In19fQ==

[root@k8s1 secrets]# kubectl apply -f harbor-secret.yaml

secret/oslee-harbor02 created
[root@k8s1 secrets]# cat pod-harbor-secret.yaml

apiVersion: v1

kind: Pod

metadata:

name: pod-harbor-01

spec:

#指定镜像拉取的secret资源(secret的拉取镜像类型);

imagePullSecrets:

  • name: oslee-harbor02

containers:

  • name: c3

image: harbor.oslee.com/oslee-private/nginx:1.20.1-alpine

[root@k8s1 secrets]# kubectl apply -f pod-harbor-secret.yaml

pod/pod-harbor-01 created

[root@k8s1 secrets]# kubectl get pod

NAME READY STATUS RESTARTS AGE

pod-harbor-01 1/1 Running 0 6s

相关推荐
小袁搬码2 小时前
Windows中指定路径安装DockerDesktop
windows·docker·容器·docker desktop
qq_312920113 小时前
docker 部署 kvm 图形化管理工具 WebVirtMgr
运维·docker·容器
踏雪Vernon3 小时前
[OpenHarmony5.0][Docker][环境]OpenHarmony5.0 Docker编译环境镜像下载以及使用方式
linux·docker·容器·harmonyos
条纹布鲁斯4 小时前
dockerdsktop修改安装路径/k8s部署wordpress和ubuntu
docker·kubernetes
CP-DD6 小时前
Docker 容器化开发 应用
运维·docker·容器
老司机张师傅6 小时前
【微服务实战之Docker容器】第七章-Dockerfile解析
容器·dockerfile·虚悬镜像·docker学习
登云时刻7 小时前
Kubernetes集群外连接redis集群和使用redis-shake工具迁移数据(一)
redis·kubernetes·bootstrap
运维&陈同学7 小时前
【zookeeper03】消息队列与微服务之zookeeper集群部署
linux·微服务·zookeeper·云原生·消息队列·云计算·java-zookeeper
吴半杯8 小时前
gateway漏洞(CVE-2022-22947)
docker·kubernetes·gateway
Code_Artist10 小时前
使用Portainer来管理并编排Docker容器
docker·云原生·容器