k8s無腦系列-創(chuàng)建私有倉庫(一)
1. 意義
與CI/CD聯(lián)動
私有庫屬于公司/組織最重要的線上財產(chǎn)必須得到保護
2. 需要解決的問題
先提出問題,為什么需要Secret骂租?
密碼扔茅、令牌不能被隨意公布贤斜。存到集群里洁仗,讓需要的Pod或者其它資源(rc,pod等)可以拿到必須的令牌內(nèi)容等等脾还。甚至MySQL之類的密碼都可以存儲到Secret中肥印。這里不做更多的討論识椰。僅限于用在私有倉庫中這種情景。
2.1 k8s的Pod使用私有倉庫時需要認證過程
比如使用阿里云私有倉庫(啰嗦一句深碱,自己搭建的一樣腹鹉,阿里的現(xiàn)成可用)牍鞠,雖然Docker可以通過設(shè)置/etc/daemon.json實現(xiàn)Pull的過程陋气,<font color=red>但k8s在不通的Node去創(chuàng)建Pod就不行了</font>寥粹。Emm标捺,其實也不是不行,總不能給所有Node同步$HOME/.docker/config.json吧恬总。另外不同的namespace為了安全不能用一個賬戶來操作私有倉庫凡资,<font color=red>所以分namespace的認證過程是必須的籍胯。</font>
我們先用阿里云這個現(xiàn)成的私有倉庫舉例子幽七,來觀察整個過程景殷。
使用私有倉庫鏡像時必須先登錄
$docker login --username=xxxx@aliyun.com registry.cn-hangzhou.aliyuncs.com
在$HOME/.docker/config.json可以看到
{
"auths": {
"registry.cn-beijing.aliyuncs.com": {
"auth": "NzU0NDg5NTUxQHFxLmNvbTptb3dwaWgtd2lwbnlqLWt1bWtVNg=="
}
}
}
$docker pull registry.cn-beijing.aliyuncs.com/smokelee/redis # 私有庫
2.2 首先要創(chuàng)建k8s的Secret
<font color=red>假設(shè)現(xiàn)在已經(jīng)有“私有倉庫”比如:阿里云</font>
-
命令行創(chuàng)建
$kubectl create secret docker-registry registry-secret-aliyun --docker-server=registry.cn-beijing.aliyuncs.com --docker-username=xxxxxxx@qq.com --docker-password=xxxxxxx
參數(shù)說明:以下參數(shù)都可以通過執(zhí)行下述命令得到說明
$kubectl create secret docker-registry
- docker-registry 該參數(shù)有三個值docker-registry、generic、tls
- registry-secret-aliyun Secret的名稱猿挚,什么名字都可以咐旧,隨意
- --docker-server 倉庫地址
- --docker-username 倉庫賬戶名稱
- --docker-password 倉庫密碼
驗證
$kubectl describe secret registry-secret-aliyun Name: registry-secret-aliyun Namespace: default Labels: <none> Annotations: <none> Type: kubernetes.io/dockerconfigjson Data ==== .dockerconfigjson: 113 bytes
-
yaml文件創(chuàng)建
事實上,docker-registry類型的不能通過這種方式創(chuàng)建绩蜻,這個yaml是用命令反向推出來的铣墨。就是演示。
$kubectl get secret registry-secret-aliyun -o yaml apiVersion: v1 type: kubernetes.io/dockerconfigjson kind: Secret metadata: name: registry-secret-aliyun namespace: default data: .dockerconfigjson: eyJhxxxxxx.......x19
2.3 資源文件使用Secret
apiVersion: v1
kind: ReplicationController
metadata:
name: redis-ali
spec:
replicas: 1
selector:
app: redis-pod-ali
template:
metadata:
labels:
app: redis-pod-ali
spec:
containers:
- name: redis-ali
image: registry.cn-beijing.aliyuncs.com/smokelee/redis # 私有鏡像
ports:
- containerPort: 6379
imagePullSecrets:
- name: registry-secret-aliyun # 名字要與創(chuàng)建命令參數(shù)保持一致
查看是否已經(jīng)被其它節(jié)點部署办绝,注意node2是節(jié)點伊约,此前并未下載過"registry.cn-beijing.aliyuncs.com/smokelee/redis" 這個私有鏡像
$kubecel get pod redis-ali -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-rc-q5pps 1/1 Running 2 2d 10.244.1.7 node1.smokelee.com <none> <none>
redis-ali-6s52k 1/1 Running 0 3s 10.244.2.11 node2.smokelee.com <none> <none>