目录
主机硬件配置说明
| 主机名 | IP | 角色 | CPU | 内存 | 系统 |
|---|---|---|---|---|---|
| master01 | 223.193.36.152 | master,etcd | 8C | 32G | CentOS 7 |
| master02 | 223.193.36.155 | master,etcd | 8C | 32G | CentOS 7 |
| node01 | 223.193.36.179 | worker | 8C | 32G | CentOS 7 |
| node02 | 223.193.36.182 | worker | 8C | 32G | CentOS 7 |
| harbor | 223.193.36.117 | repository | 8C | 32G | CentOS 7 |
docker安装
卸载旧版本
# 1. 卸载之前安装的组件
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
设置存储库
# 1.安装yum-utils
sudo yum install -y yum-utils
# 2.设置稳定的存储库
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 下面是官网的, 上面使用阿里云的 国内比较快
# https://download.docker.com/linux/centos/docker-ce.repo
安装最新版本的Docker引擎和容器
# 1. 直接安装最新docker版本
sudo yum -y install docker-ce docker-ce-cli containerd.io
# 2. 安装完成后查看版本
docker -v
安装指定版本
# 如果想安装不同版本
# 1.列出可用版本
yum list docker-ce --showduplicates | sort -r
# 2.安装指定版本
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
如:
sudo yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io
启动docker
# 启动docker
systemctl start docker
# 停止docker
systemctl stop docker
# 重启
systemctl restart docker
# 查看状态
systemctl status docker
# 设置开机自启动
systemctl enable docker
# 查看信息
docker info
# 查看帮助文档
docker --help
卸载docker(如需要)
# 1.卸载 Docker 引擎、CLI 和容器包
sudo yum remove docker-ce docker-ce-cli containerd.io
# 2.主机上的图像、容器、卷或自定义配置文件不会自动删除。要删除所有图像、容器和卷
sudo rm -rf /var/lib/docker
# 3.必须手动删除任何编辑的配置文件。
生成证书
默认情况下,Harbor不附带证书。可以在没有安全性的情况下部署Harbor,以便您可以通过HTTP连接到它。但是,只有在没有外部网络连接的测试或开发环境中,才可以使用HTTP。在外网暴露环境中使用HTTP会使您遭受中间人攻击。在生产环境中,请始终使用HTTPS。如果启用Content Trust with Notary来正确签名所有镜像,则必须使用HTTPS。
要配置HTTPS,必须创建SSL证书。您可以使用由受信任的第三方CA签名的证书,也可以使用自签名证书。本节介绍如何使用OpenSSL创建CA,以及如何使用CA签署服务器证书和客户端证书。您可以使用其他CA提供程序,例如Let’s Encrypt。
以下过程假定您的Harbor注册表的主机名是harbor.ifzzh.com,并且其DNS记录指向您在其上运行Harbor的主机。
生成证书颁发机构证书
在生产您应该从CA获得证书。在测试或开发环境中,您可以生成自己的CA。
生成CA证书私钥
# 创建目录保存证书(可选)
mkdir -p /root/harbor/ssl
cd /root/harbor/ssl
openssl genrsa -out ca.key 4096
生成CA证书
调整-subj选项中的值以反映您的组织。如果使用FQDN连接Harbor主机,则必须将其指定为通用名称(CN)属性。
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.ifzzh.com" \
-key ca.key \
-out ca.crt
生成服务器证书
证书通常包含一个.crt文件和一个.key文件,例如harbor.ifzzh.com.crt和harbor.ifzzh.com.key。
生成私钥
openssl genrsa -out harbor.ifzzh.com.key 4096
生成证书签名请求(CSR)
调整-subj选项中的值以反映您的组织。如果使用FQDN连接Harbor主机,则必须将其指定为通用名称(CN)属性,并在密钥和CSR文件名中使用它。
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.ifzzh.com" \
-key harbor.ifzzh.com.key \
-out harbor.ifzzh.com.csr
生成一个 x509 v3 扩展文件
无论您使用FQDN还是IP地址连接到Harbor主机,都必须创建此文件,以便可以为您的Harbor主机生成符合主题备用名称(SAN)和x509 v3的证书扩展要求。替换DNS条目以反映您的域。
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.ifzzh.com
DNS.2=harbor.ifzzh
DNS.3=ifzzh
EOF
使用该v3.ext文件为您的Harbor主机生成证书
将harbor.ifzzh.com CRS和CRT文件名中的域名替换为Harbor主机名
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in harbor.ifzzh.com.csr \
-out harbor.ifzzh.com.crt
提供证书给Harbor和Docker
生成后ca.crt,harbor.ifzzh.com.crt和harbor.ifzzh.com.key文件,必须将它们提供给harbor和docker,和重新配置harbor使用它们。
将服务器证书和密钥复制到Harbor主机上的certificates文件夹中
mkdir -p /data/cert
cp harbor.ifzzh.com.crt /data/cert/
cp harbor.ifzzh.com.key /data/cert/
转换harbor.ifzzh.com.crt为harbor.ifzzh.com.cert,供Docker使用。
Docker守护程序将.crt文件解释为CA证书,并将.cert文件解释为客户端证书。
openssl x509 -inform PEM -in harbor.ifzzh.com.crt -out harbor.ifzzh.com.cert
将服务器证书,密钥和CA文件复制到Harbor主机上的Docker证书文件夹中,您首先需要创建适当的文件夹
mkdir -p /etc/docker/certs.d/harbor.ifzzh.com/
cp harbor.ifzzh.com.cert /etc/docker/certs.d/harbor.ifzzh.com/
cp harbor.ifzzh.com.key /etc/docker/certs.d/harbor.ifzzh.com/
cp ca.crt /etc/docker/certs.d/harbor.ifzzh.com/
如果将默认nginx端口443映射到其他端口,请创建文件夹/etc/docker/certs.d/harbor.ifzzh.com:port或/etc/docker/certs.d/harbor_IP:port
重新启动 Docker Engine
systemctl restart docker
以下示例说明了使用自定义证书的配置。
/etc/docker/certs.d/
└── harbor.ifzzh.com:port
├── harbor.ifzzh.com.cert <-- Server certificate signed by CA
├── harbor.ifzzh.com.key <-- Server key signed by CA
└── ca.crt <-- Certificate authority that signed the registry certificate
[root@harbor ~]# yum install -y tree
[root@harbor ~]# tree /etc/docker/certs.d/
/etc/docker/certs.d/
└── harbor.ifzzh.com
├── ca.crt
├── harbor.ifzzh.com.cert
└── harbor.ifzzh.com.key
部署harbor仓库
# 1. 创建工作目录
mkdir harbor
# 2. 上传harbor安装包
rz -E
# 3.解压harbor安装包
tar xf harbor-offline-installer-v2.3.1.tgz
# 4. 复制修改harbor的配置文件名称
cp harbor/harbor.yml.tmpl harbor/harbor.yml
# 5. 修改配置文件信息
hostname: harbor.ifzzh.com
...
# https related config
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /data/cert/harbor.ifzzh.com.crt
private_key: /data/cert/harbor.ifzzh.com.key
harbor_admin_password: cnic
# 6. 启动harbor安装脚本
./harbor/install.sh
验证部署
cd harbor
docker-compose ps
# STATUS是Up说明部署成功了
本地浏览器访问
所有节点做hosts解析
cat >> /etc/hosts <<EOF
223.193.36.152 master01
223.193.36.155 master02
223.193.36.179 node01
223.193.36.182 node02
223.193.36.117 harbor harbor.ifzzh.com
EOF
访问
浏览器输入:harbor.ifzzh.com
从Harbor节点登录
docker login harbor.ifzzh.com
docker logout harbor.ifzzh.com
从其他节点登录
对应节点做如下操作,把ca.crt分发到对应客户端
mkdir -p /etc/docker/certs.d/harbor.ifzzh.com/
scp HarborIP:/root/harbor/ssl/ca.crt ca.crt /etc/docker/certs.d/harbor.ifzzh.com/
修改/etc/docker/daemon.json
{
"registry-mirrors": [
"https://tuv7rqqq.mirror.aliyuncs.com",
"https://1nj0zren.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"http://f1361db2.m.daocloud.io",
"https://registry.docker-cn.com"
],
"insecure-registries": ["http://harbor.ifzzh.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
推送镜像测试
docker login harbor.ifzzh.com
docker tag nginx:alpine harbor.ifzzh.com/library/nginx:alpine
docker push harbor.ifzzh.com/library/nginx:alpine