一、Harbor簡介node
1. Harbor是一個用於存儲和分發Docker鏡像的企業級Registry服務器。linux
2. 鏡像的存儲harbor使用的是官方的docker registry(v2命名是distribution)服務去完成。nginx
3. harbor在docker distribution的基礎上增長了一些安全、訪問控制、管理的功能以知足企業對於鏡像倉庫的需求。git
4. harbor以docker-compose的規範形式組織各個組件,並經過docker-compose工具進行啓停。github
5. docker的registry是用本地存儲或者s3都是能夠的docker
6. Harbor的鏡像拷貝功能是經過docker registry的API去拷貝,這種作法屏蔽了繁瑣的底層文件操做centos
二、Harbor架構圖瀏覽器
三、主要組件安全
一、參考文檔及安裝步驟梳理服務器
下載v1.4.0版本harbor:https://github.com/goharbor/harbor/releases?after=v1.5.0-rc5
安裝參考文檔:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
配置證書:https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
一、 下載離線安裝包
二、 安裝docker
三、 安裝docker-compose
四、 自籤TLS證書
五、 Harbor安裝與配置
六、 Docker主機訪問Harbor
二、安裝docker和docker-compose(192.168.56.14)
# 1)安裝依賴包 yum install -y yum-utils device-mapper-persistent-data lvm2 # 2)添加Docker軟件包源(不然doker安裝的不是新版本) yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo # 3)安裝Docker CE yum install -y docker-ce # 4)啓動Docker服務並設置開機啓動 systemctl start docker systemctl enable docker # 5)安裝docker compose curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose --version # 測試docker-compose是否安裝好
二、安裝Harbor
'''安裝Harbor鏡像倉庫''' # 一、下載離線安裝包 https://github.com/goharbor/harbor/releases # 二、解壓並配置訪問地址''' cd /home/work
tar zxvf harbor-offline-installer-v1.8.1.tgz cd /home/work/harbor vi harbor.yml ''' hostname = 192.168.56.14 harbor_admin_password = 123456 ''' # 三、準備配置 ./prepare # 四、導入鏡像並啓動 ./install.sh # 五、查看容器狀態 docker-compose ps 安裝完成後能夠登陸Harbor:http://192.168.56.14
一、簡介
1. 配置ssl證書https://github.com/goharbor/harbor/blob/master/docs/configure_https.md
2. 因爲Harbor沒有附帶任何證書,因此它默認使用HTTP來服務註冊表請求,可是,強烈建議爲任何生產環境啓用安全性。
3. 在測試或開發環境中,您能夠選擇使用自簽名證書,而不是來自受信任的第三方CA的證書。
二、得到CA證書頒發機構(CN爲域名)
mkdir /home/work/harbor/ssl/ # 建立一個ssl目錄用來存放要建立的證書 cd /home/work/harbor/ssl # 得到CA證書頒發機構(CN爲域名,最好爲主機名) openssl genrsa -out ca.key 4096 openssl req -x509 -new -nodes -sha512 -days 3650 \ -subj "/C=TW/ST=Taipei/L=Taipei/O=example/OU=Personal/CN=linux-node4.example.com" \ -key ca.key \ -out ca.crt
三、獲取服務器證書
1. 假設註冊表的主機名是linux-node4.example.com,其DNS記錄指向運行Harbor的主機。
2. 在生產環境中,您首先應該從CA得到證書,在測試或開發環境中,您可使用本身的CA。
3. 證書一般包含一個.crt文件和一個.key文件,例如linux-node4.example.com.crt和linux-node4.example.com.key。
# 建立本身的私鑰
openssl genrsa -out linux-node4.example.com.key 4096
# 生成部署請求認證 # 若是使用像linux-node4.example.com這樣的FQDN鏈接註冊表主機,則必須使用linux-node4.example.com做爲CN(通用名稱)。
openssl req -sha512 -new \ -subj "/C=TW/ST=Taipei/L=Taipei/O=example/OU=Personal/CN=linux-node4.example.com" \ -key linux-node4.example.com.key \ -out linux-node4.example.com.csr
四、爲註冊的主機生成證書
1. 不管您使用的是像linux-node4.example.com這樣的FQDN仍是IP來鏈接註冊表主機
2. 均可以運行這個命令來生成符合Subject Alternative Name (SAN)和x509 v3擴展要求的註冊表主機證書
# 生成v3.ext文件
cat > v3.ext <<-EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1=linux-node4.example.com DNS.2=linux-node4.example DNS.3=example EOF # 生成證書
openssl x509 -req -sha512 -days 3650 \ -extfile v3.ext \ -CA ca.crt -CAkey ca.key -CAcreateserial \ -in linux-node4.example.com.csr \ -out linux-node4.example.com.crt
五、爲Harbor配置服務器證書和密鑰
# 在得到linux-node4.example.com.crt和linux-node4.example.com.key文件以後,能夠將它們放入/data/cert/這樣的目錄中
mkdir -p /data/cert cp linux-node4.example.com.crt /data/cert/ cp linux-node4.example.com.key /data/cert/
六、爲Docker配置服務器證書、密鑰和CA
# Docker守護進程將.crt文件解釋爲CA證書,將.cert文件解釋爲客戶機證書 # 將服務器linux-node4.example.com.crt轉換爲linux-node4.example.com.cert
openssl x509 -inform PEM -in linux-node4.example.com.crt -out linux-node4.example.com.cert # 爲docker部署 linux-node4.example.com.cert、linux-node4.example.com.key和ca.crt
mkdir -p /etc/docker/certs.d/linux-node4.example.com/ cp linux-node4.example.com.cert /etc/docker/certs.d/linux-node4.example.com/ cp linux-node4.example.com.key /etc/docker/certs.d/linux-node4.example.com/ cp ca.crt /etc/docker/certs.d/linux-node4.example.com/
七、配置Harbor
# 編輯文件端口,更新主機名並取消對https塊的註釋,更新屬性證書和private_key #set hostname
hostname: linux-node4.example.com harbor_admin_password: 123456 http: port: 80 https: # https port for harbor, default is 443
port: 443
# The path of cert and key files for nginx
certificate: /data/cert/example.com.crt private_key: /data/cert/example.com.key
八、爲Harbor從新生成配置文件
#一、爲Harbor從新生成配置文件
./prepare #二、若是Harbor已經運行,則中止並刪除現有實例,鏡像數據仍然保存在文件系統中
docker-compose down -v #三、重啓harbor
docker-compose up -d #四、此時能夠經過瀏覽器訪問https: https://192.168.56.14/harbor/projects
#五、能夠在linux-node4.example.com本機上測試docker登陸
docker login linux-node4.example.com
九、在其餘docker機器中配置登陸harbor(192.168.56.13)
mkdir -p /etc/docker/certs.d/linux-node4.example.com/ scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.cert /etc/docker/certs.d/linux-node4.example.com/ scp -r root@192.168.56.14:/home/work/harbor/ssl/linux-node4.example.com.key /etc/docker/certs.d/linux-node4.example.com/ scp -r root@192.168.56.14:/home/work/harbor/ssl/ca.crt /etc/docker/certs.d/linux-node4.example.com/
vi /usr/lib/systemd/system/docker.service # 添加--insecure-registry 192.168.56.14
''' ExecStart=/usr/bin/dockerd --insecure-registry 192.168.56.14 '''
systemctl restart docker.service # 重啓docker
111111
1111111111111111