我试图将服务部署到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
谢谢!
答案 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用户身份运行命令。