k8sharbor——企業級容器鏡像倉庫

一、概述

k8sharbor是一個企業級的容器鏡像倉庫,是CNCF(Cloud Native Computing Foundation)的孵化項目。它支持存儲、簽名和掃描鏡像。Harbor提供了CLI和API來管理鏡像倉庫,同時也可以與pre-commit、RBAC等集成。

Harbor是一個開源項目,旨在解決企業在使用容器時可能面臨的安全和管理問題,提供了多租戶、LDAP/AD、API、可擴展性等功能。它支持Docker和Kubernetes,並允許管理員設置存儲、調度和安全策略等等。

二、安裝與配置

1、安裝前的準備工作:


# 新建harbor用戶和用戶組
sudo useradd -r -s /bin/false harbor

# 新建配置文件目錄
sudo mkdir -p /etc/harbor/

# 新建數據存儲目錄
sudo mkdir -p /data/harbor

# 將harbor用戶添加到docker組中
sudo usermod -aG docker harbor

2、下載並解壓Harbor離線安裝包:


wget https://storage.googleapis.com/harbor-releases/release-2.1.2/harbor-offline-installer-v2.1.2.tgz
tar -zxvf harbor-offline-installer-v2.1.2.tgz
cd harbor

3、修改harbor.cfg:


# 設置Harbor的URI
hostname = hub.example.com

# 管理員密碼
harbor_admin_password = Harbor12345

# 數據庫密碼
database_password = root123

# 海外用戶訪問速度可選配置
https:
  port: 443
  certificate: /your/certificate/path
  private_key: /your/private/key/path

# 使用Docker Compose進行安裝
docker-compose up -d

三、鏡像管理

1、鏡像庫的管理:


# 新增項目
curl -X POST -H "Content-Type:application/json" -H "Authorization: Basic YWRtaW46SGFyYm9yMTIzNDU=" http://hub.example.com/api/v2.0/projects -d '{"name": "test"}'

# 刪除項目
curl -X DELETE -H "Authorization: Basic YWRtaW46SGFyYm9yMTIzNDU=" http://hub.example.com/api/v2.0/projects/1

2、鏡像的上傳和下載:


# 登錄
docker login -u admin -p Harbor12345 hub.example.com

# 推送
docker tag nginx:latest hub.example.com/test/nginx:latest
docker push hub.example.com/test/nginx:latest

# 拉取
docker pull hub.example.com/test/nginx:latest

3、鏡像掃描與漏洞修復:


# 安裝和配置Trivy掃描器
wget https://github.com/aquasecurity/trivy/releases/download/v0.15.0/trivy_0.15.0_Linux-64bit.tar.gz
tar zxvf trivy_0.15.0_Linux-64bit.tar.gz
sudo mv trivy /usr/local/bin

# 掃描並列出漏洞
trivy -no-progress alpine:3.10

# 使用Harbor來掃描你的Docker鏡像
curl -X POST http://hub.example.com/api/security/scan -H 'Content-Type: application/json' -H 'Authorization: Basic YWRtaW46SGFyYm9yMTIzNDU=' -d '{"registry":"https://index.docker.io","repo":"library/python","tag":"2.7"}'

四、RBAC權限管理

1、基本角色:


# 只讀用戶
docker login -u read-only-user -p password hub.example.com

# 項目管理員
docker login -u project-admin -p password hub.example.com

# 系統管理員
docker login -u admin -p Harbor12345 hub.example.com

2、鏡像倉庫的權限管理:


# 新增用戶
curl -u admin:Harbor12345 -H "Content-Type: application/json" -X POST "http://hub.example.com/api/v2.0/users" -d '{"username": "testuser","password":"Testpassword1%","email":"test@example.com","realname":"testuser","comment":""}'

# 修改用戶密碼
curl -u admin:Harbor12345 -H "Content-Type: application/json" -X PUT "http://hub.example.com/api/users/password?username=testuser" -d '{"new_password": "Testpassword2%"}'

# 新增角色
curl -u admin:Harbor12345 -H "Content-Type: application/json" -X POST "http://hub.example.com/api/v2.0/projects/1/members" -d '{"member_user":{"username":"testuser"},"role_id":2}'

五、自動賦予權限的pre-commit Hook

1、自動構建:


# 以Nginx為例,新建一個Dockerfile
FROM nginx:latest
COPY nginx.conf /etc/nginx/conf.d/default.conf

# 創建pre-commit hook
touch .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit

# 寫入shell腳本
#!/bin/bash
if docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v ${PWD}:/work uumpa/harbor-precommit
then
    exit 0
else
    exit 1
fi

# 提交代碼
git add .
git commit -m "feat: add Nginx server"

2、自動賦予項目管理員權限:


# 新建push事件的一個處理頁面(push.php)
 array(
        'user_id' => $user_id,
        'username' => $user
    ),
    'role_id' => 2
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Basic '.$auth_token));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$server_output = curl_exec($ch);
curl_close($ch);
?>

六、總結

本文介紹了k8sharbor——一個企業級容器鏡像倉庫的安裝與配置、鏡像管理、RBAC權限管理和使用pre-commit Hook實現自動賦予權限等方面。它可以幫助企業在使用容器時提高安全性和管理效率,值得一試。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/245538.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:09
下一篇 2024-12-12 13:09

相關推薦

  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • 現在鏡像站不行了,怎麼辦?

    現在鏡像站不行了是很常見的問題,本文將從多個方面對此問題進行詳細闡述,為大家提供解決方案。 一、檢查網絡環境 鏡像站不通常見的原因之一是網絡問題,可能是個人網絡不穩定,也可能是IS…

    編程 2025-04-29
  • 解決docker-compose 容器時間和服務器時間不同步問題

    docker-compose是一種工具,能夠讓您使用YAML文件來定義和運行多個容器。然而,有時候容器的時間與服務器時間不同步,導致一些不必要的錯誤和麻煩。以下是解決方法的詳細介紹…

    編程 2025-04-29
  • Gogs倉庫名為什麼必須是英文?

    對於使用Gogs進行代碼管理的開發者來說,他們可能已經發現Gogs倉庫名需要使用英文命名。這是為什麼呢?下面我們將分別從歷史原因、技術原因、國際化考慮三個方面進行詳細闡述。 一、歷…

    編程 2025-04-29
  • EulerOS V2R7:企業級開發首選系統

    本文將從多個方面為您介紹EulerOS V2R7,包括系統簡介、安全性、易用性、靈活性和應用場景等。 一、系統簡介 EulerOS V2R7是一個華為公司開發的企業級操作系統,該系…

    編程 2025-04-28
  • yarn npm 倉庫用法介紹及使用案例

    本文將從多個方面對yarn npm倉庫進行詳細闡述,並為你提供一些實際使用案例。 一、npm和yarn的比較 npm和yarn都是JavaScript的包管理工具。npm在Java…

    編程 2025-04-27
  • 如何在Python中配置國內鏡像源

    如果你使用Python進行開發,那麼肯定會遇到下載模塊或庫速度慢的情況。這時,我們就可以配置國內鏡像源來解決這一問題。本文將會從多個方面來介紹如何配置國內鏡像源。 一、pip配置國…

    編程 2025-04-27
  • Python數據容器切片

    本文將從多個方面詳細闡述Python數據容器切片的應用、技巧和方法。 一、切片的基本操作 Python的數據容器包括字符串、列表、元組、字典等,而切片是對這些容器進行子序列提取的常…

    編程 2025-04-27
  • 如何刪除gitee遠程倉庫並清除idear中相關文件

    可能由於多種原因,我們需要刪除gitee遠程倉庫並清除idear中相關文件,以下為詳細步驟: 一、刪除gitee遠程倉庫 1、首先登錄gitee賬號,找到需要刪除的倉庫。 2、點擊…

    編程 2025-04-27
  • Docker批量刪除容器詳解

    一、前言 Docker是一個開源的應用容器引擎,提供了一種輕量級容器化技術,方便快捷的進行應用打包、發布、運行。作為廣泛應用的技術之一,Docker是開發、測試、運維的得力助手。但…

    編程 2025-04-25

發表回復

登錄後才能評論