備戰(zhàn)CKA每日一題——第9天 | secret類型机错、創(chuàng)建、Pod使用以及ServiceAccount關(guān)聯(lián)Secret父腕,網(wǎng)絡(luò)隔離考題引出

昨日考題

創(chuàng)建Secret名為cka1127-secret弱匪,內(nèi)含有password字段,值為cka1127璧亮,然后在名為cka1127-01的Pod1里使用ENV進行調(diào)用萧诫,名為cka1127-02的Pod2里使用Volume掛載在/data 下;
注意:提交評論:包含命令和yaml枝嘶,以及注意點帘饶。可分多次評論群扶。

昨日答案

創(chuàng)建secret方式一
cka1127-secret.yaml可以是以下這樣:

apiVersion: v1
kind: Secret
metadata:
  name: cka1127-secret
type: Opaque
stringData:
  cka1127-password: cka1127

創(chuàng)建

[root@liabio test]# kubectl apply -f  cka-1127-secret.yaml 
secret/cka1127-secret created

創(chuàng)建secret方式二

kubectl create secret generic cka1127-secret --from-literal=password=cka1127

名為cka1127-01的Pod yaml

apiVersion: v1
kind: Pod
metadata:
  name: cka1127-01
spec:
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    - name: pwd
      mountPath: /data/password
      readOnly: true
  volumes:
  - name: pwd
    secret:
      secretName: cka1127-secret

名為cka1127-02的Pod yaml

apiVersion: v1
kind: Pod
metadata:
  name: cka1127-02
spec:
  containers:
  - image: nginx
    name: nginx
    env:
    - name: PASSWORD
      valueFrom:
        secretKeyRef:
          name: cka1127-secret
          key: password

volume形式驗證及刻,保證/data/password/下有password文件镀裤,文件內(nèi)容為明文cka1127

[root@liabio ~]# kubectl exec -ti cka1127-01 sh
# 
# ls -l /data/password
total 0
lrwxrwxrwx 1 root root 15 Nov 28 00:40 password -> ..data/password
# cat /data/password/password
cka1127# 
# 

環(huán)境變量形式驗證,保證env能查到name為PASSWORD的環(huán)境變量缴饭;

[root@liabio test]# kubectl exec -ti cka1127-02  bash
root@cka1127-02:/# 
root@cka1127-02:/# echo $PASSWORD
cka1127
root@cka1127-02:/#

昨日解析

secret官方文檔:
https://kubernetes.io/docs/concepts/configuration/secret/

secret簡介

Kubernetes中的Secret資源可以用來存儲密碼暑劝、Token、秘鑰等敏感數(shù)據(jù)茴扁, 將這些敏感信息保存在Secret中铃岔,相對于暴露到Pod、鏡像中更加的安全和靈活峭火。

你可能會覺得毁习,secret一般不會用到,實際上在創(chuàng)建Pod時卖丸,Kubernetes會自動創(chuàng)建包含用于訪問API的憑據(jù)的secret(由kube-controller-managerservice account token controller控制)纺且,并且它會自動修改Pod以使用這種類型的secret(這個由Admission Controller來控制)。

k8s每個namespace都會有一個Service Account稍浆,當我們創(chuàng)建namespace時载碌,service account controller會監(jiān)聽namespace的創(chuàng)建,會在該namespace中創(chuàng)建一個名為default的Service Account衅枫,同時service account token controller會監(jiān)聽Service Account的創(chuàng)建嫁艇,創(chuàng)建對應(yīng)的secret,并將這個secret綁定到Service Account弦撩。

[root@liabio test]# kubectl create ns cka
namespace/cka created
[root@liabio test]# 
[root@liabio test]# kubectl get sa -n cka
NAME      SECRETS   AGE
default   1         11s
[root@liabio test]# kubectl get secrets -n cka
NAME                  TYPE                                  DATA   AGE
default-token-r77xn   kubernetes.io/service-account-token   3      18s
[root@liabio test]# 
在這里插入圖片描述

當我們創(chuàng)建Pod時步咪,如果未指定Service Account,則默認會在同一命令空間namespace中自動為其分配Service Account益楼。則可以看到該spec.serviceAccountName字段已被自動設(shè)置猾漫。


在這里插入圖片描述

您可以使用自動添加的Service Account憑據(jù)從Pod內(nèi)部訪問API,Service Account的API權(quán)限取決于所使用的授權(quán)插件和策略感凤。

有關(guān)Service Account如何工作的更多信息悯周,請參見文檔:
https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/

Secret的類型

--type指定創(chuàng)建的秘密類型,Kubernetes內(nèi)置了三種類型的Secret

kubernetes.io/service-account-token Secret

上面我們已經(jīng)講到陪竿,為了能從Pod內(nèi)部訪問Kubernetes API禽翼,Kubernetes提供了Service Account資源。 Service Account會自動創(chuàng)建和掛載訪問Kubernetes API的Secret族跛,會掛載到Pod的 /var/run/secrets/kubernetes.io/serviceaccount目錄中捐康。 namespace創(chuàng)建時自動創(chuàng)建的Service Account用到的Secret就是這種類型的。


在這里插入圖片描述
Opaque Secret

Opaque類型的Secret是一個map結(jié)構(gòu)(key-value)庸蔼,其中vlaue要求以base64格式編碼,以下示例中基本都為Opaque類型的Secret贮匕。

kubernetes.io/dockerconfigjson Secret

kubernetes.io/dockercfg類型的Secret用于存放私有Docker Registry的認證信息姐仅。 當Kubernetes在創(chuàng)建Pod并且需要從私有Docker Registry pull鏡像時,需要使用認證信息,就會用到kubernetes.io/dockercfg類型的Secret掏膏。

kubectl create secret docker-registry cka-regsecret \
--docker-server=coderaction \
--docker-username=admin \
--docker-password=123456 \
--docker-email=837448191@qq.com
在這里插入圖片描述

在創(chuàng)建Pod時需要在Pod的spec中按如下形式使用:

apiVersion: v1
kind: Pod
metadata:
  name: cka-private-reg
spec:
  containers:
    - name: cka-private-reg-container
      image: nginx
  imagePullSecrets:
    - name: cka-regsecret

可以參考官方文檔:
https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod

給分區(qū)默認的ServiceAccount添加imagePullSecrets劳翰,以至于創(chuàng)建的所有Pod可以自動添加spec.imagePullSecrets,詳情參考官方文檔:
https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#add-imagepullsecrets-to-a-service-account

secret創(chuàng)建

kubectl創(chuàng)建secret

kubectl創(chuàng)建seccret官方文檔:
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#-em-secret-em-

格式:

kubectl create secret generic NAME [--type=string] [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run]

--from-literal:指定要插入的鍵和文字值(即mykey = somevalue)馒疹,value為明文值佳簸,創(chuàng)建后會被base64編碼;
--from-file:可以使用密鑰文件的文件路徑指定密鑰文件颖变,在這種情況下生均,將為它們指定默認名稱;或者可以選擇使用指定目錄腥刹,這樣將迭代該目錄中的每個有效文件密鑰马胧。
--type:創(chuàng)建的秘密類型,上面已經(jīng)介紹過三種類型衔峰;
--dry-run:如果為true佩脊,則僅打印將要向APIServer發(fā)送創(chuàng)建的對象,而不發(fā)送它垫卤。默認false威彰;

使用--from-file創(chuàng)建

[root@liabio cka]# echo -n 'admin' > ./username
[root@liabio cka]# echo -n 'test123' > ./password
[root@liabio cka]# echo -n 'shanghai' > ./city
[root@liabio cka]# ll
total 12
-rw-r--r-- 1 root root 9 Nov 28 20:44 city
-rw-r--r-- 1 root root 8 Nov 28 20:43 password
-rw-r--r-- 1 root root 6 Nov 28 20:43 username
[root@liabio cka]# kubectl create secret generic test-cka1127-01 --from-file=./username --from-file=./password
secret/test-cka1127-01 created
[root@liabio cka]# kubectl create secret generic test-cka1127-02 --from-file=./
secret/test-cka1127-02 created
[root@liabio cka]# 

以指定目錄創(chuàng)建的secret,查看到目錄下所有文件都被加到data下:

kubectl get secrets test-cka1127-02 -oyaml
apiVersion: v1
data:
  city: c2hhbmdoYWkK
  password: dGVzdDEyMwo=
  username: YWRtaW4K
kind: Secret
metadata:
  creationTimestamp: "2019-11-28T12:44:57Z"
  name: test-cka1127-02
  namespace: default
  resourceVersion: "14636360"
  selfLink: /api/v1/namespaces/default/secrets/test-cka1127-02
  uid: 4a3a1a5d-09e6-4bf9-bbe3-3300db1ddf7a
type: Opaque

指定username和password創(chuàng)建的secret:

kubectl get secrets test-cka1127-01 -oyaml
apiVersion: v1
data:
  password: dGVzdDEyMwo=
  username: YWRtaW4K
kind: Secret
metadata:
  creationTimestamp: "2019-11-28T12:44:47Z"
  name: test-cka1127-01
  namespace: default
  resourceVersion: "14636347"
  selfLink: /api/v1/namespaces/default/secrets/test-cka1127-01
  uid: 766516a2-34be-4a18-b4e2-83751a6cd2b7
type: Opaque

默認情況下穴肘,kubectl describe 命令能避免顯示文件的內(nèi)容歇盼。這可以防止將 secret 中的內(nèi)容暴露給從終端日志記錄中刻意尋找它們的人。

特殊字符梢褐,例如$旺遮,\,*盈咳,和!需要逃逸耿眉。在大多數(shù)常見的shell中,最簡單的轉(zhuǎn)義密碼方法是用單引號(')引起來鱼响。例如鸣剪,如果您的實際密碼是S!B*d$zDsb,則應(yīng)以這種方式執(zhí)行命令:

kubectl create secret generic dev-db-secret
--from-literal=username=devuser --from-literal=password='S!B*d$zDsb' 您無需從文件(--from-file)中轉(zhuǎn)義密碼中的特殊字符丈积。

手動創(chuàng)建秘密

還可以先在文件中以json或yaml格式創(chuàng)建一個Secret筐骇,然后創(chuàng)建該對象。該secret包含兩種:data和是stringData是江滨。data字段用于存儲使用base64編碼的任意數(shù)據(jù)铛纬。提供stringData字段是為了方便起見,它允許提供未編碼的字符串唬滑。

例如告唆,要使用data將兩個字符串存儲在Secret中棺弊,請按如下所示將它們轉(zhuǎn)換為base64:

echo -n 'admin' | base64
YWRtaW4=
echo -n '1f2d1e2e67df' | base64
MWYyZDFlMmU2N2Rm

注意:在轉(zhuǎn)base64編碼時,一定記得加-n參數(shù)擒悬,否則可能會遇到坑模她。

然后創(chuàng)建以下yaml,最終kubectl apply

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

如果用以下yaml創(chuàng)建懂牧,注意到用了stringData侈净,user的值為coderaction明文。

apiVersion: v1
kind: Secret
metadata:
  name: cka1127-secret-02
type: Opaque
stringData:
  user: coderaction

執(zhí)行kubectl apply后查看:

apiVersion: v1
data:
  user: Y29kZXJhY3Rpb24=
kind: Secret
metadata:
  name: cka1127-secret-02
type: Opaque

Y29kZXJhY3Rpb24=解碼為coderaction

[root@liabio cka]# echo Y29kZXJhY3Rpb24= | base64 -d
coderaction

data和stringData的鍵必須由字母數(shù)字字符“-”僧凤,“ _”或“畜侦。”組成拼弃。

編碼注意:secret數(shù)據(jù)的序列化JSON和YAML值被編碼為base64字符串夏伊。換行符在這些字符串中無效,因此必須省略吻氧。base64在Darwin/macOS上使用該實用程序時溺忧,用戶應(yīng)避免使用該-b選項來分隔長行。相反盯孙,如果選項不可用鲁森,Linux用戶應(yīng)將選項添加-w 0到base64命令或管道中。base64 | tr -d '\n'-w

從生成器創(chuàng)建秘密

從1.14開始振惰,Kubectl支持使用Kustomize管理對象歌溉。使用此新功能,您還可以從生成器創(chuàng)建一個Secret骑晶,然后將其應(yīng)用于在Apiserver上創(chuàng)建對象痛垛。

使用Secret

將secret所有內(nèi)容掛載為Pod里的文件

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: mysecret

這樣Pod中的/etc/foo目錄下會生成mysecret中的所有映射文件。

將密鑰投影到特定路徑

我們還可以控制secret映射到卷中的路徑桶蛔。您可以使用.spec.volumes[].secret.items更改每個鍵的目標路徑:

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: mysecret
      items:
      - key: username
        path: my-group/my-username

這樣Pod中username存儲在/etc/foo/my-group/my-username文件而非/etc/foo/username匙头;而且沒有password的映射文件。

secret文件權(quán)限

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: nginx
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
  volumes:
  - name: foo
    secret:
      secretName: cka1127-secret
      defaultMode: 256

然后仔雷,Secret將被掛載到/etc/foo并且由Secret卷掛載創(chuàng)建的所有文件權(quán)限為0400蹂析;

請注意,JSON規(guī)范不支持八進制表示法碟婆,因此對于0400權(quán)限电抚,請使用值256。如果您使用yaml而不是json描述Pod竖共,則可以使用八進制表示法以更自然的方式指定權(quán)限蝙叛。

也可以像前面的示例一樣使用映射,并為不同的文件指定不同的權(quán)限公给,如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: mypod-1
spec:
  containers:
  - name: mypod
    image: nginx
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
  volumes:
  - name: foo
    secret:
      secretName: cka1127-secret-02
      items:
      - key: user
        path: my-group/my-username
        mode: 511

mode值511為十進制甥温,在這種情況下锻煌,生成的文件的/etc/foo/my-group/my-username許可權(quán)值為八進制0777。由于JSON的限制姻蚓,您必須以十進制表示法指定mode。

請注意匣沼,如果稍后閱讀此權(quán)限值狰挡,則可能會以十進制表示法顯示。

環(huán)境變量

Pod中通過環(huán)境變量引用Secret和題目答案一樣释涛,不做累述加叁;

以上事例來自于官方文檔。方便大家學習唇撬。

今日考題

部署三個deployment應(yīng)用(A,B,C),允許A訪問B應(yīng)用,但是不允許C訪問B應(yīng)用它匕。

  • Deployment的名稱為cka-1128-01,cka-1128-02窖认,cka-1128-03
  • Network Policy的名稱為cka-1128-np
    注意:將所用命令豫柬、創(chuàng)建的deployment以及network policy完整yaml、以及證明A可以訪問B應(yīng)用扑浸;C不允許訪問B應(yīng)用。可分多次評論寨闹。

作者簡介

作者:小碗湯氛谜,一位熱愛、認真寫作的小伙酝惧,目前維護原創(chuàng)公眾號:『我的小碗湯』榴鼎,專注于寫linux、golang晚唇、docker巫财、kubernetes等知識等提升硬實力的文章,期待你的關(guān)注缺亮。轉(zhuǎn)載說明:務(wù)必注明來源(注明:來源于公眾號:我的小碗湯翁涤, 作者:小碗湯)

作者簡潔

作者:小碗湯,一位熱愛萌踱、認真寫作的小伙葵礼,目前維護原創(chuàng)公眾號:『我的小碗湯』,專注于寫go語言并鸵、docker鸳粉、kubernetes、java等開發(fā)园担、運維知識等提升硬實力的文章届谈,期待你的關(guān)注枯夜。轉(zhuǎn)載說明:務(wù)必注明來源(注明:來源于公眾號:我的小碗湯,作者:小碗湯)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末艰山,一起剝皮案震驚了整個濱河市湖雹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌曙搬,老刑警劉巖摔吏,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纵装,居然都是意外死亡征讲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進店門橡娄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诗箍,“玉大人,你說我怎么就攤上這事挽唉÷俗妫” “怎么了?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵橱夭,是天一觀的道長氨距。 經(jīng)常有香客問我,道長棘劣,這世上最難降的妖魔是什么俏让? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮茬暇,結(jié)果婚禮上首昔,老公的妹妹穿的比我還像新娘。我一直安慰自己糙俗,他們只是感情好勒奇,可當我...
    茶點故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巧骚,像睡著了一般赊颠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上劈彪,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天竣蹦,我揣著相機與錄音,去河邊找鬼沧奴。 笑死痘括,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播纲菌,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼挠日,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了翰舌?” 一聲冷哼從身側(cè)響起嚣潜,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎灶芝,沒想到半個月后郑原,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡夜涕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了属愤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片女器。...
    茶點故事閱讀 38,777評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖住诸,靈堂內(nèi)的尸體忽然破棺而出驾胆,到底是詐尸還是另有隱情,我是刑警寧澤贱呐,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布丧诺,位于F島的核電站,受9級特大地震影響奄薇,放射性物質(zhì)發(fā)生泄漏驳阎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一馁蒂、第九天 我趴在偏房一處隱蔽的房頂上張望呵晚。 院中可真熱鬧,春花似錦沫屡、人聲如沸饵隙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽金矛。三九已至,卻和暖如春勺届,著一層夾襖步出監(jiān)牢的瞬間驶俊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工涮因, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留废睦,地道東北人。 一個月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓养泡,卻偏偏與公主長得像嗜湃,于是被迫代替她去往敵國和親奈应。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,687評論 2 351

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