kubernetes Secret 使用方法,个人学习记录

kubernetes Secret

  • Secret 有三种类型:
    • Service Account(SA)
    • Opaque Secret
      • Ⅰ、创建说明
      • Ⅱ、使用方法
        • 1、将定义好的 Secret 挂载到 Volume 数据卷中
        • 2、将 Secret 导出到环境变量中
    • kubernetes.io/dockerconfigjson 私有仓库认证

secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Sepc 中。 Secret 可以以 Volume 或者环境变量的方式使用。


Secret 有三种类型:

  • Service Account:用来访问 Kubernetes API ,由 kubernetes 自动创建,并且会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录当中
  • Opaque:base64编码格式的 Secret,用来存储密码、密钥
  • kubernetes.io/dockerconfigjson:用来存储私有 docker registry 的认证信息


Service Account(SA)

进入一个容器:kubectl exec nginx-deployment-f5945d6fc-m57zl -it -- /bin/bash

进入该目录:/run/secrets/kubernetes.io/serviceaccount

存在三个认证文件:ca.crt namespace token

默认存在一个Account 的 secret :kubectl get secret

在这里插入图片描述

Opaque Secret

Ⅰ、创建说明

Opaque 类型的数据是一个 map 类型,要求 value 是 base64 编码格式:

[root@k8s-master ~]# echo "admin" | base64
YWRtaW4K
[root@k8s-master ~]# echo "123.com" | base64
MTIzLmNvbQo=

解密:echo -n "YWRtaW4K"  | base64 -d
admin

secret.yaml

apiVersion: v1
kind: Secret
metadata: 
  name: mysecret
type: Opaque
data: 
  password: MTIzLmNvbQo=
  username: YWRtaW4K

查看创建成功后的 secret

kubectl get secret kubectl describe secret mysecret


Ⅱ、使用方法

1、将定义好的 Secret 挂载到 Volume 数据卷中

apiVersion: v1	
kind: Secret			#定义一个Secret
metadata: 
  name: mysecret		#名字叫 mysecret
type: Opaque			#类型是 Opaque
data: 				#保存的数据
  password: MTIzLmNvbQo=	#密码:*
  username: YWRtaW4K		#用户名:*

#如果没有定义 Secret 将以上内容一并复制,如果提前定义好了则直接复制下面的内容
---
apiVersion: v1	
kind: Pod
metadata: 
  labels: 
    app: secret-test	
  name: secret-test
spec:		
  volumes: 				#准备一个数据卷	
     - name: secrets			#数据卷的名字
       secret: 				#数据卷内容从secret挂载
         secretName: mysecret		#指定secret的名字
  containers: 				#容器
     - name: nginx-secret		#容器名字
       image: nginx:1.9.1		#容器镜像
       imagePullPolicy: IfNotPresent	#镜像策略
       volumeMounts: 			#挂载数据卷
       	  - name: secrets		#挂载数据卷的名字
       	    mountPath: "/etc/secrets"	#挂载到容器的哪个路径下
       	    readOnly: true		#只读权限

查看数据卷共享效果

kubectl exec secret-test -it -- /bin/bash
root@secret-test:/# cd /etc/secrets
root@secret-test:/etc/secrets# ls
password  username


2、将 Secret 导出到环境变量中

通过 ENV 来定义变量名,为变量名赋予 secret 的键值对数据

apiVersion: apps/v1
kind: Deployment
metadata:
 name: pod-deployment
spec: 
  replicas: 2
    matchLabels:
      app: pod-deployment
  template: 
    metadata: 
      labels: 
        app: pod-deployment
    spec:
      containers: 
         - name: nginx-1
           image: nginx:1.9.1
           ports: 
             - containerPort: 80
           env: 
             - name: NGINX_USER
               valueFrom: 
                 secretKeyRef: 
                   name: mysecret 
                   key: username
             - name: NGINX_PASSWD
               valueFrom: 
                 secretKeyRef: 
                   name: mysecret
                   key: password
            

查看容器的 env 环境变量是否赋值

kubectl exec pod-deployment-77dcfb5bc7-g9z45 -it – env

kubernetes Secret 使用方法,个人学习记录_第1张图片

kubernetes.io/dockerconfigjson 私有仓库认证

使用 kubectl 创建 docker registry 认证的 secret ,如下固定格式单词,不能随意改变

#样板格式
$ kubectl create secret docker-registry myregistrykey \
--docker-server=DOCKER_REGISTRY_SERVER \
--docker-username=DOCKER_USER \
--docker-password=DOKCER_PASSWORD \
--docker-email=DOCKER_EMAIL


#根据自己的情况指定,docker-server可以是主机名
$ kubectl create secret docker-registry myregistrykey \
--docker-server=192.168.168.14 \
--docker-username=admin \
--docker-password=Harbor12345 \
--docker-email=[email protected]


#secret "myharborKey" created 成功

创建一个 Pod,主要 image 指定私有仓库,使用 myregistrykey 进行 harbor 权限认证

apiVersion: v1
kind: Pod
metadata: 
  name: nginx
spec: 
  containers: 
    - name: nginx
      image: 192.168.168.14/harbor/nginx:latest
  imagePullSecrets:
    - name: myregistrykey

在执行 Pod 的同时会通过 myregistrykey secret策略 对 Harbor 仓库进行认证
kubectl describe pod nginx
在这里插入图片描述

你可能感兴趣的:(kubernetes)