Kubernetes runAsUser创建主目录

时间:2018-12-12 19:37:50

标签: kubernetes azure-aks

我的任务是让我们的k8s部署以非Root身份运行。 我们使用的第三方库需要用户的主目录存在并且具有写访问权。 我已经尝试过使用initContainers,但是我所做的任何更改基本上都被放弃了,当然我对真实的容器没有权限

我想避免在Dockerfile中进行所有设置。无论如何,要为运行的用户kubernetes容器创建用户主目录吗?

1 个答案:

答案 0 :(得分:1)

Kubernetes使用容器引擎来运行具有特定图像的Pod。 大多数容器可以随时死亡,因此它们必须基于具有所需状态的图像或以其他方式保存的状态。

如果存在您要保留的状态,并且不使用Dockerfile /自定义映像,我建议您:

  1. 设置音量。 卷挂载用户目录,以便从不删除文件,并保留权限。 https://kubernetes.io/docs/concepts/storage/volumes/#hostpath

  2. 与侧车一起运行集装箱。 创建一个具有sidecar容器的pod,该容器可以在同一网络中运行命令,并且可以与主容器共享卷安装。

即。也许您可以创建一个共享卷,然后创建一个将目录冠为root的映像并将该映像用于sidecar容器。 https://kubernetes.io/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/#creating-a-pod-that-runs-two-containers

但是,最简单的解决方案可能只是修改Dockerfile中的权限,例如,通过向Dockerfile添加一些行。如果要向现有的Dockerfile添加行,请确保在CMD / ENTRYPOINT之前添加行

如果要基于已存在的映像,请确保将其放在Dockerfile的顶部

FROM Myoriginalimage

Dockerfile命令:

USER root RUN chown $USER:$USER_GROUP -R $USER_HOME_DIR USER $USER 如果您正在编辑现有的Dockerfile,请确保在此之后您的CMD / ENTRYPOINT

有关Dockerfile的更多信息:https://www.linode.com/docs/applications/containers/how-to-use-dockerfiles/

此后,假设您没有私有注册表或出于任何原因无法访问一个注册表,则可以推送到诸如dockerhub之类的注册表。

  • 在hub.docker.com上创建一个帐户
  • 适当标记图像
  • docker login
  • docker push your-image

有关更多详细信息,请参见此处: https://docs.docker.com/docker-hub/repos/