Kubernetes-12:Secret介紹及演示

Secret介紹html

 

Secret存在的意義docker

  Secret解決了密碼、token、密鑰等敏感數據的配置問題,而不須要把這些敏感數據暴露到鏡像或者Pod Spec中,能夠以Volume或者環境變量的方式使用json

 

Secret有三種類型vim

   Service Account:用來訪問Kubernetes API,由Kubernetes自動建立,而且會自動掛載到Pod的/run/secrets/kubernetes.io/serviceaccount目錄中api

   Opaque:base64編碼格式的Secret,用來存儲密碼、祕鑰等app

   kubernetes.io/dockerconfigjson:用來存儲私有 docker registry的認證信息ui

 

Service Account編碼

只要與Kubernetes API有交互的Pod,都會自動擁有此種類型的Secret,例如kube-system名稱空間下的Pod加密

### 隨便進入kube-system下的Pod內查看是否有此類型
[root@Centos8 ~]# kubectl exec -it kube-proxy-76x2c -n kube-system -- /bin/sh
# cd /run/secrets/kubernetes.io/serviceaccount
# ls
ca.crt    namespace  token

### 能夠看到,其中保存了crt、token等文件

 

Opaquespa

此種加密類型爲base64,其特色就是將明文改成了密文,可是解密也很是簡單,由於同一串字符串加密後的密文永遠是相同的

## 加密
[root@Centos8 ~]# echo -n admin | base64
YWRtaW4=
[root@Centos8 ~]# echo -n vfan123 | base64
dmZhbjEyMw==

## 解密
[root@Centos8 ~]# echo -n dmZhbjEyMw== | base64 -d
vfan123
[root@Centos8 ~]# echo -n YWRtaW4= | base64 -d
admin

 

建立一個Opaque類型的Secret

vim secrets.yaml
...
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  password: dmZhbjEyMw==
  username: YWRtaW4=
...
kubectl create -f secrets.yaml

 

將此secret掛載到Pod中

[root@Centos8 secret]# vim s-volume.yaml
...
apiVersion: v1
kind: Pod
metadata:
  name: s-volume
  labels:
    type: opaque
spec:
  volumes:
  - name: secrets
    secret:
      secretName: mysecret
  containers:
  - name: db
    image: hub.vfancloud.com/test/myapp:v1
    imagePullPolicy: IfNotPresent
    volumeMounts:
    - name: secrets
      mountPath: /etc/secrets
      readOnly: true
...
[root@Centos8 secret]# kubectl create -f secrets.yaml 
secret/mysecret created

## 進入container
[root@Centos8 secret]# kubectl exec -it s-volume -- /bin/sh
/etc/secrets # ls
password  username
/etc/secrets # cat password
vfan123
/etc/secrets # cat username 
admin

### secret加密後的用戶名和密碼,傳輸到container中已經是明文

 

將此secret定義到Pod的環境變量中

vim s-env.yaml
...
apiVersion: v1
kind: Pod
metadata:
  name: s-env
  labels:
    type: opaque
spec:
  containers:
  - name: pod-1
    image: hub.vfancloud.com/test/myapp:v1
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
    env:
    - name: DB_USER
      valueFrom:
        secretKeyRef:
          name: mysecret
          key: username
    - name: DB_PASSWD
      valueFrom:
        secretKeyRef:
          name: mysecret
          key: password
...
kubectl create -f s-env.yaml

## 查看環境變量
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=s-env
TERM=xterm
DB_USER=admin
DB_PASSWD=vfan123

 

kubernetes.io/dockerconfigjson

  保存docker倉庫認證信息

  打開咱們以前搭建的Harbor鏡像倉庫,設置一個私有倉庫(若無搭建私有倉庫能夠參考本人其餘隨筆:http://www.javashuo.com/article/p-gkarkjqc-mv.html)

  建立Pod,使Pod導入私有倉庫的鏡像文件hub.vfancloud.com/test/myapp:v2

vim s-configjson.yaml
...
apiVersion: v1
kind: Pod
metadata:
  name: s-configjson
spec:
  containers:
  - name: configjson
    image: hub.vfancloud.com/test/myapp:v2
...

[root@Centos8 secret]# kubectl create -f s-configjson.yaml 
pod/s-configjson created

### 鏡像導入失敗,是由於私有倉庫中的鏡像必須登陸後纔可導入
[root@Centos8 secret]# kubectl get pod 
NAME           READY   STATUS         RESTARTS   AGE
s-configjson   0/1     ErrImagePull   0          22s

### 詳細信息中的報錯信息
Failed to pull image "hub.vfancloud.com/test/myapp:v2": rpc error: code = Unknown desc = Error response from daemon: pull access denied for hub.vfancloud.com/test/myapp, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

 

設置dockerconfigjson類型secret

## 建立secret
[root@Centos8 secret]# kubectl create secret docker-registry myregistrykey --docker-server=hub.vfancloud.com --docker-username=admin --docker-password=Harbor12345 --docker-email=vfan8991
secret/myregistrykey created

## 在資源清單中添加配置
[root@Centos8 secret]# vim s-configjson.yaml 
...
apiVersion: v1
kind: Pod
metadata:
  name: s-configjson
spec:
  containers:
  - name: configjson
    image: hub.vfancloud.com/test/myapp:v2
  imagePullSecrets:
  - name: myregistrykey
...
[root@Centos8 secret]# kubectl create -f s-configjson.yaml 
pod/s-configjson created

## 查看,導入成功
[root@Centos8 secret]# kubectl get pod 
NAME           READY   STATUS    RESTARTS   AGE
s-configjson   1/1     Running   0          5s
相關文章
相關標籤/搜索