k8s无脑系列(六)-创建私有仓库(二)
说明:这个不是Nginx代理的版本,原理上大同小异。
为了降低部署学习难度,先从最简单的开始介绍。
这个完全掌握了,Docker安装Nginx,再反向代理到Registry会更简单
2.4 开始搭建私有仓库
物料 | 内容 | 备注 |
---|---|---|
域名 | registry.i.smokelee.com | 任意 |
IP | 192.168.1.199 | 内网主机 |
/etc/hosts | 增加registry.i.smokelee.com | 192.168.1.199 |
registry数据目录 | /data/registry/images | |
registry权限目录 | /data/registry/auth | |
registry证书目录 | /data/registry/certs |
2.4.1 创建认证部分
创建证书(https用)
如果可以自己申请免费的CA证书,不需要这个步骤!$cd /data/registry/certs $openssl req -newkey rsa:4096 -nodes -sha256 -keyout registry.i.smokelee.com.key -x509 -days 365 -out registry.i.smokelee.com.crt
创建用户名密码
一句话解释:用registry这个镜像中的htpasswd 命令创建用户名,密码。
参数说明:$cd /data/registry/auth $docker run --entrypoint htpasswd registry -Bbn opuser opuserpassword > htpasswd $cat /data/registry/auth/htpasswd opuser:$2y$05$Eke5c4U66vFS6SSxX8wYZ.FYGV/V0DSVxdjsaBarRuI/SmPX9iT52
- --entrypoint htppasswd 运行镜像的htpasswd命令
- registry 镜像的名称
- -Bbn opuser opuserpassword htppasswd命令的参数
2.4.2 启动仓库
配置参数解释
- 一个名称
- --name registry.i.smokelee.com
- 四个映射
类别 | 宿主 | 容器 | 作用 |
---|---|---|---|
端口 | 5000 | 5000 | 映射到主机外 |
路径 | /data/registry/auth | /root/registry/auth | htpasswd认证 |
路径 | /data/registry/certs | /root/registry/certs | https证书 |
路径 | /data/registry/images | /var/lib/registry | 镜像存储路径 |
- 四个环境变量
环境变量 | 值 | 作用对象 |
---|---|---|
REGISTRY_HTTP_TLS_CERTIFICATE | /root/registry/certs/registry.i.smokelee.com.crt | 容器路径 |
REGISTRY_HTTP_TLS_KEY | /root/registry/certs/registry.i.smokelee.com.key | 容器路径 |
REGISTRY_AUTH | htpasswd | 容器 |
REGISTRY_AUTH_HTPASSWD_REALM | Registry Realm | 容器 |
最终的执行语句
$docker run -d -p 5000:5000 --restart=always \ --name registry.i.smokelee.com \ -v /data/registry/auth:/root/registry/auth \ -v /data/registry/certs:/root/registry/certs \ -v /data/registry/images:/var/lib/registry \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/root/registry/auth/htpasswd \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/root/registry/certs/registry.i.smokelee.com.crt \ -e REGISTRY_HTTP_TLS_KEY=/root/registry/certs/registry.i.smokelee.com.key \ registry
测试
参数说明:$curl --cacert \ /data/registry/certs/registry.i.smokelee.com.crt \ https://opuser:[email protected]:5000/v2/ {}
- --cacert 证书文件registry.i.smokelee.com.crt 参见2.4.1.1 如果是CA中心证书,不用加这个参数
- https://opuser:[email protected]:5000/v2/ 带用户名的访问链接。用户名参见2.4.1.2
3. 使用私有仓库
3.1 已经有的物料再列一遍
名称 | 物料 | 备注 |
---|---|---|
Registry主机 | registry.i.smokelee.com | 5000 |
用户名密码 | opuser:123 | |
证书 | registry.i.smokelee.com.crt | |
客户主机 | 192.168.56.4 |
*CA证书,不需要复制证书到任何地方,把crt和key放到registry的目录里即可。参考2.4.1.2
*自签证书,就是自己创建的(2.4.1.1),需要把crt放到集群节点的/etc/docker/certs.d/registry.i.smokelee.com:5000
3.2 一般Docker使用
docker 登录到私有仓库
$docker login registry.i.smokelee.com:5000 -u opuser -p 123
提示登录失败等等,请检查证书部分。3.1红色字有具体说明
假设客户端有个mysql库
打Tag,并push
$docker tag docker.io/mysql:5.6 registry.i.smokelee.com:5000/base/mysql:5.6 $docker push registry.i.smokelee.com:5000/base/mysql:5.6
通过curl命令检查
curl https://opuser:[email protected]:5000/v2/base/mysql/tags/list {"name":"base/mysql","tags":["5.6"]}
3.3 k8s使用私有仓库
创建私有仓库Secret
参数解释参见《k8s无脑系列-创建私有仓库(一)》 2.2章节
$kubectl create secret docker-registry \ registry-secret-smokelee.com \ --docker-server=registry.i.smokelee.com:5000 \ --docker-username=opuser --docker-password=123
创建一个测试rc
apiVersion: v1 kind: ReplicationController metadata: name: mysql-test spec: replicas: 1 selector: app: mysql-test template: metadata: labels: app: mysql-test spec: containers: - name: mysql image: registry.i.smokelee.com:5000/base/mysql:5.6 ports: - containerPort: 3306 env: - name: MYSQL_ROOT_PASSWORD value: "123" imagePullSecrets: -name: registry-secret-smokelee.com
$kubectl create -f mysql-test.yaml $kubectl get pod -o wide NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR mysql-test 1 1 1 12s mysql registry.i.smokelee.com:5000/base/mysql:5.6 app=mysql-test
4.总结
- Registry最好独立于k8s存在,这样重建集群时更安全、方便
- 一定不要考虑镜像库的Insecure模式,务必加入证书用https