步骤一:部署Docker容器(Https)
转到下载页面https://github.com/goharbor/harbor/releases,根据需求下载在线或者离线安装包。其中在线安装包不包含镜像文件。
导入到部署了docker的Linux中,并解压文件:
tar xzvf harbor-online-installer-version.tgz
或者:
tar xzvf harbor-offline-installer-version.tgz
解压完成后,开始HTTPs相关的配置。首先是创建CA的私钥:
openssl genrsa -out ca.key 4096
接着创建CA的证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
-key ca.key \
-out ca.crt
X.509 证书由多个字段组成。该 Subject领域是与本教程最相关的领域之一。它给出了证书所属客户端的 DName。DName 是赋予 X.500 目录对象的唯一名称。它由许多称为相对可分辨名称 (RDN) 的属性值对组成。一些最常见的RDN及其解释如下:
- CN: 通用名
- OU: 组织单位
- O: 组织
- L: 地方
- S: 州或省名
- C: 国家的名字
例如:
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=UK/ST=Wales/L=Cardiff/O=Cardiff University/OU=Headquarter/CN=project.com" \
-key ca.key \
-out ca.crt
生成CA的私钥和证书后,需要生成Harbor的私钥和证书:
生成私钥命令:
openssl genrsa -out yourdomain.com.key 4096
后续文章中,yourdomain.com.key将用实际的名称代替:
openssl genrsa -out harbor.project.com.key 4096
接下来,生成Harbor的证书请求文件:
openssl req -sha512 -new \
-subj "/C=UK/ST=Wales/L=Cardiff/O=Cardiff University/OU=Headquarter/CN=harbor.project.com" \
-key harbor.project.com.key \
-out harbor.project.com.csr
配置x509 v3拓展文件,配置该文件的目的是帮助生成符合主题备用名称 (SAN) 和 x509 v3 的证书扩展要求的证书文件。其中,SAN 或主题备用名称是一种结构化方式,用于指示受证书保护的所有域名和 IP 地址。被视为 SAN 的项目的简短列表中包括子域和 IP 地址。该文件的格式如下:
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF
具体实例如下:
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=harbor.project.com
DNS.2=harbor.project
DNS.3=harbor
EOF
配置完成后,使用该文件和openssl为Harbor生成证书:
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in harbor.project.com.csr \
-out harbor.project.com.crt
现在,我们就得到了后续需要使用的ca的证书,harbor的私钥和证书。
注意: 如果想使用自己的CA,例如window server中的CA为harbor颁发证书。请直接使用如下的网站生成满足要求的证书请求和私钥文件: https://decoder.link/csr_generator
接下来,我们需要给Harbor容器添加证书。由于在部署容器时使用了卷映射,所以我们直接将Harbor的私钥和证书拷贝到宿主机的/data/cert目录下即可:
cp harbor.project.com.crt /data/cert
cp harbor.project.com.key /data/cert
完成后,转换harbor.project.com.crt为harbor.project.cert, 供 Docker 使用。Docker 守护进程将.crt文件解释为 CA 证书,将.cert文件解释为Harbor证书。
openssl x509 -inform PEM -in harbor.project.com.crt -out harbor.project.com.cert
创建存放验证Harbor容器证书的Docker的目录,并将Harbor的私钥,证书,以及CA的证书拷贝进去:
mkdir -p /etc/docker/certs.d/harbor.project.com/
cp harbor.project.com.cert /etc/docker/certs.d/harbor.project.com/
cp harbor.project.com.key /etc/docker/certs.d/harbor.project.com/
cp ca.crt /etc/docker/certs.d/harbor.project.com/
完成后,在解压后的Harbor目录下,找到如下的harbor.yml文件,并修改其中的内容:
具体参数如下:https://goharbor.io/docs/2.1.0/install-config/configure-yml-file/。配置完成后,依然在解压后的目录下,找到install.sh文件,使用如下命令进行harbor的部署:
sudo ./install.sh
注意,这一步的前提是安装了满足版本要求的docker-compose,否则会出现报错。安装完成后,进行验证容器是否运行成功:
可以看到,这里的状态都是healthy,说明没有问题。接下来,我们及可以通过命令或者游览器进行访问Harbor镜像仓库。
CLI命令如下:
docker login harbor.project.com -u admin -p Harbor12345
接下来是Web登陆,访问宿主机的443 Https端口即可:
步骤二:连接AD域
首先,配置完成自己的AD域,并且创建相应的Harbor登陆用户。如下,我已经配置完成了AD域project.com和用户HarborAdmin
完成AD域配置后,在Harbor中进行连接:
配置AD域连接的参数。具体的参数解释如下: https://docs.bmc.com/docs/fpsc121/ldap-attributes-and-associated-fields-495323340.html
配置完成后可以点击页面下方的测试按钮进行检查是否能正常连接。如果测试成功的话,可以保存配置。
接下来可以在用户管理栏,为HarborAdmin设置管理员权限:
设置完成后,我们就可以logout并使用AD域的账号登陆Harbor仓库了。
步骤三:Push+Pull镜像
CLI命令行登陆Harbor后,可以将我们的镜像Push到私有仓库存储。首先在Harbor中创建私有仓库:
接下来需要给镜像打上tag,tag的格式为:
docker tag SOURCE_IMAGE[:TAG] harbor.project.com/project_images1/IMAGE[:TAG]
例如,我们想要推送nginx:latest镜像到Harbor,则使用如下的命令:
docker tag nginx:latest harbor.project.com/project_images1/nginx:v1
修改完成后,我们就可以使用下面的命令,推送镜像到Harbor的私有仓库中了:
docker push harbor.project.com/project_images1/nginx:v1
在Harbor中进行检查,可以看到已经推送成功了:
同样的方式可以pull镜像到本地:
docker pull harbor.project.com/project_images1/nginx:v1