Docker容器应用的开发和运行离不开可靠的镜像管理,在企业级的Docker Registry管理项目中,一般使用Harbor,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。
今天就将Harbor仓库的安装和使用做一下整理。本次安装过程按照kubernetes使用时的CA证书来安装。
阅读这篇文章之前,你应当已经理解了DNS服务器的搭建:
【网络篇】如何搭建自己的DNS服务器
mkdir harbor
cd harbor
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
# 放到PATH路径可以直接使用
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo
# CA证书请求文件
cat > ca-csr.json <<"EOF"
{
"CN": "kubernetes",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Beijing",
"L": "Beijing",
"O": "jiangxiaonan",
"OU": "CN"
}
],
"ca": {
"expiry": "87600h"
}
}
EOF
# 创建ca证书
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
cat > ca-config.json <<"EOF"
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"kubernetes": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "87600h"
}
}
}
}
EOF
cat > harbor-csr.json <<"EOF"
{
"CN": "harbor",
"hosts": [
"127.0.0.1",
"192.168.189.30",
"harbor.kubernetes.com"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [{
"C": "CN",
"ST": "Beijing",
"L": "Beijing",
"O": "jiangxiaonan",
"OU": "CN"
}]
}
EOF
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes harbor-csr.json | cfssljson -bare harbor
本次我们使用docker-compose的方式运行harbor镜像。
# 下载docker-ce
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y yum-utils
# 官网使用的为国外镜像仓库,下载速度会比较慢,我们这里使用国内阿里云镜像仓库。
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ae38hood.mirror.aliyuncs.com"]
}
EOF
systemctl enable --now docker
# 重启
systemctl restart docker
详细安装步骤可以参考以下链接:
Docker安装,环境配置说明,阿里云镜像加速配置
wget https://github.com/docker/compose/releases/download/1.25.0/docker-compose-Linux-x86_64
# 放到PATH路径可以直接使用
mv docker-compose-Linux-x86_64 /usr/bin/docker-compose
# 为二进制文件添加可执行权限
chmod +x /usr/bin/docker-compose
# 检查验证
docker-compose version
# 下载harbor
wget https://github.com/goharbor/harbor/releases/download/v2.4.1/harbor-offline-installer-v2.4.1.tgz
# 解压完是一个harbor目录
tar xf harbor-offline-installer-v2.4.1.tgz
# 将证书文件移动到harbor目录下
mv harbor*.pem harbor
cd harbor
cp harbor.yml.tmpl harbor.yml
# 修改harbor配置文件
vi harbor.yml
hostname: harbor.kubernetes.com
http:
port: 80
https:
port: 443
certificate: /root/harbor/harbor/harbor.pem
private_key: /root/harbor/harbor/harbor-key.pem
从这里我们也可以看出harbor的端口为80。默认账号admin,密码Harbor12345。
# 执行预备脚本
./prepare
# 执行安装脚本
./install.sh
本地浏览器登录:
kubernetes集群内登录:
# 登录
docker login harbor.kubernetes.com
# 退出
docker logout harbor.kubernetes.com
说明:如果没有DNS服务器就是用ip地址。
比如新做了一个nginx镜像,设定标签为harbor.kubernetes.com/library/nginx
# 使用nginx最新版本的镜像重新打标签
docker tag nginx:latest harbor.kubernetes.com/library/nginx:1.0
上传到harbor仓库中:
docker push harbor.kubernetes.com/library/nginx:1.0
拉取harbor仓库中的镜像:
docker pull harbor.kubernetes.com/library/nginx:1.0
说明:镜像的上传拉取镜像必须先登录。
k8s中创建pod拉取镜像时,私有仓库未公开的需要指定凭据secrets才可以拉取,后面我们将详细讲解。