為應用程式建置映像檔
Docker 映像檔是您使用 IBM Cloud® Kubernetes Service 建立的每個容器的基礎。
映像檔是從 Dockerfile 所建立的,該 Dockerfile 檔案包含建置映像檔的指示。 Dockerfile 可能會參照其指示中個別儲存的建置構件(例如應用程式、應用程式的配置及其相依關係)。
將容器從 IBM Cloud Container Registry 映像檔部署至 default Kubernetes 名稱空間
您可以將容器從 IBM 提供的公用映像檔或 IBM Cloud Container Registry 名稱空間中所儲存的專用映像檔部署至叢集裡。 如需叢集如何存取登錄映像檔的相關資訊,請參閱瞭解如何授權叢集以從 IBM Cloud Container Registry 取回映像檔。
開始之前:
-
建立叢集。
-
建立一個名為
<deployment>.yaml的部署設定檔。 -
從 IBM Cloud Container Registry 中的名稱空間,定義要使用的部署及映像檔。
apiVersion: apps/v1 kind: Deployment metadata: name: <deployment> spec: replicas: <number_of_replicas> selector: matchLabels: app: <app_name> template: metadata: labels: app: <app_name> spec: containers: - name: <app_name> image: <region>.icr.io/<namespace>/<image>:<tag><deployment>- 為您的部署命名。
<number_of_replicas>- 輸入部署所建立的抄本 Pod 數目。
app: <app_name>- 使用應用程式的名稱作為容器的標籤。
name: <app_name>- 為容器提供名稱,例如
app標籤的名稱。 image: <region>.icr.io/namespace>/image>:tag>-
- 將映像檔 URL 變數取代為映像檔的資訊:
region>: 該註冊域的區域性 IBM Cloud Container Registry API 端點。 若要列出您所登入之地區的網域,請執行ibmcloud cr api。namespace>: 登錄名稱空間。 若要取得名稱空間資訊,請執行ibmcloud cr namespace-list。image>:tag>: 您要為容器使用的映像檔和標籤。 若要列出登錄名稱空間中可用的映像檔,請執行ibmcloud cr images。
-
在叢集裡建立部署。
kubectl apply -f <deployment>.yaml
在 Pod 部署中參照映像檔取回密碼
如果叢集管理員未 將映像檔拉取密鑰儲存於 Kubernetes 服務帳戶中,則所有未指定服務帳戶的部署都將無法使用該映像檔拉取密鑰來部署容器。 您可以改為在 Pod 部署中定義映像檔取回密碼。 當您在 Pod 部署中引用映像拉取密鑰時,該映像拉取密鑰僅對此 Pod 有效,且無法在 Kubernetes 命名空間中的不同 Pod 之間共用。
開始之前
- 建立映像檔取回密碼,以存取其他登錄或
default以外之 Kubernetes 名稱空間中的映像檔。 - 請登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。
若要引用您 Pod 部署中的映像拉取密鑰,
-
建立名為
mypod.yaml的 Pod 配置檔。 -
定義 Pod 及映像檔取回密碼,以存取 IBM Cloud Container Registry 中的映像檔。
若要存取私人圖片,
apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: <container_name> image: <region>.icr.io/<namespace_name>/<image_name>:<tag> imagePullSecrets: - name: <secret_name>若要存取 IBM Cloud 的公開映像檔,
apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: <container_name> image: icr.io/<image_name>:<tag> imagePullSecrets: - name: <secret_name>container_name>- 要部署至叢集的容器名稱。
namespace_name>: 儲存該映像檔的登錄命名空間。 若要列出可用的名稱空間,請執行ibmcloud cr namespace-list。image_name>: 要使用的圖片名稱。 若要列出 IBM Cloud 帳戶中的可用映像檔,請執行ibmcloud cr image-list。tag>: 您要使用的圖片版本。 若未指定標籤,系統將預設使用標籤為「最新」的圖片。<secret_name>: 您先前所建立的映像拉取密鑰名稱。
-
儲存變更。
-
在叢集裡建立部署。
kubectl apply -f mypod.yaml
將映像檔推送至 IBM Cloud Container Registry
在叢集管理員 使用 IBM Cloud Container Registry 設定映像庫 後,您可以透過將映像新增至您的命名空間,安全地儲存並與其他使用者共用 Docker 映像。
舉例來說,您可以從任何私有或公開的註冊庫來源拉取一張圖片,然後為其加上標籤,以便日後在 IBM Cloud Container Registry 中使用。 或者,您可以將您使用的 Docker 映像檔推送至名稱空間,以便其他使用者可以存取該映像檔。 若要開始使用,請參閱 將映像檔新增至名稱空間。
使用 Vulnerability Advisor 在 IBM Cloud Container Registry 中管理映像檔的安全
Vulnerability Advisor 檢查由 IBM、第三方提供,或新增至您組織的 IBM Cloud Container Registry 命名空間中的容器映像的安全狀態。
當您將映像檔新增至名稱空間時,Vulnerability Advisor 會自動掃描映像檔,以偵測安全問題及潛在漏洞。 如果找到安全問題,會提供指示以協助修正報告的漏洞。 若要開始使用,請參閱 使用 Vulnerability Advisor。
設定容器映像檔的授信內容
您可以從已簽署並儲存在 IBM Cloud Container Registry 中的授信映像檔中建置容器,並防止從未簽署或有漏洞的映像檔進行部署。
- 簽署映像檔以取得授信內容。 在設定映像檔的信任之後,您可以管理可將映像檔推送至登錄的授信內容及簽章者。
- 若要施行原則,以便只能使用已簽署的映像檔在叢集中建置容器,請 安裝開放程式碼 Portieris 專案。
- 叢集使用者可以部署從信任映像檔建置的應用程式。
在您的叢集中啟用影像安全性強制執行
當您在叢集中啟用映像安全強制執行功能時,系統會安裝開源專案「Portieris」( Kubernetes )。 接著,您可以建立映像檔政策,以防止不符合政策要求的 Pod(例如未簽名的映像檔)在您的叢集中執行。
如需相關資訊,請參閱 Portieris 文件。
變形映像檔:預設情況下,Portieris 會使用 MutatingAdmissionWebhook 存取控制器,將您的映像檔進行變形處理,使其透過摘要(digest)而非標籤(tag)來引用該映像檔。 不過,您可能有一些部署技術會拒絕變異的映像檔。 若是如此,您可以使用 影像突變選項 和 原則 來變更預設行為。
啟用或停用映像檔安全強制執行
您可以從 CLI 或主控台啟用或停用叢集的映像檔安全強制執行。 有關較早版本的資訊,請參閱 Portieris 的文件。
使用 CLI 啟用或停用映像檔安全強制執行
請參閱下列指令。
從主控台啟用或停用映像檔安全強制執行
- 從 主控台,選擇您的群集。
- 找到影像安全強制執行欄位,然後按一下啟用或停用。
預設映像檔原則
當您啟用映像安全強制執行功能時,IBM Cloud Kubernetes Service 會自動在您的叢集中建立某些映像政策。 當您停用此特性時,會移除基礎 ClusterImagePolicy CRD,這會移除您所建立的所有預設映像檔原則及任何自訂映像檔原則。
- 名稱為
ibm-signed-image-enforcement的映像檔原則會將名稱空間中執行的映像檔限制為僅限 IBM Cloud Kubernetes Service 映像檔。 請勿修改這些映像檔原則。 您所做的任何變更都會在幾分鐘內改寫。 - 其他映像檔原則 (例如
default或default-allow-all) 允許不受其他映像檔原則限制的映像檔。 您可以修改這些映像檔原則,並保留您所做的變更,但不要重新命名映像檔原則。 如果您重新命名原則,則會建立更多具有預設名稱及設定的原則。
若要檢閱叢集裡的映像檔原則,
開始之前
請登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。
-
列出廣域套用至叢集的映像檔原則。 如需範例配置,請參閱 Portieris 原則文件。
kubectl get ClusterImagePolicy -
列出套用至叢集內特定名稱空間的映像檔原則。 如需範例配置,請參閱 Portieris 原則文件。
kubectl get ImagePolicy --all-namespaces