k8s镜像仓库接入

454 阅读2分钟

Registry仓库

  • Docker Registry 公开服务是开放给用户使用、允许用户管理镜像的 Registry 服务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务供用户管理私有镜像

  • 除了使用公开服务外,用户还可以在本地搭建私有 Docker Registry。Docker 官方提供了 Docker Registry 镜像,可以直接使用做为私有 Registry 服务。在 私有仓库 一节中,会有进一步的搭建私有 Registry 服务的讲解。

    开源的 Docker Registry 镜像只提供了 Docker Registry API 的服务端实现,足以支持 docker 命令,不影响使用。但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能

Harbor仓库

  • Harbor是由VMware公司开源的企业级的Docker Registry管理项目,相比docker官方拥有更丰富的权限权利和完善的架构设计,适用大规模docker集群部署提供仓库服务。

  • 它主要提供 Dcoker Registry 管理界面UI,可基于角色访问控制,镜像复制, AD/LDAP 集成,日志审核等功能,完全的支持中文

    在这里插入图片描述

harbor http

  • harbor仓库搭建

    • 1、github下载源码、解压

    • 2、安装docker-compose

    • 3、cp harbor.yml.tmp harbor.yml

    • 4、修改相关配置(域名、端口、账户密码、http/https等)

    • 5、执行prepare.sh(之前启动过harbor,如果没有可以忽略)

    • 6、执行启动脚本 start.sh

    • 7、验证启动是否成功,访问ip/域名:port image.png

harbor https 证书生成

https--域名

openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor214.https.cn" \
 -key ca.key \
 -out ca.crt
# 生成证书签名请求(CSR)
openssl genrsa -out harbor214.https.cn.key 4096
​
openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor214.https.cn" \
    -key harbor214.https.cn.key \
    -out harbor214.https.cn.csr
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
​
[alt_names]
DNS.1=harbor214.https.cn
EOF
openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in harbor214.https.cn.csr \
    -out harbor214.https.cn.crt
 mkdir -p /data/cert/
 cp harbor214.https.cn.crt /data/cert/
 cp harbor214.https.cn.key /data/cert/
openssl x509 -inform PEM -in harbor214.https.cn.crt -out harbor214.https.cn.cert

https--ip

openssl genrsa -out ca.key 4096
​
openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.2.109" \
 -key ca.key \
 -out ca.crt
openssl genrsa -out 192.168.2.109.key 4096
​
openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.2.109" \
    -key 192.168.2.109.key \
    -out 192.168.2.109.csr
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:192.168.2.109
EOF
openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in 192.168.2.109.csr \
    -out 192.168.2.109.crt
mkdir -p /data/cert/
cp 192.168.2.109.crt /data/cert/
cp 192.168.2.109.key /data/cert/
openssl x509 -inform PEM -in 192.168.2.109.crt -out 192.168.2.109.cert
mkdir -p /etc/docker/certs.d/192.168.2.109/
cp 192.168.2.109.cert /etc/docker/certs.d/192.168.2.109/
cp 192.168.2.109.key /etc/docker/certs.d/192.168.2.109/
cp ca.crt /etc/docker/certs.d/192.168.2.109/

后台配置总结

  • 后台配置:

    配置insecure-registries时如果reload不生效可以用restart

    仓库类型CI主机配置k8s集群配置Jenkins(pipeline)
    registry http 无认证1. /etc/hosts 域名解析仓库2. docker insecure-registries1. /etc/hosts 域名解析仓库2. docker insecure-registries
    registry http 带用户名密码1. /etc/hosts 域名解析仓库2. Docker insecure-registries3. docker login1. /etc/hosts 域名解析仓库2. docker insecure-registries3. imagePullSecrets配置用户名密码凭证
    registry https类型1. /etc/hosts 域名解析仓库2. docker insecure-registries1. /etc/hosts 域名解析仓库2. docker insecure-registries
    registry https类型 带用户名密码1. /etc/hosts 域名解析仓库2. docker insecure-registries3.docker login1. /etc/hosts 域名解析仓库2. docker insecure-registries3. imagePullSecrets配置用户名密码凭证
    harbor http1. /etc/hosts 域名解析仓库2. docker insecure-registries1. /etc/hosts 域名解析仓库2. docker insecure-registries3.imagePullSecrets配置用户名密码凭证

纳管常见错误信息

  • 报错:x509: certificate signed by unknown authority

    解决方法:配置docker非安全: "insecure-registries": ["reg228.cn:40448"]

  • 扫描、删除:镜像拉取失败 connection broken registry带账户名密码:镜像拉取失败!原因:{"message":"Get registry-https-user.example.com:7443/v2/: net/http: HTTP/1.x transport connection broken: malformed HTTP response "\x15\x03\x01\x00\x02\x02""} 解决方法:在CI或者业务集群上需先docker login
  • 删除镜像如果无法删除 解决方法: 后台仓库配置 1、进入对应仓库容器 docker exec -it 容器ID sh 2、修改 /etc/docker/registry/config.yml 文件 在storage下面添加 delete: enabled: true 3、重启容器 docker restart 容器id
  • 报错: habor214.cn:21480/v2/: dial tcp: lookup habor214.cn on 114.114.114.114:53: no such host 解决方法:未正确配置域名解析 CI或者业务集群
  • 报错:镜像制作docker push失败com.github.dockerjava.api.exception.DockerClientException: Could not push image: received unexpected HTTP status: 500 nternal Server Error 解决方法:仓库磁盘满了,导致推送失败,后台push一样报错,清理磁盘空间