Harbor部署-Docker Compose方式

2021-02-23 Harbor社區
部署準備環境準備

確認作業系統版本

[root@linuxfdc ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)

禁用防火牆和Selinux

禁用防火牆、更新SElinux。

確保cfssl工具已經安裝

安裝證書管理工具cfssl。

安裝Docker、Docker Compose

安裝Docker,安裝DockerCompose。

準備安裝包

下載最新穩定版:https://github.com/goharbor/harbor/releases/download/v2.1.0/harbor-offline-installer-v2.1.0.tgz

準備自籤名證書

X.509證書包含三個文件:key,csr,crt:

csr

Certificate SigningRequest,即證書籤名請求,這個並不是證書,而是向權威證書頒發機構獲得籤名證書的申請,用於提交給證書頒發機構(CA)對證書進行籤名的;其核心內容是一個公鑰(當然還附帶了一些別的信息),在生成這個申請的時候,同時也會生成一個私鑰,私鑰要自己保管好。

key

是伺服器上的私鑰文件,用於對發送給客戶端數據的加密,以及對從客戶端接收到數據的解密。

crt

是由證書頒發機構(CA)籤名後的證書,或者是開發者自籤名的證書,包含證書持有人的信息,持有人的公鑰,以及籤署者的籤名等信息。

創建證書存放目錄

mkdir -pv /root/harbor/cert

cd /root/harbor/cert

生成自籤CA證書配置文件

根據自己的需要自定義ca-config.json,修改為如下配置:

[kevin@linuxfdc cert]$ cat > ca-config.json << EOF
{
"signing": {
"default": {
"expiry": "8760h"
},
"profiles": {
"harbor": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "8760h"
}
}
}
}
EOF

這個策略,有一個default默認的配置,和一個profiles,profiles可以設置多個profile,這裡的profile是harbor。

default

默認策略,指定了證書的默認有效期是一年(8760h);

harbor

表示該配置(profile)的用途是為harbor生成證書及相關的校驗工作;

signing

表示該證書可用於籤名其它證書;生成的ca.pem證書中CA=TRUE;

server auth

表示可以該CA對server提供的證書進行驗證;

client auth

表示可以用該CA對client提供的證書進行驗證;

expiry

也表示過期時間,如果不寫以default中的為準。

生成自籤CA證書請求文件

[root@K8S-HARBOR cert]# cat > ca-csr.json << EOF
{
"CN": "harbor.cluster.local",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [{
"C": "CN",
"ST": "Shaanxi",
"L": "Xi'an",
"O": "Harbor",
"OU": "Harbor Security"
}]
}
EOF

參數介紹:

CN

Common Name,瀏覽器使用該欄位驗證網站是否合法,一般寫的是域名。

hosts

表示哪些主機名(域名)或者IP可以使用此csr申請的證書,為空或者""表示所有的都可以使用;

O: Organization Name,組織名稱,公司名稱(在K8S中常用於指定Group,進行RBAC綁定)OU: Organization Unit Name,組織單位名稱,公司部門生成自籤名證書

[root@K8S-HARBOR cert]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca
2020/09/08 16:38:48 [INFO] generating a new CA key and certificate from CSR
2020/09/08 16:38:48 [INFO] generate received request
2020/09/08 16:38:48 [INFO] received CSR
2020/09/08 16:38:48 [INFO] generating key: rsa-2048
2020/09/08 16:38:49 [INFO] encoded CSR
2020/09/08 16:38:49 [INFO] signed certificate with serial number 262743830065161790985636603005551175222856124160

[root@K8S-HARBOR cert]# ll
total 24
-rw-r--r-- 1 10000 kevin 310 Sep 8 16:30 ca-config.json
-rw-r--r-- 1 root root 1029 Sep 18 15:18 ca.csr
-rw-r--r-- 1 10000 kevin 246 Sep 18 15:15 ca-csr.json
-rw-- 1 root root 1679 Sep 18 15:18 ca-key.pem
-rw-r--r-- 1 root root 1411 Sep 18 15:18 ca.pem

該命令會生成運行CA所必需的文件ca-key.pem(私鑰)和ca.pem(證書),還會生成ca.csr(證書籤名請求),用於交叉籤名或重新籤名。

將ca.pem轉換為ca.crt

[root@K8S-HARBOR cert]# openssl x509 -outform der -in ca.pem -out ca.crt

.crt:是用於存放證書,它是2進位形式存放的,不含私鑰。.pem:跟crt的區別是它以ASCII來表示的,可查看。生成harbor.cluster.local證書請求文件

[root@K8S-HARBOR cert]# cat > harbor-csr.json << EOF
{
"CN": "harbor.cluster.local",
"hosts": [
"local",
"cluster.local",
"harbor.cluster.local"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [{
"C": "CN",
"ST": "Shaanxi",
"L": "Xi'an",
"O": "Harbor",
"OU": "Harbor Security"
}]
}
EOF

生成harbor.cluster.local證書

[root@K8S-HARBOR cert]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=harbor harbor-csr.json | cfssljson -bare harbor
2020/09/18 15:38:18 [INFO] generate received request
2020/09/18 15:38:18 [INFO] received CSR
2020/09/18 15:38:18 [INFO] generating key: rsa-2048
2020/09/18 15:38:19 [INFO] encoded CSR
2020/09/18 15:38:19 [INFO] signed certificate with serial number 160381788685832694502009193205750931266964565823
2020/09/18 15:38:19 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").

[root@K8S-HARBOR cert]# ll
total 40
-rw-r--r-- 1 10000 kevin 310 Sep 8 16:30 ca-config.json
-rw-r--r-- 1 root root 1002 Sep 18 15:21 ca.crt
-rw-r--r-- 1 root root 1029 Sep 18 15:18 ca.csr
-rw-r--r-- 1 10000 kevin 246 Sep 18 15:15 ca-csr.json
-rw-- 1 root root 1679 Sep 18 15:18 ca-key.pem
-rw-r--r-- 1 root root 1411 Sep 18 15:18 ca.pem
-rw-r--r-- 1 root root 1127 Sep 18 15:38 harbor.csr
-rw-r--r-- 1 10000 kevin 341 Sep 18 15:15 harbor-csr.json
-rw-- 1 root root 1679 Sep 18 15:38 harbor-key.pem
-rw-r--r-- 1 root root 1525 Sep 18 15:38 harbor.pem

查看證書信息

查看cert(證書信息)

[root@K8S-HARBOR cert]# cfssl certinfo -cert harbor.pem

查看CSR(證書籤名請求)信息

[root@K8S-HARBOR cert]# cfssl certinfo -csr harbor.csr

部署Harbor

不建議在Harbor上啟用https,而是在將Harbor放置到一個LB的後邊,配置LB的SSL訪問,並在LB上做SSLtermination。

解壓

[root@K8S-HARBOR ~]# tar -vxf harbor-offline-installer-v2.1.0.tgz -C /root/

修改配置

[root@K8S-HARBOR harbor]# cp harbor.yml.tmpl harbor.yml

修改harbor.yml裡hostname、certificate、private_key、data_volume等參數:

# Configuration file of Harbor

# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: harbor.cluster.local #修改主機名

# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 80

# https related config
https:
# https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /root/harbor/cert/harbor.pem #修改證書地址
private_key: /root/harbor/cert/harbor-key.pem #修改證書地址
...

# The default data volume
data_volume: /data/apps/harbor #修改數據存放目錄
...

安裝Harbor

Load鏡像

[root@K8S-HARBOR harbor]# docker load -i harbor.v2.1.0.tar.gz

生成docker-compose.yml配置文件,增加其他功能

[root@K8S-HARBOR harbor]# ./prepare --with-clair --with-notary --with-trivy --with-chartmuseum
#--with-clair 鏡像安全掃描插件
#--with_notary 內容信任(鏡像籤名)插件
#--with-trivy 鏡像漏洞檢測插件
#--with-chartmuseum Chart倉庫服務

啟動Harbor

docker-compose up -d

查看日誌

Harbor採用的是Log Driver是syslog,所以產生的日誌目錄為:

/var/log/harbor/

使用Harbor

下面操作需要在訪問harbor.cluster.local的節點上執行,以K8S-PROD-M1節點為例展示。

配置證書

因為我們配置使用的是自籤名的證書,因此需要將前面生成的CA證書拷貝到需要訪問Harbor倉庫的每個Docker主機的/etc/docker/certs.d/{registry-hostname}/下。

創建證書存放目錄

[root@K8S-PROD-M1 ~]# mkdir -p /etc/docker/certs.d/harbor.cluster.local

獲取自籤證書

[root@K8S-PROD-M1 ~]# scp root@192.168.122.90:/root/harbor/cert/ca.pem /etc/docker/certs.d/harbor.cluster.local/

配置域名解析

[root@K8S-PROD-M1 ~]# vi /etc/hosts
...

# 添加Harbor域名解析
192.168.122.90 harbor.cluster.local

更新Docker配置

vi /etc/docker/daemon.json
{
"insecure-registries": ["harbor.cluster.local"]
}
[root@K8S-PROD-M1 ~]# systemctl reload docker && systemctl status docker

Docker Client訪問

默認管理員帳戶:admin/Harbor12345.

[kevin@linuxfdc ~]$ docker login harbor.cluster.local
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /home/kevin/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

Harbor UI測試訪問

NAT配置

iptables -t nat -A PREROUTING -m tcp -p tcp -d 192.168.191.32 --dport 8080 -j DNAT --to-destination 192.168.122.90:80
iptables -t nat -A PREROUTING -m tcp -p tcp -d 192.168.191.32 --dport 8443 -j DNAT --to-destination 192.168.122.90:443

訪問Harbor UI

默認管理員帳戶:admin/Harbor12345.

https://harbor.cluster.local

相關焦點

  • Harbor企業級私有Docker鏡像倉庫部署
    _64-rw-r--r-- 1 root root 958 May 12 23:00 install_docker-ce.sh[root@docker01 harbor]# chmod +x docker-compose-Linux-x86_64 # 添加執行權限[root@docker01 harbor]# mv docker-compose-Linux-x86_64 /usr/local
  • 進階 | 使用 Docker Harbor 部署私有倉庫
    Harbor 的每個組件都是以 Docker 容器的形式構建的,使用 Docker Compose 進行部署。GitHub 地址:https://github.com/vmware/harbor在 centos 上使用 Harbor1.安裝 docker-compse 。
  • 運維(8) Harbor部署和docker推送/拉取鏡像
    一、前言本文將基於docker和docker-compose環境簡單部署Harbor,並通過docker推送/拉取鏡像操作Docker version 20.10.8, build 3967b7ddocker-compose version 1.29.2, build 5becea4c二、部署Harbor# 進入自己的安裝目錄
  • 巧用Docker鏡像倉庫Harbor部署私有Mirror服務
    Harbor的每個組件都是以Docker容器的形式構建的,使用Docker Compose來對它進行部署。Harbor使用Docker-compose部署,後續所有的配置以及部署均在$HARBOR_HOME/Deploy/目錄下完成,因此若無特別說明,工作目錄都在該目錄下。
  • 企業級Docker鏡像倉庫Harbor部署與使用
    Harbor安裝有3種方式:在線安裝:從Docker Hub下載Harbor相關鏡像,因此安裝軟體包非常小離線安裝:安裝包包含部署的相關鏡像HTTP方式部署基本配置:# tar zxvf harbor-offline-installer-v1.7.5.tgz# cd harbor# vi harbor.cfg
  • 企業級Docker倉庫-Harbor
    Harbor的每個組件都是以Docker容器的形式構建的,官方也是使用Docker Compose來對它進行部署。用於部署Harbor的Docker Compose模板位於 harbor/docker-compose.yml,打開這個模板文件,發現Harbor是由多個容器組成的:
  • Docker和Harbor的使用
    Harbor:Docker容器應用的開發和運行離不開可靠的鏡像管理,雖然Docker官方也提供了公共的鏡像倉庫,但是從安全和效率等方面考慮,部署私有環境內的Registry也是非常必要的。2.Harbor安裝Harbor基於docker-compose(Docker官方的開源項目,負責實現對Docker容器集群的快速編排
  • Harbor2.0快速部署,不怕存儲大爆炸
    默認是用docker-compose部署的當然也可以部署到kubernetes中,本文安裝在docker-compose上,所有需要安裝docker和docker-compose#安裝docker[root@192-168-0-110 ~]#yum install yum-utils [root@192-168-0-110 ~]#yum-config-manager
  • 基於 Harbor 搭建 Docker 私有鏡像倉庫
    Harbor 的每個組件都是以 Docker 容器的形式構建的,使用 Docker Compose 來對它進行部署。或者用官方提供的方式:curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://ef017c13.m.daocloud.io安裝 Docker-compose如果是想直接命令安裝也行,下載指定版本的docker-compose
  • Harbor鏡像倉庫(含clair鏡像掃描) - 完整部署記錄
    提取密碼:eer9[root@k8s-harbor01 ~]# cd /usr/local/src/[root@k8s-harbor01 src][root@k8s-harbor01 src][root@k8s-harbor01 src] 查看 docker-compose 版本號[root@k8s-harbor01 ~]docker-compose version 1.26.0, build d4451659
  • 企業級Docker Registry——Harbor實踐
    容易部署:提供在線和離線安裝程序。另外,可以使用HelmChart在Kubernetes上部署Harbor。 安裝部署系統要求:在linux主機上,docker 17.06.0-ce+, docker-compose1.18.0+, 也可以在kubernetes 集群中使用HelmChart for Harbor部署。
  • Harbor版本升級
    本文只適用於:1. harbor的版本大於v1.10.x到最新版本的升級遷移,2. docker-compose
  • 生產級harbor可用的搭建
    高可用架構:雙主複製主從同步harbor官方默認提供主從複製的方案來解決鏡像同步問題,通過複製的方式,我們可以實時將測試環境harbor倉庫的鏡像同步到生產環境harbor,類似於如下流程:img在實際生產運維的中,往往需要把鏡像發布到幾十或上百臺集群節點上。
  • 利用docker-compose一鍵部署
    --" 編寫docker-compose.yml文件前面的都沒什麼好講的,現在來說一下這個docker-compose.yml文件,這是docker-compose進行容器編排的時候需要用到的配置文件,先給出完整的yml文件,然後逐塊進行說明
  • Docker高級篇之Harbor鏡像私服-雲原生核心
    Harbor3.1 Harbor簡介Docker容器應用的開發和運行離不開可靠的鏡像管理,雖然Docker官方也提供了公共的鏡像倉庫,但是從安全和效率等方面考慮,部署我們私有環境內的Registry也是非常必要的。
  • 使用Docker Compose部署SpringBoot應用
    使用Compose你可以用YAML文件來配置你的應用服務,然後使用一個命令,你就可以部署你配置的所有服務了。/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose修改該文件的權限為可執行:chmod +x /usr/local/bin/docker-compose查看是否已經安裝成功:docker-compose
  • docker stack,docker-compose前世今生
    Docker引擎在1.12版本集成了Docker Swarm,內置新的容器編排工具docker stack,① 使用方式雷同,都使用yml容器編排文件$ docker-compose -f docker-compose up$ docker stack deploy -c docker-compose.yml somestackname
  • docker-compose 一鍵部署分布式配置中心Apollo
    從以上docker-compose.yaml中可以看出共包含3個服務,分別為:Config Service提供配置的讀取、推送等功能,服務對象是Apollo客戶端Admin Service提供配置的修改、發布等功能,服務對象是Apollo Portal(管理界面)Portal(管理界面)如果想了解它們之間的運行方式推薦查看官方文檔
  • Docker集群管理之Docker Compose
    Docker主機創建好之後,接下來就該考慮Docker容器部署的問題了。本篇中我們將通過分析Docker Compose的源碼,了解Docker Compose的工作原理。與容器技術同樣受到關注的微服務架構也在潛移默化的改變著應用的部署方式,其提倡將應用分割成一系列細小的服務,每個服務專注於單一業務功能,服務之間採用輕量級通信機制相互溝通。
  • Docker-compose 八步部署Django + Uwsgi + Nginx + MySQL + Redis升級篇
    Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發布到任何流行的 Linux機器上。前使用 docker-compose 後不再需要使用 shell 腳本來逐一創建和啟動容器,還可以通過 docker-compose.yml 文件構建和管理複雜多容器組合。Docker-compose的下載和安裝很簡單,網上有很多教程,我就不再詳述了。這裡只記錄下ubuntu系統下docker-compose的安裝過程。