Kubernetes 的安全性和效率取決於良好的許可權控管和容器映像檔管理。本文首先回顧了 Kubernetes RBAC 的實作,演示如何設定不同名稱空間的使用者許可權,確保最小許可權原則的落實。接著,文章探討了 Artifact Repository 和 Container Registry 的核心概念和應用場景,並比較了 Docker Hub 和 AWS ECR 兩種主流容器儲存函式庫的優缺點,提供實用的操作和程式碼範例,幫助讀者快速上手容器映像檔的儲存、管理和佈署。最後,文章展望了容器技術的未來發展趨勢,並強調容器儲存函式庫在現代軟體開發流程中的重要性。
在 Kubernetes 環境中,RBAC 是不可或缺的許可權控管機制。透過設定不同角色和許可權,我們可以限制使用者對叢集資源的存取,確保叢集的安全性和穩定性。實務上,我們可以根據團隊成員的角色,例如開發、維運或測試,授予其相應的許可權,避免不必要的風險。此外,容器映像檔的管理也是 Kubernetes 叢集運作的關鍵環節。選擇合適的 Artifact Repository 或 Container Registry,可以有效地儲存、管理和分發容器映像檔,提升應用程式佈署的效率和可靠性。
Kubernetes 許可權控管與容器註冊
在前一章中,我們學習瞭如何使用 microk8s 實作 Kubernetes 的 Role-Based Access Control(RBAC)。本章將探討容器映像檔的管理,特別是 Artifact Repository 和 Container Registry 的相關軟體和服務。
Kubernetes RBAC 實作回顧
在開始討論容器註冊之前,讓我們先回顧一下前一章的內容。我們建立了三類別 Kubernetes 使用者:k8s-admins、k8s-devops 和 k8s-readonly,並根據最小許可權原則授予他們相應的叢集許可權。
設定 k8sdevops01 使用者許可權
首先,我們為 k8sdevops01 使用者設定了 edit 許可權,使其能夠在 bu01 名稱空間中執行大多數叢集相關操作。
microk8s kubectl create rolebinding nrole-bu01-devops --clusterrole=edit --user k8sdevops01 --namespace bu01
測試 k8sdevops01 使用者許可權
接著,我們測試了 k8sdevops01 使用者的許可權,確認其能夠在 bu01 名稱空間中列出 Pod,但無法存取 default 名稱空間。
./kubectl get pods --namespace bu01
./kubectl get pods --namespace default
輸出結果如下:
No resources found in bu01 namespace.
Error from server (Forbidden): pods is forbidden: User "k8sdevops01" cannot list resource "pods" in API group "" in the namespace "default"
進一步測試 k8sdevops01 使用者許可權
我們還測試了 k8sdevops01 使用者在 bu01 名稱空間中建立 Pod 的許可權。
./kubectl run testrun --image nginx --namespace bu01
./kubectl get pods --namespace bu01
輸出結果如下:
pod/testrun created
NAME READY STATUS RESTARTS AGE
testrun 1/1 Running 0 33s
設定 k8sdevops02 使用者許可權
現在,讀者可以嘗試為 k8sdevops02 使用者設定 edit 許可權,使其僅能在 bu02 名稱空間中執行操作。
Artifact Repository 與 Container Registry
在 Kubernetes 叢集中執行工作負載需要容器映像檔。我們需要一個集中存放和管理這些映像檔的地方。
什麼是 Artifact Repository?
Artifact Repository 是用於儲存和管理軟體應用程式建置後的產物(Artifact)的倉函式庫。在容器化的場景中,這些產物通常是容器映像檔。
Container Registry 的功能
Container Registry 是專門用於儲存和管理容器映像檔的倉函式庫。它提供了安全、可靠的方式來儲存和分發容器映像檔。
Container Registry 的進階功能
一些 Container Registry 軟體提供了進階功能,例如:
- 安全性掃描:掃描容器映像檔中的安全漏洞。
- 漏洞管理:整合安全平台,提供漏洞管理功能。
為什麼需要 Artifact Repository 和 Container Registry?
Kubernetes 需要一個可靠的 Artifact Repository 或 Container Registry 來執行工作負載。這些倉函式庫提供了集中管理容器映像檔的能力,使得 Kubernetes 叢集能夠順暢地執行工作負載。
流行的 Artifact Repository 和 Container Registry 選項
市面上有許多流行的 Artifact Repository 和 Container Registry 選項。一些軟體支援多種 Artifact 型別,例如 Maven、NuGet、Conan 和容器映像檔。其他軟體則專注於特定型別的 Artifact。
選項比較
選擇適合的 Artifact Repository 或 Container Registry 需要根據具體的使用場景進行評估。本文將探討一些流行的選項,並提供相關的比較和評估。
內容解密:
本章內容涵蓋了 Kubernetes RBAC 的實作和容器映像檔的管理。透過設定不同的使用者許可權,我們可以確保叢集的安全性和可靠性。同時,Artifact Repository 和 Container Registry 的選擇對於 Kubernetes 叢集的運作至關重要。
程式碼範例:
# 建立 rolebinding
microk8s kubectl create rolebinding nrole-bu01-devops --clusterrole=edit --user k8sdevops01 --namespace bu01
# 測試 k8sdevops01 使用者許可權
./kubectl get pods --namespace bu01
./kubectl get pods --namespace default
# 在 bu01 名稱空間中建立 Pod
./kubectl run testrun --image nginx --namespace bu01
./kubectl get pods --namespace bu01
圖表翻譯:
此圖示展示了 Kubernetes 叢集中的使用者許可權架構。
graph LR
A[Kubernetes 叢集] --> B[k8s-admins]
A --> C[k8s-devops]
A --> D[k8s-readonly]
C --> E[bu01 名稱空間]
C --> F[bu02 名稱空間]
圖表翻譯: 此圖表呈現了 Kubernetes 叢集中的使用者許可權架構,包括 k8s-admins、k8s-devops 和 k8s-readonly 三類別使用者。其中,k8s-devops 使用者被授予特定名稱空間的許可權。
容器儲存與檢索的多種選擇
在支援 Kubernetes 的過程中,瞭解不同容器儲存與檢索服務的重要性不言而喻。以下將介紹多個流行的容器儲存函式庫與其使用方法。
容器儲存函式庫概述
目前有多種容器儲存函式庫可供選擇,包括但不限於以下幾種:
- AWS Elastic Container Registry(ECR):AWS 提供的雲原生服務,用於儲存和檢索容器。
- Docker Hub:Docker 生態系統中最常用的容器儲存函式庫,適合 Docker 使用者。
- GCP - Google Container Registry:Google Cloud Platform 提供的容器儲存服務,支援 Docker 映像管理及漏洞分析。
- Azure - Azure Container Registry:微軟 Azure 的容器儲存服務,支援 Docker 及 Open Container Initiative(OCI)映像。
- Sonatype Nexus:用於管理軟體供應鏈中的二進位制檔案和構建成品的儲存函式庫。
- JFrog Artifactory:另一款流行的構件儲存函式倉管理工具。
這些容器儲存函式庫部分為自託管模式,需要自行佈署和管理;部分則為 SaaS 模式,如 ECR、GCR 和 Docker Hub,具有較低的學習曲線和快速佈署的優勢。
Docker Hub 使用
預備條件
- 擁有 Docker Hub 帳戶。
操作步驟
-
登入 Docker Hub:
docker login輸入 Docker Hub 使用者名稱和密碼進行登入。
-
確認本地容器映像:
docker images local/mynginx檢查本地是否存在所需的容器映像。
-
重新標記映像: 為了將映像推播到 Docker Hub,需要將映像重新標記為符合 Docker Hub 帳戶中的儲存函式庫名稱。
docker image tag local/mynginx:01 gitshiva/mynginx:1.0這裡的
gitshiva應替換為您的 Docker Hub 使用者名稱。 -
確認重新標記結果:
docker images gitshiva/mynginx檢查新標籤是否成功新增。
-
推播映像到 Docker Hub:
docker push gitshiva/mynginx:1.0將重新標記的映像推播到 Docker Hub。
-
驗證推播結果: 登入 Docker Hub 網頁控制檯,確認映像是否成功上傳。
注意事項
- 上傳到 Docker Hub 的映像預設為公開,除非您設定為私有。
- Docker Hub 提供安全性掃描功能,但這是一項付費服務。
AWS Elastic Container Registry(ECR)使用
預備條件
- 擁有 AWS 帳戶。
操作步驟
-
進入 AWS ECR 服務: 在 AWS 控制檯中搜尋 ECR 並進入其服務頁面。
-
建立儲存函式庫: 點選「Get Started」按鈕以建立新的儲存函式庫。
-
填寫儲存函式庫資訊: 輸入儲存函式庫名稱,例如
mynginx,並選擇建立儲存函式庫。 -
推播映像到 ECR: 按照 AWS 提供的指引,使用 AWS CLI 登入 ECR 並推播映像。
注意事項
- 請注意,AWS ECR 中的儲存函式庫名稱應與您的應用程式或服務名稱相關,以方便管理。
- 使用 AWS ECR 時,請留意相關的費用計算。
程式碼範例與操作步驟詳解
Docker 登入操作範例
shiva@wks01:~$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: gitshiva
Password:
WARNING! Your password will be stored unencrypted in /home/shiva/.docker/config.json.
Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
shiva@wks01:~$
映像重新標記範例
shiva@wks01:~$ docker image tag local/mynginx:01 gitshiva/mynginx:1.0
shiva@wks01:~$
推播映像範例
shiva@wks01:~$ docker push gitshiva/mynginx:1.0
The push refers to repository [docker.io/gitshiva/mynginx]
1e114fab9eb6: Pushed
f7a3d80adbc5: Pushed
49760d369cb5: Pushed
f553c6316d8a: Pushed
bce45ce613d3: Mounted from library/ubuntu
1.0: digest: sha256:36247036a7b0c3c058523935c4596b41ccd1150e677adc45e7ebc14405823a6b size:1365
shiva@wks01:~$
內容解密:
此段落展示瞭如何使用 Docker 命令列工具登入 Docker Hub、重新標記本地映像、推播映像到 Docker Hub,以及驗證推播結果。這些步驟對於在 Kubernetes 環境中使用容器映像至關重要。
隨著容器技術和 Kubernetes 的不斷發展,容器儲存函式庫的功能和安全性將進一步增強。未來可能會出現更多創新性的容器管理方案,以滿足日益增長的應用佈署需求。
圖表翻譯:
此圖示展示了 Docker Hub 和 AWS ECR 的基本使用流程,包括登入、建立儲存函式庫、推播映像等步驟。 圖表翻譯: 此圖表詳細展示了容器儲存與檢索的多種選擇,並對 Docker Hub 和 AWS ECR 的使用步驟進行了圖解說明。
標題與章節規劃
一級標題
容器儲存與檢索的多種選擇
二級標題
容器儲存函式庫概述
Docker Hub 使用
AWS Elastic Container Registry(ECR)使用
三級標題
預備條件
操作步驟
注意事項
四級標題
程式碼範例與操作步驟詳解
最終檢查與驗證
- 確認所有程式碼範例均有詳細的註解和說明。
- 驗證所有步驟的可行性和正確性。
- 確保文章結構完整,邏輯清晰。
- 檢查語言表達是否符合台灣繁體中文的習慣。
- 確認無任何殘留的標記或非文章內容。
總字數:6,000 - 10,000 字。
在AWS上建立容器映像檔倉函式庫並上傳映像檔
在現代化的軟體開發流程中,容器技術已成為不可或缺的一部分。AWS Elastic Container Registry(ECR)是一種完全託管的容器映像檔倉函式庫服務,可讓開發者輕鬆儲存、管理及佈署容器映像檔。本章節將介紹如何在AWS上建立容器映像檔倉函式庫並上傳映像檔。
建立AWS ECR倉函式庫
首先,我們需要在AWS上建立一個ECR倉函式庫。請按照以下步驟進行:
- 登入AWS管理控制檯。
- 導航至ECR服務頁面。
- 點選「建立儲存函式庫」按鈕。
- 輸入儲存函式庫名稱和其他必要資訊。
- 點選「建立儲存函式庫」按鈕以完成建立。
建立ECR倉函式庫
graph LR
A[登入AWS管理控制檯] --> B[導航至ECR服務頁面]
B --> C[點選「建立儲存函式庫」按鈕]
C --> D[輸入儲存函式庫名稱和其他必要資訊]
D --> E[點選「建立儲存函式庫」按鈕]
圖表翻譯: 此圖示展示了在AWS上建立ECR倉函式庫的步驟,包括登入AWS管理控制檯、導航至ECR服務頁面、點選「建立儲存函式庫」按鈕、輸入儲存函式庫名稱和其他必要資訊,以及點選「建立儲存函式庫」按鈕以完成建立。
安裝AWS CLI v2
為了與AWS服務互動,我們需要在本地機器上安裝AWS CLI v2。以下是安裝步驟:
- 下載AWS CLI v2安裝包。
- 解壓縮安裝包。
- 執行安裝指令碼。
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
sudo apt install unzip -y
unzip awscliv2.zip
sudo ./aws/install
內容解密:
上述程式碼片段展示瞭如何在Linux系統上安裝AWS CLI v2。首先,我們使用curl命令下載AWS CLI v2安裝包。接著,使用unzip命令解壓縮安裝包。最後,執行安裝指令碼以完成安裝。
組態AWS CLI
安裝完成後,我們需要組態AWS CLI以使用我們的AWS憑證。請按照以下步驟進行:
- 執行
aws configure命令。 - 輸入AWS存取金鑰ID和秘密存取金鑰。
- 輸入預設區網域名稱和其他必要資訊。
aws configure
內容解密:
上述程式碼片段展示瞭如何組態AWS CLI。首先,我們執行aws configure命令以啟動組態精靈。接著,輸入AWS存取金鑰ID和秘密存取金鑰。最後,輸入預設區網域名稱和其他必要資訊以完成組態。
上傳容器映像檔至ECR
組態完成後,我們可以使用AWS CLI將容器映像檔上傳至ECR。請按照以下步驟進行:
- 登入ECR服務。
- 標記容器映像檔。
- 將容器映像檔推播至ECR。
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/p3e7a3j8
docker tag local/mynginx:01 public.ecr.aws/c1b1n8j4/mynginx:latest
docker push public.ecr.aws/c1b1n8j4/mynginx:latest
內容解密:
上述程式碼片段展示瞭如何將容器映像檔上傳至ECR。首先,我們使用aws ecr-public get-login-password命令取得登入密碼,並使用docker login命令登入ECR服務。接著,使用docker tag命令標記容器映像檔。最後,使用docker push命令將容器映像檔推播至ECR。
驗證上傳結果
上傳完成後,我們可以驗證上傳結果。請按照以下步驟進行:
- 登入AWS管理控制檯。
- 導航至ECR服務頁面。
- 驗證容器映像檔是否已上傳成功。
驗證上傳結果
graph LR
A[登入AWS管理控制檯] --> B[導航至ECR服務頁面]
B --> C[驗證容器映像檔是否已上傳成功]
圖表翻譯: 此圖示展示瞭如何驗證容器映像檔是否已上傳成功至ECR,包括登入AWS管理控制檯、導航至ECR服務頁面,以及驗證容器映像檔是否已上傳成功。