kubernetes(k8s)secret使用

Secret

Secret用來保存敏感信息,例如密碼、OAuth 令牌和 ssh key等等尼啡,將這些信息放在Secret中比放在Pod的定義中或者docker鏡像中來說更加安全和靈活。

Secret有三種類型:
1、Opaque:base64 編碼格式的 Secret锦茁,用來存儲密碼、密鑰等叉存;但數(shù)據(jù)也可以通過base64 –decode解碼得到原始數(shù)據(jù)蜻势,所以加密性很弱。
2鹉胖、kubernetes.io/dockerconfigjson:用來存儲私有docker registry的認證信息握玛。
3够傍、kubernetes.io/service-account-token:用于被serviceaccount引用,serviceaccout 創(chuàng)建時Kubernetes會默認創(chuàng)建對應的secret挠铲。Pod如果使用了serviceaccount冕屯,對應的secret會自動掛載到Pod目錄/run/secrets/kubernetes.io/serviceaccount中。

Opaque Secret

Opaque 類型的數(shù)據(jù)是一個 map 類型拂苹,要求value是base64編碼格式安聘,比如我們來創(chuàng)建一個用戶名為 admin,密碼為 admin321 的 Secret 對象瓢棒,首先需要把這用戶名和密碼做 base64 編碼浴韭,

$ echo -n "admin" | base64
YWRtaW4=
$ echo -n "admin321" | base64
YWRtaW4zMjE=

然后可以利用上面編碼過后的數(shù)據(jù)來編寫一個YAML文件:(secret-demo.yaml)

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
  password: YWRtaW4zMjE=

然后同樣使用kubectl命令來創(chuàng)建:

$ kubectl create -f secret-demo.yaml
secret "mysecret" created

利用get secret命令查看:

$ kubectl get secret
NAME                  TYPE                                  DATA      AGE
default-token-n9w2d   kubernetes.io/service-account-token   3         33d
mysecret              Opaque 

其中default-token-n9w2d為創(chuàng)建集群時默認創(chuàng)建的 secret,被serviceacount/default 引用脯宿。

使用describe命令念颈,查看詳情:

$ kubectl describe secret mysecret
Name:         mysecret
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
password:  8 bytes
username:  5 bytes

我們可以看到利用describe命令查看到的Data沒有直接顯示出來,如果想看到Data里面的詳細信息连霉,同樣我們可以輸出成YAML文件進行查看:

$ kubectl get secret mysecret -o yaml
apiVersion: v1
data:
  password: YWRtaW4zMjE=
  username: YWRtaW4=
kind: Secret
metadata:
  creationTimestamp: 2018-06-19T15:27:06Z
  name: mysecret
  namespace: default
  resourceVersion: "3694084"
  selfLink: /api/v1/namespaces/default/secrets/mysecret
  uid: 39c139f5-73d5-11e8-a101-525400db4df7
type: Opaque

創(chuàng)建好Secret對象后榴芳,有兩種方式來使用它:
1、以環(huán)境變量的形式
2跺撼、以Volume的形式掛載

環(huán)境變量

首先我們來測試下環(huán)境變量的方式窟感,同樣的,我們來使用一個簡單的busybox鏡像來測試下:(secret1-pod.yaml)

apiVersion: v1
kind: Pod
metadata:
  name: secret1-pod
spec:
  containers:
  - name: secret1
    image: busybox
    command: [ "/bin/sh", "-c", "env" ]
    env:
    - name: USERNAME
      valueFrom:
        secretKeyRef:
          name: mysecret
          key: username
    - name: PASSWORD
      valueFrom:
        secretKeyRef:
          name: mysecret
          key: password

創(chuàng)建上面的Pod:

$ kubectl create -f secret1-pod.yaml
pod "secret1-pod" created

然后我們查看Pod的日志輸出:

$ kubectl logs secret1-pod
...
USERNAME=admin
PASSWORD=admin321
...

可以看到有 USERNAME 和 PASSWORD 兩個環(huán)境變量輸出出來歉井。需要注意的是柿祈,環(huán)境變量的方式,不支持動態(tài)更新密碼哩至。

Volume 掛載

同樣的我們用一個Pod來驗證下Volume掛載谍夭,創(chuàng)建一個Pod文件:(secret2-pod.yaml)

apiVersion: v1
kind: Pod
metadata:
  name: secret2-pod
spec:
  containers:
  - name: secret2
    image: busybox
    command: ["/bin/sh", "-c", "ls /etc/secrets"]
    volumeMounts:
    - name: secrets
      mountPath: /etc/secrets
  volumes:
  - name: secrets
    secret:
      secretName: mysecret

創(chuàng)建Pod:

$ kubectl create -f secret-pod2.yaml
pod "secret2-pod" created

然后我們查看輸出日志:

$ kubectl logs secret2-pod
password
username

可以看到secret把兩個key掛載成了兩個對應的文件。

kubernetes.io/dockerconfigjson

除了上面的Opaque這種類型外憨募,我們還可以來創(chuàng)建用戶docker registry認證的Secret紧索,直接使用kubectl create命令創(chuàng)建即可,如下:

$ kubectl create secret docker-registry myregistry --docker-server=10.8.13.85 --docker-username=admin --docker-password=Harbor123 --docker-email=qienda@chinanews.com.cn
secret "myregistry" created

然后查看Secret列表:

$ kubectl get secret
NAME                  TYPE                                  DATA      AGE
default-token-n9w2d   kubernetes.io/service-account-token   3         33d
myregistry            kubernetes.io/dockerconfigjson        1         15s
mysecret              Opaque                                2         34m

注意看上面的TYPE類型菜谣,myregistry是不是對應的kubernetes.io/dockerconfigjson珠漂,同樣的可以使用describe命令來查看詳細信息:

$ kubectl describe secret myregistry
Name:         myregistry
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  kubernetes.io/dockerconfigjson

Data
====
.dockerconfigjson:  152 bytes

同樣的可以看到Data區(qū)域沒有直接展示出來,如果想查看的話可以使用-o yaml來輸出展示出來:

$ kubectl get secret myregistry -o yaml
apiVersion: v1
data:
  .dockerconfigjson: eyJhdXRocyI6eyJET0NLRVJfU0VSVkVSIjp7InVzZXJuYW1lIjoiRE9DS0VSX1VTRVIiLCJwYXNzd29yZCI6IkRPQ0tFUl9QQVNTV09SRCIsImVtYWlsIjoiRE9DS0VSX0VNQUlMIiwiYXV0aCI6IlJFOURTMFZTWDFWVFJWSTZSRTlEUzBWU1gxQkJVMU5YVDFKRSJ9fX0=
kind: Secret
metadata:
  creationTimestamp: 2018-06-19T16:01:05Z
  name: myregistry
  namespace: default
  resourceVersion: "3696966"
  selfLink: /api/v1/namespaces/default/secrets/myregistry
  uid: f91db707-73d9-11e8-a101-525400db4df7
type: kubernetes.io/dockerconfigjson

可以把上面的data.dockerconfigjson下面的數(shù)據(jù)做一個base64解碼尾膊,看看里面的數(shù)據(jù)是怎樣的呢媳危?

$ echo eyJhdXRocyI6eyJET0NLRVJfU0VSVkVSIjp7InVzZXJuYW1lIjoiRE9DS0VSX1VTRVIiLCJwYXNzd29yZCI6IkRPQ0tFUl9QQVNTV09SRCIsImVtYWlsIjoiRE9DS0VSX0VNQUlMIiwiYXV0aCI6IlJFOURTMFZTWDFWVFJWSTZSRTlEUzBWU1gxQkJVMU5YVDFKRSJ9fX0= | base64 -d
{"auths":{"10.8.13.85":{"username":"admin","password":"Harbor123","email":"qienda@chinanews.com.cn","auth":"RE9DS0VSX1VTRVI6RE9DS0VSX1BBU1NXT1JE"}}}

如果我們需要拉取私有倉庫中的docker鏡像的話就需要使用到上面的myregistry這個Secret:

apiVersion: v1
kind: Pod
metadata:
  name: foo
spec:
  containers:
  - name: foo
    image: 10.8.13.85/test:v1
  imagePullSecrets:
  - name: myregistry

我們需要拉取私有倉庫鏡像10.8.13.85/test:v1,我們就需要針對該私有倉庫來創(chuàng)建一個如上的Secret冈敛,然后在Pod的 YAML 文件中指定imagePullSecrets待笑。

kubernetes.io/service-account-token

另外一種Secret類型就是kubernetes.io/service-account-token,用于被serviceaccount引用抓谴。serviceaccout 創(chuàng)建時 Kubernetes 會默認創(chuàng)建對應的 secret暮蹂。Pod 如果使用了 serviceaccount寞缝,對應的secret會自動掛載到Pod的/run/secrets/kubernetes.io/serviceaccount目錄中。

這里我們使用一個nginx鏡像來驗證一下仰泻,大家想一想為什么不是呀busybox鏡像來驗證荆陆?當然也是可以的,但是我們就不能在command里面來驗證了集侯,因為token是需要Pod運行起來過后才會被掛載上去的被啼,直接在command命令中去查看肯定是還沒有 token 文件的。

$ kubectl run secret-pod3 --image nginx:1.7.9
deployment.apps "secret-pod3" created
$ kubectl get pods
NAME                           READY     STATUS    RESTARTS   AGE
...
secret-pod3-78c8c76db8-7zmqm   1/1       Running   0          13s
...
$ kubectl exec secret-pod3-78c8c76db8-7zmqm ls /run/secrets/kubernetes.io/serviceaccount
ca.crt
namespace
token
$ kubectl exec secret-pod3-78c8c76db8-7zmqm cat /run/secrets/kubernetes.io/serviceaccount/token
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG9rZW4tbjl3MmQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjMzY2FkOWQxLTU5MmYtMTFlOC1hMTAxLTUyNTQwMGRiNGRmNyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.0FpzPD8WO_fwnMjwpGIOphdVu4K9wUINwpXpBOJAQ-Tawd0RTbAUHcgYy3sEHSk9uvgnl1FJRQpbQN3yVR_DWSIlAtbmd4dIPxK4O7ZVdd4UnmC467cNXEBqL1sDWLfS5f03d7D1dw1ljFJ_pJw2P65Fjd13reKJvvTQnpu5U0SDcfxj675-Z3z-iOO3XSalZmkFIw2MfYMzf_WpxW0yMFCVkUZ8tBSTegA9-NJZededceA_VCOdKcUjDPrDo-CNti3wZqax5WPw95Ou8RJDMAIS5EcVym7M2_zjGiqHEL3VTvcwXbdFKxsNX-1VW6nr_KKuMGKOyx-5vgxebl71QQ

Secret 與 ConfigMap 對比

最后我們來對比下Secret和ConfigMap這兩種資源對象的異同點:

相同點:

key/value的形式
屬于某個特定的namespace
可以導出到環(huán)境變量
可以通過目錄/文件形式掛載
通過 volume 掛載的配置信息均可熱更新

不同點:

Secret 可以被 ServerAccount 關聯(lián)
Secret 可以存儲 docker register 的鑒權信息棠枉,用在 ImagePullSecret 參數(shù)中浓体,用于拉取私有倉庫的鏡像
Secret 支持 Base64 加密
Secret 分為 kubernetes.io/service-account-token、kubernetes.io/dockerconfigjson辈讶、Opaque 三種類型命浴,而 Configmap 不區(qū)分類型

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市荞估,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌稚新,老刑警劉巖勘伺,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異褂删,居然都是意外死亡飞醉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門屯阀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缅帘,“玉大人,你說我怎么就攤上這事难衰∏瘴蓿” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵盖袭,是天一觀的道長失暂。 經(jīng)常有香客問我,道長鳄虱,這世上最難降的妖魔是什么弟塞? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮拙已,結果婚禮上决记,老公的妹妹穿的比我還像新娘。我一直安慰自己倍踪,他們只是感情好系宫,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布索昂。 她就那樣靜靜地躺著,像睡著了一般笙瑟。 火紅的嫁衣襯著肌膚如雪楼镐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天往枷,我揣著相機與錄音框产,去河邊找鬼。 笑死错洁,一個胖子當著我的面吹牛秉宿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播屯碴,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼描睦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了导而?” 一聲冷哼從身側響起忱叭,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎今艺,沒想到半個月后韵丑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡虚缎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年撵彻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片实牡。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡陌僵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出创坞,到底是詐尸還是另有隱情碗短,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布题涨,位于F島的核電站豪椿,受9級特大地震影響,放射性物質發(fā)生泄漏携栋。R本人自食惡果不足惜搭盾,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望婉支。 院中可真熱鬧鸯隅,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至跟畅,卻和暖如春咽筋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背徊件。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工奸攻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人虱痕。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓睹耐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親部翘。 傳聞我的和親對象是個殘疾皇子硝训,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 1. Secret類型 Secret有三種類型: Opaque:使用base64編碼存儲信息,可以通過base64...
    沉淪2014閱讀 8,758評論 1 3
  • 學習本節(jié)內(nèi)容前新思,希望你已經(jīng)對以下內(nèi)容有所了解:Kubernetes對象之ConfigMap Secret對象與Co...
    伊凡的一天閱讀 16,551評論 4 9
  • 1窖梁、基礎架構 1.1 Master Master節(jié)點上面主要由四個模塊組成:APIServer、scheduler...
    阿斯蒂芬2閱讀 10,866評論 0 44
  • 很多人都拜過佛菩薩夹囚,拜過神纵刘,但很少有人跪拜過家里的活佛——自己的父母,今年新春佳節(jié)將至崔兴,在此發(fā)起“叩拜父母...
    印華_6427閱讀 260評論 0 0
  • 譯文及生詞短語整理:朗讀者小組 Translation Jane Eyre 《簡愛》 By Charlotte B...
    公子鴿兒閱讀 1,327評論 0 0