繁体   English   中英

在K8S上安全运行Apache容器

[英]Securely running an apache container on k8s

我已经基于httpd:2.4构建了一个docker镜像。 在我的k8s部署中,我定义了以下securityContext

securityContext:
  privileged: false
  runAsNonRoot: true
  runAsUser: 431
  allowPrivilegeEscalation: false

当我在没有该securityContext情况下应用部署时,一切正常,服务器正常启动, CrashLoopBackOff 。但是,当我在上述securityContext添加时,我的pod的状态为CrashLoopBackOff ,我从$ kubectl logs...获取了以下信息$ 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

这似乎表明,如果我不使用runAsNonRootrunAsUsersecurityContext应该自动切换到任何一个用户我指定httpd.conf 就我而言,我创建了一个用户/组swuser并相应地编辑了httpd.conf 但是,当我使用docker run -p 5000:80 my-registry/my-image:1.0.12-alpha本地运行映像时,请docker run -p 5000:80 my-registry/my-image:1.0.12-alpha ,然后运行docker exec -it my-container whoami它会打印root

所以我的问题是,我该怎么做才能在k8s中以非根用户身份安全运行我的容器(并确保它是非根用户)

在大于1024的端口上运行apache。

低于1024的端口是特权端口,仅对root用户可用。

因为在此之前您将拥有一些入口负载均衡器,所以没关系:-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM