k8s无脑系列(六)-创建私有仓库(二)

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 创建认证部分

  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
  2. 创建用户名密码

    一句话解释:用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使用

  1. docker 登录到私有仓库

    $docker login registry.i.smokelee.com:5000 -u opuser -p 123

    提示登录失败等等,请检查证书部分。3.1红色字有具体说明

  2. 假设客户端有个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
    
  3. 通过curl命令检查

    curl https://opuser:[email protected]:5000/v2/base/mysql/tags/list
    {"name":"base/mysql","tags":["5.6"]}

3.3 k8s使用私有仓库

  1. 创建私有仓库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
  2. 创建一个测试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.总结

  1. Registry最好独立于k8s存在,这样重建集群时更安全、方便
  2. 一定不要考虑镜像库的Insecure模式,务必加入证书用https

猜你喜欢

转载自www.cnblogs.com/smokelee/p/12445107.html