# 官方提供@yunTaoScripts 密码管理 🔥🔥

loading

# Secret

# 创建secret

  • 一、参数键值对
kubectl create secret generic mysecret1 --from-literal=user=tony --from-literal=password=123 mysql-secret
  • 二、文件中取值
echo -n tom > user
echo -n redhat > password1
echo -n redhat > password2
kubectl create secret generic mysecret2 --from-file=./user --from-file=./password1 --from-file=./password2
  • 三、文件中取键值
cat > env.txt <<EOF
user=tom 
password1=redhat 
password2=redhat
EOF
kubectl create secret generic mysecret3 --from-env-file=env.txt
kubectl get secret mysecret3 -o yaml

Secret有三种类型:

  1. Opaque:base64编码格式的Secret:
  • 用来存储密码、密钥等;但 数据也通过base64 –decode解码得到原始数据,所有加密性很弱。
  1. kubernetes.io/dockerconfigjson:
  • 用来存储私有docker registry的认证信息。
  1. kubernetes.io/service-account-token:
  • 用于被serviceaccount引用。 serviceaccout创建时Kubernetes会默认创建对应的secret。Pod如果 使用了serviceaccount,对应的secret会自动挂载到Pod目录 /run/secrets/ kubernetes.io/serviceaccount中。

# POD引用secret

  • 通过卷的方式挂载

注意:

  • 如果这里subPath如果不写的话,则/data/issue就是一个目录,该场景一般用于挂载新目录,会覆盖原来的目录
  • subPath一般用于文件挂挂载,内容和mountPath的basename保持一致,该场景一般用于替换文件,不会覆盖原来的目录
  • 只写mountPath 就会在目录下创建链接文件,文件名就是secret的data的键。
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: app
  name: app
spec:
  volumes:
  - name: xyt
    secret:
      secretName: mysecret3
  containers:
  - image: nginx
    name: app
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: xyt
      mountPath: '/data/issue'
      readOnly: true
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
  • 通过变量的方式使用
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: marapp
  name: marapp
spec:
  containers:
  - image: mariadb
    name: marapp
    imagePullPolicy: IfNotPresent
    env:
    - name: MARIADB_ROOT_PASSWORD
      valueFrom:
        secretKeyRef:
          name: mysql-secret
          key: password
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

# configMap

# 创建configMap

kubectl create configmap my1 --from-literal=user=tom --from- literal=password=redhat
echo -n tom > user
echo -n redhat > password1
kubectl create configmap my2 --from-file=./user --from-file=./password1
cat env.txt user=tom password=redhat
kubectl create configmap my3 --from-env-file=./env.txt

# POD引用configMap

  • 通过卷的方式挂载

注意:

  • 如果这里subPath如果不写的话,则/data就是一个目录,该场景一般用于挂载新目录,会覆盖原来的目录
  • subPath一般用于文件挂挂载,内容和mountPath的basename保持一致,该场景一般用于替换文件,不会覆盖原来的目录
  • 只写mountPath 就会在目录下创建链接文件,文件名就是secret的data的键。
  • 不写subPath会在/data/目录下创建链接文件,而非原文件

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: app
  name: app
spec:
  volumes:
  - name: xyt
    configMap:
      name: my5
  containers:
  - image: nginx
    name: app
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: xyt
      mountPath: '/data/'
      readOnly: true
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
  • 增加subPath则会在目录创建原文件,而非链接文件(但是__文件名称要和configMap的键保持一致,否则创建的是文件夹__)。
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: app
  name: app
spec:
  volumes:
  - name: xyt
    configMap:
      name: my5
  containers:
  - image: nginx
    name: app
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: xyt
      mountPath: '/data/tongweb.xml'
      subPath: tongweb.xml
    - name: xyt
      mountPath: '/data/tongweb2.xml'
      subPath: tongweb2.xml
      readOnly: true
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
  • 通过环境变量引用
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: marapp
  name: marapp
spec:
  containers:
  - image: mariadb
    name: marapp
    imagePullPolicy: IfNotPresent
    env:
    - name: MARIADB_ROOT_PASSWORD
      valueFrom:
        configMapKeyRef:
          name: my1
          key: password
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}
最后修改时间: 12/31/2022, 12:00:03 PM