为应用程序构建映像
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>
: 您想用于容器的图像和标签。 要列出注册表名称空间中可用的映像,请运行ibmcloud cr images
。
-
在集群中创建部署。
kubectl apply -f <deployment>.yaml
在 pod 部署中引用映像拉取私钥
如果集群管理员未 将映像拉取私钥存储在 Kubernetes 服务帐户 中,那么所有未指定服务帐户的部署都无法使用映像拉取私钥来部署容器。 而是可以在 pod 部署中定义映像拉取私钥。 当您提到部署中的镜像提取密钥时,该密钥仅对当前部署有效,不能在 Kubernetes 命名空间中的其他部署中共享。
准备工作
- 创建映像拉取私钥以访问其他注册表或非
default
Kubernetes 名称空间中的映像。 - 登录您的账户。 如果适用,请将相应的资源组设定为目标。 设置集群的上下文。
要参考您的播客部署中的图片提取秘密,
-
创建名为
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 项目。 然后,您可以创建镜像策略,防止不符合策略的镜像(如未签名的镜像)在集群中运行。
有关更多信息,请参阅 Portieris 文档。
突变图像: 缺省情况下,Portieris 使用 MutatingAdmissionWebhook
许可控制器来突变图像,以通过摘要而不是标记来引用该图像。 但是,您可能有一些部署技术会拒绝已突变的映像。 如果是这样,那么可以使用 图像突变选项 和 策略 来更改缺省行为。
启用或禁用映像安全性实施
您可以从 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