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

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

2.4 开始搭建私有仓库

物料内容备注
域名registry.i.smokelee.com任意
IP192.168.1.199内网主机
/etc/hosts增加registry.i.smokelee.com192.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

  • 四个映射

类别宿主容器作用
端口50005000映射到主机外
路径/data/registry/auth/root/registry/authhtpasswd认证
路径/data/registry/certs/root/registry/certshttps证书
路径/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_AUTHhtpasswd容器
REGISTRY_AUTH_HTPASSWD_REALMRegistry 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:123@registry.i.smokelee.com:5000/v2/
    
    {}
    

    参数说明:

    • –cacert 证书文件registry.i.smokelee.com.crt 参见2.4.1.1 如果是CA中心证书,不用加这个参数
    • https://opuser:123@registry.i.smokelee.com:5000/v2/ 带用户名的访问链接。用户名参见2.4.1.2

3. 使用私有仓库

3.1 已经有的物料再列一遍

名称物料备注
Registry主机registry.i.smokelee.com5000
用户名密码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:123@registry.i.smokelee.com: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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值