K8S之Secret&&ConfigMap理论+实操

文章目录

    • Secret
      • Secret介绍
      • 创建Secret的四种方式
      • 在Pod中使用Secret
    • ConfigMap
      • ConfigMap介绍
      • 创建ConfigMap的四种方式
      • 在Pod中使用ConfigMap

Secret

Secret介绍

  • 应用启动过程中可能需要一些敏感信息,比如访问数据库的用户名和密码甚至秘钥。讲这些内容直接保存到容器的镜像中显然是不可取的,这时候我们就需要Secret。
  • Secret是以密文的方式存储数据,避免了直接在配置文件中保存敏感信息。Secret会以Volume的形式被mount到Pod中,容器可以通过文件的方式使用Secret中的敏感数据,此外容器也可以环境变量的方式使用这些数据。
  • 加密数据并存放在Etcd中,让Pod的容器以挂载Volume方式访问

创建Secret的四种方式

  1. 通过–from-file方式创建:
 cd demo/
 echo -n "admin" > ./username.txt
 echo -n "123456" > ./password.txt
 kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
 kubectl get secret
 kubectl describe secret db-user-pass

K8S之Secret&&ConfigMap理论+实操_第1张图片

  1. 通过YAML文件方式创建:
#进行64位转码
echo -n 'admin' | base64
YWRtaW4=
echo -n '123456' | base64
MTIzNDU2
vim secret.yaml
kubectl create -f secret.yaml
kubectl get secret
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: MTIzNDU2

K8S之Secret&&ConfigMap理论+实操_第2张图片

#反编码
echo -n YWRtaW4= | base64 --decode
echo -n MTIzNDU2 | base --decode 

K8S之Secret&&ConfigMap理论+实操_第3张图片

  1. 通过–from-literal方式创建:
 kubectl create secret generic mysecret --from-literal=username==admin --from-literal=password=123456
  1. 通过–from-env-file方式创建:
#env.txt中,每行Key=Value对应一个信息条目
cat << EOF > env.txt
username=admin
password=123456
EOF
kubectl create secret generic mysecret --from-env-file=env.txt

在Pod中使用Secret

  1. 环境变量的方式
 vim secret-var.yaml
 kubectl apply -f secret-var.yaml
 kubectl get pods
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: password

K8S之Secret&&ConfigMap理论+实操_第4张图片

#进入Pod资源中查看
kubectl exec -it mypod bash
echo $SECRET_USERNAME
echo $SECRET_PASSWORD

K8S之Secret&&ConfigMap理论+实操_第5张图片

  1. Volume方式
#先删除原来的mypod
vim secret-vol.yaml
kubectl create -f secret-vol.yaml
kubectl get pods
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"  #挂载站点
      readOnly: true
  volumes:
  - name: foo
    secret:
      secretName: mysecret

K8S之Secret&&ConfigMap理论+实操_第6张图片

#进入容器查看
kubectl exec -it mypod bash
ls /etc/foo
cat /etc/foo/username 
cat /etc/foo/password

K8S之Secret&&ConfigMap理论+实操_第7张图片

  • 我们同样可以自定义挂载的数据名
    在secretName下面添加items(部分yaml)
secretName: mysecret
items:
- key: username
  path: /etc/foo/my-group/my-username
- key: password
  path: /etc/foo/my-group/my-password
  • 我们同样可以通过更新数据方式
    在metadata下面添加data(部分yaml)
metadata:
  name: mypod
data: 
  username: XXXXXX
  password: XXXXXX

ConfigMap

ConfigMap介绍

  • 与Secret类似,区别在于ConfigMap保存的是不需要加密配置的信息,configMap数据是以明文方式存储。
  • 应用场景:应用配置

创建ConfigMap的四种方式

  • 与Secret相同
  • 操作实例
vim redis.properties

redis.host=127.0.0.1
redis.port=6379
redis.password=123456

#创建资源
kubectl create configmap redis-config --from-file=redis.properties
#查看资源(缩写为cm)
kubectl get configmap
kubectl describe cm redis-config

在这里插入图片描述
K8S之Secret&&ConfigMap理论+实操_第8张图片

在Pod中使用ConfigMap

  1. Volume方式
#创建mypod资源查看文件导入
vim cm.yaml
kubectl create -f cm.yaml
kubectl get pods
#查看里面的配置信息
kubectl logs mypod
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: busybox
      image: busybox
      command: [ "/bin/sh","-c","cat /etc/config/redis.properties" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: redis-config
  restartPolicy: Never

K8S之Secret&&ConfigMap理论+实操_第9张图片

  1. 变量参数方式
    #创建configmap资源
    vim myconfig.yaml
    #创建
    kubectl apply -f myconfig.yaml
    kubectl get cm
apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfig
  namespace: default
data:
  special.level: info  #KV存储
  special.type: hello

K8S之Secret&&ConfigMap理论+实操_第10张图片

#创建mypod使用configmap资源输出变量参数
vim config-var.yaml
#创建mypod
kubectl apply -f config-var.yaml
#查看pod
kubectl get pods
#查看变量的输出
kubectl logs mypod
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: busybox
      image: busybox
      command: [ "/bin/sh", "-c", "echo $(LEVEL) $(TYPE)" ]
      env:
        - name: LEVEL
          valueFrom:
            configMapKeyRef:
              name: myconfig
              key: special.level
        - name: TYPE
          valueFrom:
            configMapKeyRef:
              name: myconfig
              key: special.type
  restartPolicy: Never

K8S之Secret&&ConfigMap理论+实操_第11张图片

你可能感兴趣的:(K8S)