如何获取现有kubernetes用户名的uid和组ID?

时间:2019-03-29 10:57:27

标签: docker kubernetes kubectl

我试图将服务部署到Kubernetes集群,并首先遇到以下错误:

Error: container has runAsNonRoot and image will run as root

经过一番谷歌搜索后,我发现有一个Pod安全策略,该策略不允许我以root用户身份运行映像,

我发现在部署定义中添加以下securityContext配置可能会解决我的问题:

spec:
  securityContext:
     runAsUser: [uID]
     fsGroup: [fsID]

我无法找到获取给定用户名的用户ID的方法。是否可以使用kubectl?还是我必须以某种方式分配我自己的userId / groupId?

作为一个例子,假设我正在使用minikube上下文:

- context:
    cluster: minikube
    user: minikube
  name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
  user:
    client-certificate: C:\...\client.crt
    client-key: C:\...\client.key

谢谢!

3 个答案:

答案 0 :(得分:0)

  

我无法找到获取给定用户名的用户ID的方法。是否可以使用kubectl?还是我必须以某种方式分配我自己的userId / groupId?

您可以在部署中运行id命令,例如kubectl exec -it <<pod name>> -- sh,以查看用户,该用户名的组ID,在这种情况下为当前用户上下文。

答案 1 :(得分:0)

uid和gid在Linux内核和Docker容器之间共享。您可以通过在主机的/ etc / passwd文件中查找uid和gid来运行容器。您可以在Linux主机中创建一个用户并使用相应的ID,或者在Docker映像中使用已知ID创建该用户并使用它们。

答案 2 :(得分:0)

如果用户具有群集管理员角色,则PSP不会应用于该用户。

如果minikube用户是集群管理员,则可以在securityContext上将uID和fsID的值保持为零。

您可以从客户端证书文件中对此进行验证。 “主题”列上的CN值将提供用户名和组详细信息。

 openssl x509 -in C:\...\client.crt -text -noout

或者您必须在Dockerfil上进行更改。这样将以非root用户身份运行命令。