kubernetes配置管理中的secret

k8s的配置管理
Secret和ConfigMap

Secret的k8s官方文档:
https://kubernetes.io/zh/docs/concepts/configuration/secret/

  • Secret :加密数据并存放在Etcd中,让Pod容器以挂载Volume方式访问,Pod使用secret的两种方式:
    • 变量注入
    • 挂载

使用kubectl创建本地创建Secret

echo -n ‘admin‘ > ./username.txt
echo -n ‘1f2d1e2e67df‘ > ./password.txt

kubectl create secret 命令将这些文件打包到一个 Secret 中并在 API server 中创建了一个对象。

kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt

默认的键名是文件名。你也可以使用 [--from-file=[key=]source] 参数来设置键名。(我采用的这种方法详细说明)

kubectl create secret generic db-user-pass   --from-file=username=./username.txt   --from-file=password=./password.txt

查看secret的描述

[root@master1 secret]# kubectl get secrets
NAME                  TYPE                                  DATA   AGE
blog-ljy-com          kubernetes.io/tls                     2      2d
db-user-pass          Opaque                                2      97s
default-token-nsxx5   kubernetes.io/service-account-token   3      9d
[root@master1 secret]# kubectl describe secrets/db-user-pass
Name:         db-user-pass
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password:  12 bytes
username:  5 bytes
[root@master1 secret]# 

使用secret

Secret 可以作为数据卷被挂载,或作为环境变量 暴露出来以供 Pod 中的容器使用。它们也可以被系统的其他部分使用,而不直接暴露在 Pod 内;

  • 使用挂载卷的方法
    [root@master1 secret]# vim secret.yaml
    apiVersion: v1
    kind: Pod
    metadata:
    name: mypod
    spec:
    containers:
    - name: mypod
    image: redis
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
    volumes:
    - name: foo
    secret:
      secretName: db-user-pass
    [root@master1 secret]# kubectl apply -f secret.yaml
    pod/mypod created
    [root@master1 secret]# kubectl get pods
    NAME                               READY   STATUS    RESTARTS   AGE
    mypod                              1/1     Running   0          3s
    nginx-deployment-9cdc9bd5c-pzzst   1/1     Running   1          3d14h
    web-nginx-dep2-66ccfd7fb7-z2x84    1/1     Running   1          8d
    #查看mypod中挂载/etc/foo目录是否正常,并查看其内容
    [root@master1 secret]# kubectl exec -it mypod /bin/bash
    root@mypod:/# df -h
    Filesystem               Size  Used Avail Use% Mounted on
    overlay                   39G  5.9G   33G  16% /
    tmpfs                     64M     0   64M   0% /dev
    tmpfs                    910M     0  910M   0% /sys/fs/cgroup
    tmpfs                    910M  8.0K  910M   1% /etc/foo
    /dev/mapper/centos-root   39G  5.9G   33G  16% /etc/hosts
    shm                       64M     0   64M   0% /dev/shm
    tmpfs                    910M   12K  910M   1% /run/secrets/kubernetes.io/serviceaccount
    tmpfs                    910M     0  910M   0% /proc/acpi
    tmpfs                    910M     0  910M   0% /proc/scsi
    tmpfs                    910M     0  910M   0% /sys/firmware
    root@mypod:/# cat /etc/foo/username.txt 
    adminroot@mypod:/# cat /etc/foo/password.txt 
    1f2d1e2e67dfroot@mypod:/# 
  • 以环境变量的形式使用 Secrets
    一般情况下多个Pod用来引用同一个
    Secret
[root@master1 secret]# vim secret-env-pod.yaml
[root@master1 secret]# cat secret-env-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: mycontainer
    image: nginx:1.8
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: db-user-pass
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: db-user-pass
            key: password
  restartPolicy: Never
[root@master1 secret]# kubectl apply -f secret-env-pod.yaml
[root@master1 secret]# kubectl get pod
NAME                               READY   STATUS    RESTARTS   AGE
nginx-deployment-9cdc9bd5c-pzzst   1/1     Running   1          3d14h
secret-env-pod                     1/1     Running   0          13m
web-nginx-dep2-66ccfd7fb7-z2x84    1/1     Running   1          8d
#在一个以环境变量形式使用 Secret 的容器中,Secret 键表现为常规的环境变量,其中包含 Secret 数据的 base-64 解码值。这是从上面的示例在容器内执行的命令的结果:
[root@master1 secret]# kubectl exec -it secret-env-pod /bin/bash
root@secret-env-pod:/# echo $SECRET_USERNAME
admin
root@secret-env-pod:/# echo $SECRET_PASSWORD
1f2d1e2e67df

kubernetes配置管理中的secret

上一篇:Kubernetes 二进制部署


下一篇:http和https区别