为应用程序构建映像
Docker 映像是使用 IBM Cloud® Kubernetes Service 所创建的每一个容器的基础。
映像是通过 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>: 您希望为容器使用的镜像和标签。simplified-chinese (mainland) 要列出注册表名称空间中可用的映像,请运行ibmcloud cr images。
-
在集群中创建部署。
kubectl apply -f <deployment>.yaml
在 pod 部署中引用映像拉取私钥
如果集群管理员未将 镜像拉取密钥存储在 Kubernetes 服务账户中,则所有未指定服务账户的部署都将无法使用该镜像拉取密钥来部署容器。 而是可以在 pod 部署中定义映像拉取私钥。 当您在 Pod 部署中引用镜像拉取密钥时,该镜像拉取密钥仅对该 Pod 有效,且无法在 Kubernetes 命名空间中的各个 Pod 之间共享。
准备工作
- 创建映像拉取私钥以访问其他注册表或非
defaultKubernetes 名称空间中的映像。 - 请登录您的账户。 如果适用,请将相应的资源组设定为目标。 设置集群的上下文。
要引用 Pod 部署中的镜像拉取密钥,
-
创建名为
mypod.yaml的 pod 配置文件。 -
定义要用于访问 IBM Cloud Container Registry 中映像的 pod 和映像拉取私钥。
要访问一张私有图片,
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)而非标签来引用该镜像。 但是,您可能有一些部署技术会拒绝已突变的映像。 如果是这样,那么可以使用 图像突变选项 和 策略 来更改缺省行为。
启用或禁用映像安全性实施
您可以从 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