问题描述
我想在Kubernetes窗格中将git
作为initContainer
的一部分来运行。我还希望容器以任意非root用户身份运行。有什么办法可以做到这一点?
securityContext:
runAsUser: 1234
然后git
会像这样失败:
No user exists for uid 1234
fatal: Could not read from remote repository.
错误来自ssh
。显而易见的解决方法是通过https://
URL进行克隆,而不是使用ssh
,但是我依赖于部署密钥对远程存储库进行只读访问。
由于容器以非root用户身份运行,因此我无法在运行时将用户添加到/etc/passwd
。
其他人如何处理这种情况?
万一有人问:
$ 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"}
解决方法
您可以在容器级别而不是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之间共享文件,则需要在Pod级安全性上下文中指定相同的fsGroup
。