私有鏡像倉庫-Harbor實戰
我們前面在k8s上部署服務一直都是用的dockerhub上的公有鏡像,對於企業服務來說,有些我們是不想把服務鏡像放在公網上面的; 同時如果在有內部的鏡像倉庫,那拉取鏡像的速度就會很快,這時候就需要我們來部署公司內部的私有鏡像倉庫了,這裏博哥會使用我們最常用的harbor來部署我們內部的私有鏡像倉庫。
harbor官方文檔:
https://goharbor.io/docs/2.2.0/
harbor內部架構圖
harbor在我們這次課程的最終一關的位置如圖所示:
在生產中安裝一般有兩種方式,一種是用docker-compose啓動官方打包好的離線安裝包; 二上用helm chart的形式在k8s上來運行harbor,兩種方式都可以用,但根據博哥的工作經驗,建議是不要將harbor部署在k8s上,這裏博哥就直接以第一種離線的方式來安裝harbor
# 離線形式安裝harbor私有鏡像倉庫
## 創建目錄及下載harbor離線包
mkdir /data && cd /data
wget https://github.com/goharbor/harbor/releases/download/v2.2.0/harbor-offline-installer-v2.2.0.tgz
tar xf harbor-offline-installer-v2.2.0.tgz && rm harbor-offline-installer-v2.2.0.tgz
## 修改harbor配置
cd harbor
cp harbor.yml.tmpl harbor.yml
5 hostname: harbor.boge.com
17 certificate: /data/harbor/ssl/tls.cert
18 private_key: /data/harbor/ssl/tls.key
34 harbor_admin_password: boge666
## 創建harbor訪問域名證書
mkdir /data/harbor/ssl && cd /data/harbor/ssl
openssl genrsa -out tls.key 2048
openssl req -new -x509 -key tls.key -out tls.cert -days 360 -subj /CN=*.boge.com
## 準備好單機編排工具`docker-compose`
> 從二進制安裝k8s項目的bin目錄拷貝過來
scp /etc/kubeasz/bin/docker-compose 10.0.1.204:/usr/bin/
> 也可以在docker官方進行下載
https://docs.docker.com/compose/install/
## 開始安裝
./install.sh
## 推送鏡像到harbor
echo '10.0.1.204 harbor.boge.com' >> /etc/hosts
docker tag nginx:latest harbor.boge.com/library/nginx:latest
docker push harbor.boge.com/library/nginx:1.18.0-alpine
## 在其他節點上面拉取harbor鏡像
> 在集羣每個 node 節點進行如下配置
> ssh to 10.0.1.201(centos7)
mkdir -p /etc/docker/certs.d/harbor.boge.com
scp 10.0.1.204:/data/harbor/ssl/tls.cert /etc/docker/certs.d/harbor.boge.com/ca.crt
docker pull harbor.boge.com/library/nginx:latest
## 重啓harbor
docker-compose down -v
docker-compose up -d
docker ps|grep harbor
## 附(引用自 https://github.com/easzlab/kubeasz):
containerd配置信任harbor證書
在集羣每個 node 節點進行如下配置(假設ca.pem爲自建harbor的CA證書)
ubuntu 1604:
cp ca.pem /usr/share/ca-certificates/harbor-ca.crt
echo harbor-ca.crt >> /etc/ca-certificates.conf
update-ca-certificates
CentOS 7:
cp ca.pem /etc/pki/ca-trust/source/anchors/harbor-ca.crt
update-ca-trust
上述配置完成後,重啓 containerd 即可 systemctl restart containerd