1

我想git作为initContainerKubernetes pod 的一部分运行。我还希望容器以任意非 root 用户身份运行。有没有办法做到这一点?

问题是,如果我在 pod 描述中包含这样的内容:

securityContext:
  runAsUser: 1234

然后git会像这样失败:

No user exists for uid 1234
fatal: Could not read from remote repository.

错误来自ssh. 显而易见的解决方法是通过https://url 而不是使用来克隆ssh,但我依赖部署密钥来只读访问远程存储库。

我无法将用户烘焙到图像中,因为直到运行时我才知道用户 ID 是什么。

我无法/etc/passwd在运行时将用户添加到,因为容器以非 root 用户身份运行。

其他人是如何处理这种情况的?

如果有人问:

$ kubectl version
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.9+k3s1", GitCommit:"630bebf94b9dce6b8cd3d402644ed023b3af8f90", GitTreeState:"clean", BuildDate:"2020-09-17T19:05:07Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}
4

1 回答 1

1

您可以在容器级别而不是 pod 级别使用 securityContext。

apiVersion: v1
kind: Pod
metadata:
  name: security-context-demo
spec:
  securityContext:
    runAsUser: 1000
  initContainers:
  - name: sec-ctx-in-init
    image: busybox
    securityContext:
      runAsUser: 2000
    command: ['sh', '-c', 'id']
  containers:
  - name: sec-ctx-in-container
    image: gcr.io/google-samples/node-hello:1.0
    securityContext:
      runAsUser: 3000
      allowPrivilegeEscalation: false

创建 pod(我使用 katacoda)后,您可以运行:

master $ kubectl logs security-context-demo -c sec-ctx-in-init
uid=2000 gid=0(root)
master $ kubectl exec -it security-context-demo -c sec-ctx-in-container -- id
uid=3000 gid=0(root) groups=0(root)

注意:如果您实际上是在容器和 initcontainer 之间共享文件,则需要fsGroup在 pod 级别 securitycontext 中指定相同的内容。

于 2020-10-10T21:31:57.693 回答