kubernetes-----配置管理

一.Secret(加密處理)

  • Secret字段的意義是加密數據並且存入etcd中,讓Pod的容器以掛載volume方式訪問。
  • 使用Secret字段可以存儲和管理敏感信息。例如,密碼、令牌和ssh密鑰等。相比於將這些信息存儲在普通文件中,在機密信息中存儲更加安全,靈活。
  • 設置Secret加密處理時,可以通過kubectl命令創建,也可以通過yaml文件創建
  • 以下時Secret應用解析圖

  • 方式一:使用文件傳入參數,並且通過kubectl創建資源
[root@master ~]# echo 'admin' > ./username.txt
[root@master ~]# echo '123abc' > ./password.txt
//secret表示控制器類型,generic爲從本地文件或者目錄創建一個機密
[root@master ~]#  kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
secret/db-user-pass created
//查看secret類型下的資源
[root@master ~]# kubectl get secret
NAME                  TYPE                                  DATA   AGE
db-user-pass          Opaque                                2      13s
default-token-h4tl7   kubernetes.io/service-account-token   3      26d
//查看db-user-pass的詳細信息
[root@master ~]# kubectl describe secret db-user-pass
Name:         db-user-pass
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password.txt:  7 bytes        ##可見在secret模式下,不能明文顯示導入的參數
username.txt:  6 bytes
[root@master ~]# 

  • 方式二:使用加密數據導入資源,並且通過編輯yaml文件創建資源
##將數據加密,並且存儲到加密資源中去
[root@master ~]# echo -n 'admin' | base64
YWRtaW4=
[root@master ~]# echo -n '123abc' | base64
MTIzYWJj
[root@master ~]# cat secret.yaml 
apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: MTIzYWJj
[root@master ~]# kubectl create -f secret.yaml 
secret/mysecret created
[root@master ~]# kubectl get secret
NAME                  TYPE                                  DATA   AGE
db-user-pass          Opaque                                2      68m
default-token-h4tl7   kubernetes.io/service-account-token   3      26d
mysecret              Opaque                                2      9s
[root@master ~]# kubectl get secret mysecret -o yaml
apiVersion: v1
data:
  password: MTIzYWJj
  username: YWRtaW4=
kind: Secret
metadata:
  creationTimestamp: 2020-05-24T07:45:35Z
  name: mysecret
  namespace: default
  resourceVersion: "439706"
  selfLink: /api/v1/namespaces/default/secrets/mysecret
  uid: 8d7e5069-9d92-11ea-bb1a-000c29ce5f24
type: Opaque
[root@master ~]# 
  • 創建pod資源使用加密變量

//創建pod資源,調用mysecret裏面的參數
[root@master demo]# cat secret-var.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx
    env:
      - name: SECRET_USERNAME	#定義變量
        valueFrom:
          secretKeyRef:	#secret資源
            name: mysecret		#secret資源的名字,名字要正確
            key: username		#指定username賦值給變量SECRET_USERNAME
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: password
[root@master demo]# kubectl create -f secret-var.yaml 
pod/mypod created
[root@master demo]# kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
mypod   1/1     Running   0          12s
##進入mypod資源,查看具體變量
[root@master demo]# kubectl exec -it mypod bash
root@mypod:/# echo $SECRET_USERNAME
admin
root@mypod:/# echo $SECRET_PASSWORD
123abc
root@mypod:/# 
  • 使用volume數據卷的形式,將secret存儲的參數掛載到pod資源目錄下,具體操作如下所示:

##爲避免重名pod資源,刪除之前pod的資源
[root@master demo]# kubectl delete -f secret-var.yaml 
pod "mypod" deleted

[root@master demo]# cat secret-val.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:    ##使用容器卷字段,掛載
    - name: foo    ##定義pod中的容器的掛載名
      mountPath: "/etc/foo"    ##定義掛載目錄
      readOnly: true    ##定義權限
  volumes:
  - name: foo
    secret:		##定義secret資源
      secretName: mysecret		##掛載mysecret資源

##創建新的資源
[root@master demo]# kubectl create -f secret-val.yaml 
pod/mypod created
[root@master demo]# kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
mypod   1/1     Running   0          11s
[root@master demo]# kubectl exec -it mypod bash
root@mypod:/# ls /etc/foo
password  username
root@mypod:/# cat /etc/foo/password 
123abc
root@mypod:/# 

二.ConfigMap(應用配置)

  • ConfigMap控制器和Secret類似,區別在於ConfigMap保存的式不需要加密配置的信息
  • ConfigMap主要用於應用配置。實例解析圖如下:

使用ConfigMap字段存儲一些比如IP地址,端口號等,應用於微服務的鬆耦合之間

  • 使用參數文件創建configmap資源傳入參數,並且在yaml中使用掛載的方式創建mypod資源使用configmap參數
##刪除mypod資源避免後面重名
[root@master demo]# kubectl delete -f secret-val.yaml 
pod "mypod" deleted
##創建參數文件
[root@master demo]# cat redis.properties
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
##創建configmap資源,名字爲redis-config,參數來自文件redis.properties
[root@master demo]# kubectl create configmap redis-config --from-file=redis.properties
configmap/redis-config created
##查看configmap資源
[root@master demo]#  kubectl get configmap
NAME           DATA   AGE
redis-config   1      11s
##查看詳細信息
[root@master demo]# kubectl describe configmap redis-config
Name:         redis-config
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
redis.properties:        ##可以看到configmap資源參數時是明文顯示的
----
redis.host=127.0.0.1
redis.port=6379
redis.password=123456

Events:  <none>
##創建pod的yaml文件
[root@master demo]# cat cm.yaml
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    ##重啓策略,完成操作之後不重啓
[root@master demo]# kubectl create -f cm.yaml 
pod/mypod created
[root@master demo]# kubectl get pods
NAME    READY   STATUS              RESTARTS   AGE
mypod   0/1     ContainerCreating   0          14s
[root@master demo]# kubectl get pods -w    ##實時查看pod的狀態
NAME    READY   STATUS              RESTARTS   AGE
mypod   0/1     ContainerCreating   0          19s
mypod   0/1   Completed   0     22s
^C[root@master demo]# kubectl logs mypod    ##查看pod操作的日誌
redis.host=127.0.0.1
redis.port=6379
redis.password=123456
[root@master demo]# 
  • 使用參數變量創建configmap資源,在利用變量創建pod資源使用configmap中的變量

##前面清楚相應資源,避免重名
#創建myconfig類的資源
[root@master demo]# cat myconfig.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfig
  namespace: default
data:
  special.level: info    ##定義變量
  special.type: hello
[root@master demo]# kubectl create -f myconfig.yaml 
configmap/myconfig created
[root@master demo]# kubectl get configmap
NAME       DATA   AGE
myconfig   2      21s

#創建pod資源使用configmap資源的變量
[root@master demo]# cat config-var.yaml
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
   
[root@master demo]# kubectl apply -f config-var.yaml 
pod/mypod created
[root@master demo]# kubectl get pods -w
NAME    READY   STATUS              RESTARTS   AGE
mypod   0/1     ContainerCreating   0          11s
mypod   0/1   Completed   0     17s

#查看mypod資源的日誌輸出
[root@master demo]# kubectl logs mypod
info hello
[root@master demo]# 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章