我已经基于httpd:2.4构建了一个docker镜像。在我的k8s部署中,我定义了以下securityContext
:
securityContext:
privileged: false
runAsNonRoot: true
runAsUser: 431
allowPrivilegeEscalation: false
当我在不使用此securityContext
的情况下应用部署时,一切正常,服务器正常启动,依此类推。但是,当我在上面的securityContext
中添加时,我的pod的状态为CrashLoopBackOff
,并且我从$ kubectl logs...
(13)Permission denied: AH00072: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
AH00015: Unable to open logs
通过在线搜索,我发现这是因为apache必须是root才能运行,因此以非root身份运行将失败。
我还发现httpd.conf
具有以下内容
#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User daemon
Group daemon
似乎建议如果我在runAsNonRoot
中不使用runAsUser
或securityContext
,它将自动切换到我在httpd.conf
中指定的任何用户。就我而言,我创建了一个用户/组swuser
并相应地编辑了httpd.conf
。但是,当我使用docker run -p 5000:80 my-registry/my-image:1.0.12-alpha
在本地运行映像,然后运行docker exec -it my-container whoami
时,它将打印root
。
所以我的问题是,我该怎么做才能在k8s中以非root用户身份安全运行我的容器(并确保它不是root用户)
答案 0 :(得分:0)
在大于1024的端口上运行apache。
1024以下的端口是特权端口,仅对root用户可用。
由于在此之前您将拥有一些入口负载均衡器,所以没关系:-)