k8s 配置 Secret 集成Harbor

本篇主要 記錄一下 在 k8s 中如果想要 從 harbor拉取鏡像 該怎么操作,以及介紹了一下 k8s 中 Secret 是什么

image-20220418171224972

1.Secret 是什么

1.1 Secret 概述

Secret 是一種包含少量敏感信息例如密碼教硫、令牌或密鑰的對象歧匈。 這樣的信息可能會(huì)被放在 Pod 規(guī)約中或者鏡像中枢舶。 使用 Secret 意味著你不需要在應(yīng)用程序代碼中包含機(jī)密數(shù)據(jù)愈诚。

由于創(chuàng)建 Secret 可以獨(dú)立于使用它們的 Pod邮绿, 因此在創(chuàng)建烛谊、查看和編輯 Pod 的工作流程中暴露 Secret(及其數(shù)據(jù))的風(fēng)險(xiǎn)較小地沮。 Kubernetes 和在集群中運(yùn)行的應(yīng)用程序也可以對 Secret 采取額外的預(yù)防措施嗜浮, 例如避免將機(jī)密數(shù)據(jù)寫入非易失性存儲(chǔ)羡亩。

Secret 類似于 ConfigMap 但專門用于保存機(jī)密數(shù)據(jù)。

說白了就是用于保存 重要的密碼等信息

Pod 可以用三種方式之一來使用 Secret:

本篇主要說一下 在Pod拉取鏡像時(shí) 如何使用

1.2 Secret 的類型

創(chuàng)建 Secret 時(shí)专挪,你可以使用 Secret 資源的 type 字段及志,或者與其等價(jià)的 kubectl 命令行參數(shù)(如果有的話)為其設(shè)置類型。 Secret 類型有助于對 Secret 數(shù)據(jù)進(jìn)行編程處理寨腔。

Kubernetes 提供若干種內(nèi)置的類型速侈,用于一些常見的使用場景。 針對這些類型迫卢,Kubernetes 所執(zhí)行的合法性檢查操作以及對其所實(shí)施的限制各不相同倚搬。

內(nèi)置類型 用法
Opaque 用戶定義的任意數(shù)據(jù)
kubernetes.io/service-account-token 服務(wù)賬號令牌
kubernetes.io/dockercfg ~/.dockercfg 文件的序列化形式
kubernetes.io/dockerconfigjson ~/.docker/config.json 文件的序列化形式
kubernetes.io/basic-auth 用于基本身份認(rèn)證的憑據(jù)
kubernetes.io/ssh-auth 用于 SSH 身份認(rèn)證的憑據(jù)
kubernetes.io/tls 用于 TLS 客戶端或者服務(wù)器端的數(shù)據(jù)
bootstrap.kubernetes.io/token 啟動(dòng)引導(dǎo)令牌數(shù)據(jù)

本篇主要涉及 kubernetes.io/dockerconfigjson 用于Pod 拉取鏡像使用的 Secret

2.Docker pull 概述

我們都知道 docker pull 鏡像之前的時(shí)候 其實(shí)是需要 docker login 進(jìn)行登錄的,如下:

當(dāng)我去拉取harbor 的時(shí)候乾蛤,提示 沒有進(jìn)行認(rèn)證

image-20220418153326780

當(dāng)我們docker login 后 密碼就被加密存儲(chǔ)在 ~/.docker/config.json 中

image-20220418153302523

~/.docker/config.json 文件內(nèi)容如下:

{
  "auths":{
    "harbor.demo.com:5667":
           {
            "username":"admin",
            "password":"Harbor12345",
            "auth":"YWRtaW46SGFyYm9yMTIzNDU="
           }
       }
}

那我們思考每界,如果讓k8s 去拉取這個(gè) harbor 上的鏡像的時(shí)候,它肯定也要去認(rèn)證 家卖,讓我們來試一下吧 不認(rèn)證的情況

3.編寫部署 文件 (未配置Secret)

指定鏡像拉取地址是 harbor 眨层,鏡像還是 前面創(chuàng)建的springboot 簡單鏡像

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pull-harbor-web-demo
spec:
  selector:
    matchLabels:
      app: pull-harbor-web-demo
  template:
    metadata:
      labels:
        app: pull-harbor-web-demo
    spec:
      containers:
      - name: boot-demo
        image: harbor.demo.com:5667/k8s-project/boot-k8s-demo:v2 #指定從 harbor 拉取鏡像 
        ports:
        - containerPort: 8081

---

apiVersion: v1
kind: Service
metadata:
  name: pull-harbor-web-demo
spec:
  selector:
    app: pull-harbor-web-demo
  ports:
  - port: 8081
    name: boot-demo
    targetPort: 8081
  type: NodePort

4.部署服務(wù)(未認(rèn)證,失斏系础)

kubectl apply -f deploy-many-container_test.yaml

kubectl get pods #可以看到 pod 狀態(tài)是 ImagePullBackOff

kubectl describe pods name  | grep Failed #可以查看到具體信息
image-20220418162601713

可以看到趴樱,在沒有配置 secret 的時(shí)候 ,k8s 調(diào)度起pod 酪捡,因?yàn)槔〔坏綄?yīng)的鏡像

5.創(chuàng)建Secret

5.1 文件的方式 創(chuàng)建 Secret (kubernetes.io/dockerconfigjson)

你可以使用下面兩種 type 值之一來創(chuàng)建 Secret叁征,用以存放訪問 Docker 倉庫 來下載鏡像的憑據(jù)。

  • kubernetes.io/dockercfg 老舊類型 不展開說
  • kubernetes.io/dockerconfigjson

類型 kubernetes.io/dockerconfigjson 被設(shè)計(jì)用來保存 JSON 數(shù)據(jù)的序列化形式逛薇, 該 JSON 也遵從 ~/.docker/config.json 文件的格式規(guī)則捺疼,是 ~/.dockercfg 的新版本格式。使用此 Secret 類型時(shí)金刁,Secret 對象的 data 字段必須包含 .dockerconfigjson 鍵帅涂,其鍵值為 base64 編碼的字符串包含 ~/.docker/config.json 文件的內(nèi)容。

下面是一個(gè) kubernetes.io/dockercfg 類型 Secret 的示例:

apiVersion: v1
kind: Secret
metadata:
  name: secret-dockercfg
type: kubernetes.io/dockerconfigjson #指定類型 使用新版本的 
data:
  .dockerconfigjson: |
        "<base64 encoded ~/.docker/config.json file>"

5.2 命令的方式 創(chuàng)建 Secret (kubernetes.io/dockerconfigjson)

kubectl create secret docker-registry loginharbor \
  --docker-email=tiger@acme.example \ #可以不填寫
  --docker-username=admin \
  --docker-password=Harbor12345 \ 
  --docker-server=harbor.demo.com:5667 #harbor的 地址 要加端口的
  • kubectl create secret docker-registry 固定部分
  • loginharbor 自定義的 secret 的名稱
  • 指定 username password
  • 指定 鏡像倉庫地址
kubectl get secret loginharbor -o yaml #查看 自動(dòng)生成的 secret 文件信息
image-20220418164417951

tips:注意它不會(huì)在 master節(jié)點(diǎn)上保留 這個(gè) ~/.docker/config.json 尤蛮,而是把 secret 文件信息保存到 etcd 存儲(chǔ)里面,后續(xù)下發(fā)到對應(yīng)的pod 引用的 node 節(jié)點(diǎn)上

通過上面的描述 : .dockerconfigjson 其鍵值為 base64 編碼的字符串包含 ~/.docker/config.json 文件的內(nèi)容,那我們嘗試用 base64解密一下 看看內(nèi)容是什么

echo "eyJhdXRocyI6eyJoYXJib3IuZGVtby5jb206NTY2NyI6eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiJIYXJib3IxMjM0NSIsImF1dGgiOiJZV1J0YVc0NlNHRnlZbTl5TVRJek5EVT0ifX19" | base64 -d  #解密 base64 

可以看到 內(nèi)容就是

image-20220418165247181

6.修改部署 文件 (配置Secret)

6.1 Pod 配置 Secret

如果你嘗試從私有倉庫拉取容器鏡像斯议,你需要一種方式讓每個(gè)節(jié)點(diǎn)上的 kubelet 能夠完成與鏡像庫的身份認(rèn)證产捞。你可以配置 鏡像拉取 Secret 來實(shí)現(xiàn)這點(diǎn)。 Secret 是在 Pod 層面來配置的哼御。

Pod 的 imagePullSecrets 字段是一個(gè)對 Pod 所在的名字空間中的 Secret 的引用列表坯临。你可以使用 imagePullSecrets 來將鏡像倉庫訪問憑據(jù)傳遞給 kubelet焊唬。 kubelet 使用這個(gè)信息來替你的 Pod 拉取私有鏡像。

6.2 ServiceAccount 引用 Secret

你可以手動(dòng)創(chuàng)建 imagePullSecret看靠,并在一個(gè) ServiceAccount 中引用它赶促。 對使用該 ServiceAccount 創(chuàng)建的所有 Pod,或者默認(rèn)使用該 ServiceAccount 創(chuàng)建的 Pod 而言挟炬,其 imagePullSecrets 字段都會(huì)設(shè)置為該服務(wù)賬號鸥滨。 請

下面 簡單點(diǎn) 選擇第一種 方式,對上面的 部署文件進(jìn)行修改谤祖,添加 imagePullSecrets

6.3 修改部署文件 添加 imagePullSecrets

image-20220418170247136

7. 再次部署服務(wù)(認(rèn)證婿滓,成功)

kubectl delete -f deploy-many-container_test.yaml

kubectl apply -f deploy-many-container_test.yaml

kubectl describe pods  name  #查看 pods 詳情
image-20220418170416026
image-20220418170552369

8.測試訪問

隨便訪問集群的任何節(jié)點(diǎn),因?yàn)樯厦娴腟ervice type = NodePort

image-20220418170649065

總結(jié)

本篇主要介紹了k8s 中的 Secret 粥喜, 以及使用它的 kubernetes.io/dockerconfigjson 類型測試 集成Pod 拉取 Harbor鏡像倉庫 凸主,Secret 還是蠻簡單的 官網(wǎng)擼一遍 即可實(shí)操作

歡迎大家訪問 個(gè)人博客 Johnny小屋

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市额湘,隨后出現(xiàn)的幾起案子卿吐,更是在濱河造成了極大的恐慌,老刑警劉巖锋华,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗡官,死亡現(xiàn)場離奇詭異,居然都是意外死亡供置,警方通過查閱死者的電腦和手機(jī)谨湘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芥丧,“玉大人紧阔,你說我怎么就攤上這事⌒#” “怎么了擅耽?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長物遇。 經(jīng)常有香客問我乖仇,道長,這世上最難降的妖魔是什么询兴? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任乃沙,我火速辦了婚禮,結(jié)果婚禮上诗舰,老公的妹妹穿的比我還像新娘警儒。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布蜀铲。 她就那樣靜靜地躺著边琉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪记劝。 梳的紋絲不亂的頭發(fā)上变姨,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天,我揣著相機(jī)與錄音厌丑,去河邊找鬼定欧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蹄衷,可吹牛的內(nèi)容都是我干的忧额。 我是一名探鬼主播,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼愧口,長吁一口氣:“原來是場噩夢啊……” “哼睦番!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起耍属,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤托嚣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后厚骗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體示启,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年领舰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夫嗓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,777評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冲秽,死狀恐怖舍咖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锉桑,我是刑警寧澤排霉,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站民轴,受9級特大地震影響攻柠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜后裸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一瑰钮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧微驶,春花似錦飞涂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至容燕,卻和暖如春梁呈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蘸秘。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工官卡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人醋虏。 一個(gè)月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓寻咒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親颈嚼。 傳聞我的和親對象是個(gè)殘疾皇子毛秘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評論 2 351

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