我试图通过我的 k8s 操作员在 openshift 3.11 集群上进行部署。当 kaniko 作业开始时,它给了我以下错误。
Error: error resolving dockerfile path: copying dockerfile: open /kaniko/Dockerfile:
permission denied
我试图通过我的 k8s 操作员在 openshift 3.11 集群上进行部署。当 kaniko 作业开始时,它给了我以下错误。
Error: error resolving dockerfile path: copying dockerfile: open /kaniko/Dockerfile:
permission denied
添加securityContext: runAsUser: 0
到 pod 规范中以以 root 身份运行它。
apiVersion: v1
kind: Pod
metadata:
name: security-context-demo
spec:
securityContext:
runAsUser: 0
Kaniko 被引入作为在 Kubernetes 和 Google Container Builder 中构建容器镜像的工具,无需特权。
我们很高兴推出kaniko,这是一个开源工具,即使没有特权 root 访问,也可以从 Dockerfile 构建容器映像。使用 kaniko,我们既可以从 Dockerfile 构建映像,也可以将其推送到注册表。由于它不需要任何特殊权限或权限,因此您可以在标准 Kubernetes 集群、Google Kubernetes Engine或任何无法访问权限或 Docker 守护程序的环境中运行 kaniko。
您遇到的问题已在GoogleContainerTools/kaniko GitHub 问题中提及。
1 月 11 日,此问题被标记为,Won't Fix
因此唯一的方法是以 root 身份运行 Kaniko 使用securityContext: runAsUser: 0
这并不像曾经想象的那样安全,Kurt Madel在他的博客Securely Building Container Images on Kubernetes中提到了这一点:
running as
root
是一种攻击向量,许多人认为这是一个不可接受的安全漏洞——但 Pod 安全策略的使用将减少 Kaniko 容器作为 K8s Pod 的一部分运行的攻击面,并提供比我们现有的基于 Docker 的方法更高的安全性已经解雇了。
他还解释了如何使用Kaniko the Easy Way
Jenkins X 允许您 启用 Kaniko 作为为所有 Jenkins X CD 作业构建和推送容器映像的默认方式, 并将自动配置为推送到安装 Jenkins X 和 Kaniko 缓存的云的默认容器注册表为您设置 - 生成快速、安全的容器镜像构建,并将其推送到您的默认 Jenkins X 容器注册表。
重要提示: Jenkins X 不支持 此 GitHub 问题跟踪的 Pod 安全策略的 OOTB 。在我的下一篇文章中,我们将看看如何在 Jenkins X 中使用 Pod 安全策略——但不仅限于 Kaniko,因为一旦启用 Pod 安全策略,每个 K8s
Kaniko的缺点Role
/ClusterRole
都必须有一个与之关联的 Pod 安全策略。
- 需要运行 Kaniko 容器
ROOT
来执行大多数容器构建- 不适用于所有人
Dockerfiles
,但不断改进- 设置比旧的稍微复杂一些
docker build