云原生

38-存储-Secret

2022-02-15  本文已影响0人  紫荆秋雪_文
k8s系统存储挂载原理.png

一、Secret特点

二、Secret

1、Secret 概览

Pod可以通过下面三种方式来使用 Secret

2、编写 Secret 配置文件注意点

3、Secret 类型 Secret-type类型.png

三、创建Secret,type为Opaque

1、不知如何书写secret yaml文件时,使用下面命令

kubectl explain secret

2、无需base64编码

apiVersion: v1
kind: Secret
metadata:
  name: secret-01
  namespace: raven
stringData:
  username1: admin
  password1: 123456
  username2: admin2
  password2: 123456-2
  username3: admin3
  password3: 123456-3

3、secret创建成功

image.png

4、检查 Secret

kubectl get secret secret-01 -n raven -oyaml

5、使用secret-01

apiVersion: apps/v1
kind: Deployment
metadata:
  name:  secret-deployment
  namespace: raven
  labels:
    app: secret-deployment
spec:
  selector:
    matchLabels:
      app: secret-use-pod
  replicas: 1
  template:
    metadata:
      labels:
        app:  secret-use-pod
    spec:
      containers:
      - name:  nginx
        image:  nginx
        ports:
          - containerPort:  80
        volumeMounts: 
          - name: "secret-01" # 必须要与volumes.name 相同
            mountPath: "/app" # 容器中挂载卷的位置
            readOnly: true
      volumes:
        - name: secret-01 # 卷名称
          secret:
            secretName: secret-01 # 创建的 Secret 名称

6、修改Secret后,Pod有感知

四、创建Secret,type为Opaque带base64编码

1、给“admin” base64编码

echo -n 'admin' | base64

结果: YWRtaW4=

2、创建需要base-64的Secret

apiVersion: v1
kind: Secret
metadata:
  name: secret-opaque-base64
  namespace: raven
type: Opaque
data:
  username1: YWRtaW4x
  password1: cHcxMTE=
  username2: YWRtaW4y
  password2: cHcyMjI=
  username3: YWRtaW4z
  password3: cHczMzM=

3、创建使用Secret的 Pod

apiVersion: apps/v1
kind: Deployment
metadata:
  name:  secret-deployment-base64
  namespace: raven
  labels:
    app: secret-deployment-base64
spec:
  selector:
    matchLabels:
      app: secret-use-pod-base64
  replicas: 1
  template:
    metadata:
      labels:
        app:  secret-use-pod-base64
    spec:
      containers:
      - name:  nginx
        image:  nginx
        ports:
          - containerPort:  80
        volumeMounts: 
          - name: app-base64 # 必须要与volumes.name 相同
            mountPath: "/app" # 容器中挂载卷的位置
            readOnly: true
      volumes:
        - name: app-base64 # 卷名称
          secret:
            secretName: secret-opaque-base64 # 创建的 Secret 名称

4、进入容器查看挂载卷 image.png

5、Pod 感知 Secret 修改

五、Secret 其他特性

1、将 Secret 键名映射到特定路径

使用 spec.volumes[].secret.items 字段修改每个键对应的目标路径

apiVersion: apps/v1
kind: Deployment
metadata:
  name:  secret-deployment-base64
  namespace: raven
  labels:
    app: secret-deployment-base64
spec:
  selector:
    matchLabels:
      app: secret-use-pod-base64
  replicas: 1
  template:
    metadata:
      labels:
        app:  secret-use-pod-base64
    spec:
      containers:
      - name:  nginx
        image:  nginx
        ports:
          - containerPort:  80
        volumeMounts: 
          - name: app-base64 # 必须要与volumes.name 相同
            mountPath: "/app" # 容器中挂载卷的位置
            readOnly: true
      volumes:
        - name: app-base64 # 卷名称
          secret:
            secretName: secret-opaque-base64 # 创建的 Secret 名称
            items:
              - key: username1
                path: items/un
/app/items/un

2、Secret 文件权限,目前无法修改

默认 Secret文件为只读.png

3、以环境变量的形式使用 Secrets

apiVersion: apps/v1
kind: Deployment
metadata:
  name:  secret-deployment-base64
  namespace: raven
  labels:
    app: secret-deployment-base64
spec:
  selector:
    matchLabels:
      app: secret-use-pod-base64
  replicas: 1
  template:
    metadata:
      labels:
        app:  secret-use-pod-base64
    spec:
      containers:
      - name:  nginx
        image:  nginx
        ports:
          - containerPort:  80
        volumeMounts: 
          - name: app-base64 # 必须要与volumes.name 相同
            mountPath: "/app" # 容器中挂载卷的位置
            readOnly: true
        env:
          - name: UN1
            valueFrom:
              secretKeyRef:
                name: secret-opaque-base64
                key: username1
      volumes:
        - name: app-base64 # 卷名称
          secret:
            secretName: secret-opaque-base64 # 创建的 Secret 名称
            items:
              - key: username1
                path: items/un
获取环境变量.png

4、Secret 更新之后对应的环境变量不会被更新

apiVersion: v1
kind: Secret
metadata:
  name: secret-opaque-base64
  namespace: raven
type: Opaque
data:
  username1: YWRtaW4xMTE=
  password1: cHcxMTE=
  username2: YWRtaW4y
  password2: cHcyMjI=
  username3: YWRtaW4z
  password3: cHczMzM=
上一篇 下一篇

猜你喜欢

热点阅读