新聞中心
從私有倉(cāng)庫(kù)拉取鏡像
本文介紹如何使用 Secret 從私有的鏡像倉(cāng)庫(kù)或代碼倉(cāng)庫(kù)拉取鏡像來(lái)創(chuàng)建 Pod。 有很多私有鏡像倉(cāng)庫(kù)正在使用中。這個(gè)任務(wù)使用的鏡像倉(cāng)庫(kù)是 Docker Hub

創(chuàng)新互聯(lián)建站專注于瑯琊企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城系統(tǒng)網(wǎng)站開發(fā)。瑯琊網(wǎng)站建設(shè)公司,為瑯琊等地區(qū)提供建站服務(wù)。全流程按需定制制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
在開始之前
- 你必須擁有一個(gè) Kubernetes 的集群,同時(shí)你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個(gè)節(jié)點(diǎn)的集群上運(yùn)行本教程,且這些節(jié)點(diǎn)不作為控制平面主機(jī)。 如果你還沒有集群,你可以通過 Minikube 構(gòu)建一個(gè)你自己的集群,或者你可以使用下面任意一個(gè) Kubernetes 工具構(gòu)建:
- Katacoda
- 玩轉(zhuǎn) Kubernetes
- 要進(jìn)行此練習(xí),你需要 ?
docker?命令行工具和一個(gè)知道密碼的 Docker ID。 - 如果你要使用不同的私有的鏡像倉(cāng)庫(kù),你需要有對(duì)應(yīng)鏡像倉(cāng)庫(kù)的命令行工具和登錄信息。
登錄 Docker 鏡像倉(cāng)庫(kù)
在個(gè)人電腦上,要想拉取私有鏡像必須在鏡像倉(cāng)庫(kù)上進(jìn)行身份驗(yàn)證。
docker login
當(dāng)出現(xiàn)提示時(shí),輸入你的 Docker ID 和登錄憑證(訪問令牌、 或 Docker ID 的密碼)。
登錄過程會(huì)創(chuàng)建或更新保存有授權(quán)令牌的 ?config.json? 文件。
查看 ?config.json? 文件:
cat ~/.docker/config.json
輸出結(jié)果包含類似于以下內(nèi)容的部分:
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "c3R...zE2"
}
}
}Note: 如果使用 Docker 憑證倉(cāng)庫(kù),則不會(huì)看到 ?
auth?條目,看到的將是以倉(cāng)庫(kù)名稱作為值的 ?credsStore?條目。
創(chuàng)建一個(gè)基于現(xiàn)有憑證的 Secret
Kubernetes 集群使用 ?kubernetes.io/dockerconfigjson? 類型的 Secret 來(lái)通過鏡像倉(cāng)庫(kù)的身份驗(yàn)證,進(jìn)而提取私有鏡像。
如果你已經(jīng)運(yùn)行了 ?docker login? 命令,你可以復(fù)制該鏡像倉(cāng)庫(kù)的憑證到 Kubernetes:
kubectl create secret generic regcred \
--from-file=.dockerconfigjson= \
--type=kubernetes.io/dockerconfigjson 如果你需要更多的設(shè)置(例如,為新 Secret 設(shè)置名字空間或標(biāo)簽), 則可以在存儲(chǔ) Secret 之前對(duì)它進(jìn)行自定義。 請(qǐng)務(wù)必:
- 將 data 項(xiàng)中的名稱設(shè)置為 ?
.dockerconfigjson? - 使用 base64 編碼方法對(duì) Docker 配置文件進(jìn)行編碼,然后粘貼該字符串的內(nèi)容,作為字段 ?
data[".dockerconfigjson"]? 的值 - 將 ?
type?設(shè)置為 ?kubernetes.io/dockerconfigjson?
示例:
apiVersion: v1
kind: Secret
metadata:
name: myregistrykey
namespace: awesomeapps
data:
.dockerconfigjson: UmVhbGx5IHJlYWxseSByZWVlZWVlZWVlZWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGx5eXl5eXl5eXl5eXl5eXl5eXl5eSBsbGxsbGxsbGxsbGxsbG9vb29vb29vb29vb29vb29vb29vb29vb29vb25ubm5ubm5ubm5ubm5ubm5ubm5ubm5ubmdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2cgYXV0aCBrZXlzCg==
type: kubernetes.io/dockerconfigjson如果你收到錯(cuò)誤消息:?error: no objects passed to create?, 這可能意味著 base64 編碼的字符串是無(wú)效的。 如果你收到類似 ?Secret "myregistrykey" is invalid: data[.dockerconfigjson]: invalid value ...? 的錯(cuò)誤消息,則表示數(shù)據(jù)中的 base64 編碼字符串已成功解碼,但無(wú)法解析為 ?.docker/config.json? 文件。
在命令行上提供憑證來(lái)創(chuàng)建 Secret
創(chuàng)建 Secret,命名為 ?regcred?:
kubectl create secret docker-registry regcred \
--docker-server=<你的鏡像倉(cāng)庫(kù)服務(wù)器> \
--docker-username=<你的用戶名> \
--docker-password=<你的密碼> \
--docker-email=<你的郵箱地址>在這里:
- ?
? 是你的私有 Docker 倉(cāng)庫(kù)全限定域名(FQDN)。 DockerHub 使用 ?https://index.docker.io/v1/?。 - ?
?是你的 Docker 用戶名。 - ?
?是你的 Docker 密碼。 - ?
? 是你的 Docker 郵箱。
這樣你就成功地將集群中的 Docker 憑證設(shè)置為名為 ?regcred ?的 Secret。
Note: 在命令行上鍵入 Secret 可能會(huì)將它們存儲(chǔ)在你的 shell 歷史記錄中而不受保護(hù), 并且這些 Secret 信息也可能在 ?
kubectl?運(yùn)行期間對(duì)你 PC 上的其他用戶可見。
檢查 Secret regcred
要了解你創(chuàng)建的 ?regcred ?Secret 的內(nèi)容,可以用 YAML 格式進(jìn)行查看:
kubectl get secret regcred --output=yaml
輸出和下面類似:
apiVersion: v1
data:
.dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=
kind: Secret
metadata:
...
name: regcred
...
type: kubernetes.io/dockerconfigjson?.dockerconfigjson? 字段的值是 Docker 憑證的 base64 表示。
要了解 ?dockerconfigjson ?字段中的內(nèi)容,請(qǐng)將 Secret 數(shù)據(jù)轉(zhuǎn)換為可讀格式:
kubectl get secret regcred --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode
輸出和下面類似:
{"auths":{"yourprivateregistry.com":{"username":"janedoe","password":"xxxxxxxxxxx","email":"jdoe@example.com","auth":"c3R...zE2"}}}
要了解 ?auth ?字段中的內(nèi)容,請(qǐng)將 base64 編碼過的數(shù)據(jù)轉(zhuǎn)換為可讀格式:
echo "c3R...zE2" | base64 --decode
輸出結(jié)果中,用戶名和密碼用 ?:? 鏈接,類似下面這樣:
janedoe:xxxxxxxxxxx
注意,Secret 數(shù)據(jù)包含與本地 ?~/.docker/config.json? 文件類似的授權(quán)令牌。
這樣你就已經(jīng)成功地將 Docker 憑證設(shè)置為集群中的名為 ?regcred ?的 Secret。
創(chuàng)建一個(gè)使用你的 Secret 的 Pod
下面是一個(gè) Pod 配置清單示例,該示例中 Pod 需要訪問你的 Docker 憑證 ?regcred?:
apiVersion: v1
kind: Pod
metadata:
name: private-reg
spec:
containers:
- name: private-reg-container
image:
imagePullSecrets:
- name: regcred
將上述文件下載到你的計(jì)算機(jī)中:
curl -L -O my-private-reg-pod.yaml https://K8S.io/examples/pods/private-reg-pod.yaml
在?my-private-reg-pod.yaml? 文件中,使用私有倉(cāng)庫(kù)的鏡像路徑替換 ??,例如:
janedoe/jdoe-private:v1
要從私有倉(cāng)庫(kù)拉取鏡像,Kubernetes 需要憑證。 配置文件中的 ?imagePullSecrets ?字段表明 Kubernetes 應(yīng)該通過名為 ?regcred ?的 Secret 獲取憑證。
創(chuàng)建使用了你的 Secret 的 Pod,并檢查它是否正常運(yùn)行:
kubectl apply -f my-private-reg-pod.yaml
kubectl get pod private-reg 網(wǎng)頁(yè)名稱:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes從私有倉(cāng)庫(kù)拉取鏡像
標(biāo)題網(wǎng)址:http://www.dlmjj.cn/article/djgoioh.html


咨詢
建站咨詢
