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 使用

預備條件

  1. 擁有 Docker Hub 帳戶。

操作步驟

  1. 登入 Docker Hub

    docker login
    

    輸入 Docker Hub 使用者名稱和密碼進行登入。

  2. 確認本地容器映像

    docker images local/mynginx
    

    檢查本地是否存在所需的容器映像。

  3. 重新標記映像: 為了將映像推播到 Docker Hub,需要將映像重新標記為符合 Docker Hub 帳戶中的儲存函式庫名稱。

    docker image tag local/mynginx:01 gitshiva/mynginx:1.0
    

    這裡的 gitshiva 應替換為您的 Docker Hub 使用者名稱。

  4. 確認重新標記結果

    docker images gitshiva/mynginx
    

    檢查新標籤是否成功新增。

  5. 推播映像到 Docker Hub

    docker push gitshiva/mynginx:1.0
    

    將重新標記的映像推播到 Docker Hub。

  6. 驗證推播結果: 登入 Docker Hub 網頁控制檯,確認映像是否成功上傳。

注意事項

  • 上傳到 Docker Hub 的映像預設為公開,除非您設定為私有。
  • Docker Hub 提供安全性掃描功能,但這是一項付費服務。

AWS Elastic Container Registry(ECR)使用

預備條件

  1. 擁有 AWS 帳戶。

操作步驟

  1. 進入 AWS ECR 服務: 在 AWS 控制檯中搜尋 ECR 並進入其服務頁面。

  2. 建立儲存函式庫: 點選「Get Started」按鈕以建立新的儲存函式庫。

  3. 填寫儲存函式庫資訊: 輸入儲存函式庫名稱,例如 mynginx,並選擇建立儲存函式庫。

  4. 推播映像到 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倉函式庫。請按照以下步驟進行:

  1. 登入AWS管理控制檯。
  2. 導航至ECR服務頁面。
  3. 點選「建立儲存函式庫」按鈕。
  4. 輸入儲存函式庫名稱和其他必要資訊。
  5. 點選「建立儲存函式庫」按鈕以完成建立。

建立ECR倉函式庫

  graph LR
    A[登入AWS管理控制檯] --> B[導航至ECR服務頁面]
    B --> C[點選「建立儲存函式庫」按鈕]
    C --> D[輸入儲存函式庫名稱和其他必要資訊]
    D --> E[點選「建立儲存函式庫」按鈕]

圖表翻譯: 此圖示展示了在AWS上建立ECR倉函式庫的步驟,包括登入AWS管理控制檯、導航至ECR服務頁面、點選「建立儲存函式庫」按鈕、輸入儲存函式庫名稱和其他必要資訊,以及點選「建立儲存函式庫」按鈕以完成建立。

安裝AWS CLI v2

為了與AWS服務互動,我們需要在本地機器上安裝AWS CLI v2。以下是安裝步驟:

  1. 下載AWS CLI v2安裝包。
  2. 解壓縮安裝包。
  3. 執行安裝指令碼。
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憑證。請按照以下步驟進行:

  1. 執行aws configure命令。
  2. 輸入AWS存取金鑰ID和秘密存取金鑰。
  3. 輸入預設區網域名稱和其他必要資訊。
aws configure

內容解密:

上述程式碼片段展示瞭如何組態AWS CLI。首先,我們執行aws configure命令以啟動組態精靈。接著,輸入AWS存取金鑰ID和秘密存取金鑰。最後,輸入預設區網域名稱和其他必要資訊以完成組態。

上傳容器映像檔至ECR

組態完成後,我們可以使用AWS CLI將容器映像檔上傳至ECR。請按照以下步驟進行:

  1. 登入ECR服務。
  2. 標記容器映像檔。
  3. 將容器映像檔推播至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。

驗證上傳結果

上傳完成後,我們可以驗證上傳結果。請按照以下步驟進行:

  1. 登入AWS管理控制檯。
  2. 導航至ECR服務頁面。
  3. 驗證容器映像檔是否已上傳成功。

驗證上傳結果

  graph LR
    A[登入AWS管理控制檯] --> B[導航至ECR服務頁面]
    B --> C[驗證容器映像檔是否已上傳成功]

圖表翻譯: 此圖示展示瞭如何驗證容器映像檔是否已上傳成功至ECR,包括登入AWS管理控制檯、導航至ECR服務頁面,以及驗證容器映像檔是否已上傳成功。