banner
云野阁

云野阁

闲云野鹤,八方逍遥

docker映像倉庫搭建(Harbor)

任務目標#

  1. 完成 docker 映像倉庫的搭建

任務平台#

  1. 實體設備 --
  2. 作業系統:openEuler 22.03 LTS SP2

部署指南#

任務一:環境需求#

  1. 硬體配置

下圖列出了部署 Harbor 的最低硬體配置和推薦的硬體配置。

image-20240323215852040

  1. 網路端口

Harbor 要求在目標主機上打開以下端口

端口協議備註
443HTTPSHarbor 門戶和核心 API 接受此端口上的 HTTPS 請求
4443HTTPS連接到適用於 Harbor 的 Docker 內容信任服務
80HTTPHarbor 門戶和核心 API 接受此端口上的 HTTP 請求

任務二:基礎環境準備#

任務三:部署#

  1. 下載 Harbor#

wget https://github.com/goharbor/harbor/releases/download/v2.9.1/harbor-offline-installer-v2.9.1.tgz
#解壓
tar -vzxf harbor-offline-installer-v2.9.1.tgz
  1. 安裝 https 證書#

    1. 簡單版#
    #創建證書目錄,並賦予權限
    mkdir -p /data/cert/
    chmod  -R 777 /data/cert/
    cd /data/cert
    #創建私鑰
    openssl genrsa -des3 -out harbor.key 2048
    #生成ca證書,ip為本機ip
    openssl req -sha512 -new \
         -subj "/C=CN/ST=hennan/L=zhengzhou/O=qishi/OU=qishi/CN=images.store.net.crt" \
         -key harbor.key \
         -out harbor.csr
     #備份證書
     cp harbor.key  harbor.key.org
     #轉化為不帶密碼的私鑰
     openssl rsa -in harbor.key.org -out harbor.key
     #使用證書進行簽名
      openssl x509 -req -days 100000  -in harbor.csr -signkey harbor.key -out harbor.crt
    
    1. 官方版#
      #創建存放目錄
      mkdir -p /data/harbor-ca
      cd /data/harbor-ca
      
      • 生成證書頒發機構證書

      1. 生成 CA 證書私鑰
      openssl genrsa -out ca.key 4096
      
      1. 生成 CA 證書
      #CN後的內容為ip或者域名
      openssl req -x509 -new -nodes -sha512 -days 3650 \
       -subj "/C=CN/ST=henan/L=zhengzhou/O=qishi/OU=qishi/CN=hub-docker.xxx.net" \
       -key ca.key \
       -out ca.crt
      
      • 生成伺服器證書

      1. 生成私鑰
      #域名或ip命名
      openssl genrsa -out hub-docker.xxx.net.key 4096
      
      1. 生成證書簽名請求 (CSR)
      openssl req -sha512 -new \
          -subj "/C=CN/ST=henan/L=zhengzhou/O=qishi/OU=qishi/CN=hub-docker.xxx.net" \
          -key hub-docker.xxx.net.key \
          -out hub-docker.xxx.net.csr
      
      1. 生成 x509 v3 擴展文件
      cat > v3.ext <<-EOF
      authorityKeyIdentifier=keyid,issuer
      basicConstraints=CA:FALSE
      keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
      extendedKeyUsage = serverAuth
      subjectAltName = @alt_names
      
      [alt_names]
      DNS.1=hub-docker.xxx.net
      DNS.2=hub-docker.xxx
      DNS.3=hub-docker
      EOF
      
      1. 使用 v3.ext 生成證書
      openssl x509 -req -sha512 -days 3650 \
          -extfile v3.ext \
          -CA ca.crt -CAkey ca.key -CAcreateserial \
          -in hub-docker.xxx.net.csr \
          -out hub-docker.xxx.net.crt
      
      • 向 Harbor 和 Docker 提供證書

        • 將伺服器證書和密鑰複製到存放 harbor 使用證書的目錄
        #創建存放harbor使用證書的目錄
        mkdir -p /data/cert/
        #拷貝證書
         cp hub-docker.xxx.net.crt /data/cert/
         cp hub-docker.xxx.net.key /data/cert/
        
        • 轉換證書,供 docker 使用

             openssl x509 -inform PEM -in hub-docker.xxx.net.crt -out hub-docker.xxx.net.cert
             #創建存放docker使用證書目錄,命名方式為ip:端口,或者域名
             mkdir -p /etc/docker/certs.d/hub-docker.xxx.net/
             #拷貝證書
             cp hub-docker.xxx.net.cert /etc/docker/certs.d/hub-docker.xxx.net/
             cp hub-docker.xxx.net.key /etc/docker/certs.d/hub-docker.xxx.net/
             cp ca.crt /etc/docker/certs.d/hub-docker.xxx.net/
             #重啟docker
             systemctl restart docker
          
  2. 安裝 Harbor#

修改配置文件

cp harbor.yml.tmpl harbor.yml
vi harbor.yml
#################################
hostname: hub-docker.xxx.net   #修改為本機ip,或者自定義域名
http:
   port: 80 #端口可自定義
https:   
   port: 443 #端口可自定義
certificate: /data/harbor/harbor-ca/hub-docker.xxx.net.crt #證書路徑
private_key: /data/harbor/harbor-ca/hub-docker.xxx.net.key #私鑰路徑
harbor_admin_password: Harbor12345 #登錄密碼
data_volume: /data/harbor-data #數據存儲目錄
#################################

執行安裝

./install.sh  --with-trivy

瀏覽器輸入 ip 加端口訪問 (添加 hosts 後,域名訪問)

image-20240323220017893

任務四:設置 docker login 登錄憑證加密(要拉取映像的主機)#

  1. 安裝 pass
 #基礎環境
 yum install -y make
#獲取pass源碼
wget https://git.zx2c4.com/password-store/snapshot/password-store-1.7.4.tar.xz
#解壓到/usr/local/目錄
tar Jxf password-store-1.7.4.tar.xz -C /usr/local/
#執行安裝
cd /usr/local/password-store-1.7.4
make install
#驗證
 pass version
  1. 安裝 docker-credential-helpers
#安裝go基礎環境
yum -y install golang-1.17.3
#獲取docker-credential-helpers源碼
wget https://github.com/docker/docker-credential-helpers/archive/refs/tags/v0.8.0.tar.gz
tar -xf v0.8.0.tar.gz
 mv docker-credential-helpers-0.8.0 docker-credential-helpers
 cd docker-credential-helpers/
 #使用pass方式安裝
 make pass
 cp bin/build/docker-credential-pass /usr/bin/
 chmod +x /usr/bin/docker-credential-pass
  1. 修改密碼配置文件
#生成密鑰對
 gpg --full-generate-key
 #查看密鑰
 gpg --list-keys
 ##################################################
 /root/.gnupg/pubring.kbx
------------------------
pub   rsa3072 2023-11-30 [SC] [有效至:2025-11-29]
      56CCF64EC289B13B1C0F14CCF2BB16136358AEA4
uid             [ 绝对 ] qishi <[email protected]>
sub   rsa3072 2023-11-30 [E] [有效至:2025-11-29]
##################################################
 #初始化
 pass init 56CCF64EC289B13B1C0F14CCF2BB16136358AEA4
 
 #登錄docker倉庫,查看登錄憑證是否加密
 docker login hub-docker.xxx.net
 cat /root/.docker/config.json
 #######################################
 {
        "auths": {
                "hub-docker.xxx.net": {}
        },
        "credsStore": "pass"
}
 #######################################
 
  #創建密碼本保存文件目錄
  pass insert docker-credential-helpers/docker-pass-initialized-check
 #查看密碼本列表
  docker-credential-pass list
  #驗證密碼本
  yum install tree -y
  pass
  #以實際路徑為準
  pass show docker-credential-helpers/aW1hZ2VzLnN0b3JlLm5ldA==/admin

任務五:上傳下載映像(要拉取映像的主機)#

在需要拉取和上傳映像的主機上,修改 daemon.json 文件,再重啟 docker

vi /etc/docker/daemon.json
{
  "insecure-registries": ["hub-docker.xxx.net"] #ip或者域名
}

systemctl restart docker

拉取和上傳映像

#拉取nginx映像做測試
docker pull nginx
#重新打上標籤,其中test為harbor中存在的項目
docker tag nginx:latest 172.20.1.55/test/nginx-test:1.0
docker tag nginx:latest hub-docker.xxx.net/test/nginx-test:1.0
#登錄倉庫,輸入用戶名和密碼
docker login 172.20.1.55
docker login hub-docker.xxx.net
systemctl restart docker
#將映像推送到倉庫
docker push 172.20.1.55/test/nginx-test:1.0
docker push hub-docker.xxx.net/test/nginx-test:1.0
#拉取映像
docker pull 172.20.1.55/test/nginx-test:1.0
docker pull hub-docker.xxx.net/test/nginx-test:1.0

任務六:cosign 簽名映像(要拉取映像的主機)#

mkdir -p /data/cosign
#下載,安裝cosign
wget https://github.com/sigstore/cosign/releases/download/v2.2.2/cosign-2.2.2-1.x86_64.rpm
rpm -ivh cosign-2.2.2-1.x86_64.rpm
#arm
wget https://github.com/sigstore/cosign/releases/download/v2.2.2/cosign-2.2.2-1.aarch64.rpm
rpm -ivh cosign-2.2.2-1.aarch64.rpm
#驗證安裝
cosign version
#生成密鑰
cosign generate-key-pair
#對映像進行加密簽名
cosign sign  --allow-insecure-registry --key /data/cosign/cosign.key images.store.net/test/test-nginx:1.0.0

#解密驗證
cosign  verify  --allow-insecure-registry --key /data/cosign/cosign.pub images.store.net/test/test-nginx:1.0.0
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。