03: 使用docker搭建Harbor私有鏡像倉庫

1.1 harbor介紹

  一、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架構圖瀏覽器

       

  三、主要組件安全

      

 1.2 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.3 爲Harbor配置Https

  一、簡介      

      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

相關文章
相關標籤/搜索