1

我试图通过我的 k8s 操作员在 openshift 3.11 集群上进行部署。当 kaniko 作业开始时,它给了我以下错误。

Error: error resolving dockerfile path: copying dockerfile: open /kaniko/Dockerfile: 
permission denied
4

2 回答 2

1

添加securityContext: runAsUser: 0到 pod 规范中以以 root 身份运行它。

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 0
于 2020-03-29T08:08:17.447 回答
1

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 asroot是一种攻击向量,许多人认为这是一个不可接受的安全漏洞——但 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 Role/ClusterRole 都必须有一个与之关联的 Pod 安全策略。

Kaniko的缺点
  • 需要运行 Kaniko 容器 ROOT 来执行大多数容器构建
  • 不适用于所有人 Dockerfiles ,但不断改进
  • 设置比旧的稍微复杂一些 docker build
于 2020-03-30T11:21:41.233 回答