apache - 在 k8s 上安全地运行 apache 容器

标签 apache kubernetes

我已经基于 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

这似乎表明如果我不在 securityContext 中使用 runAsNonRootrunAsUser 它应该自动切换到我在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 用户)

最佳答案

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

低于 1024 的端口是特权端口,仅供 root 用户使用。

因为在那之前你会有一些入口负载均衡器,所以没关系:-)

关于apache - 在 k8s 上安全地运行 apache 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56904918/

相关文章:

java - Jmeter在用户定义变量中设置相对于Jmeter安装的相对路径

apache - 我可以在 apache 配置中连接环境变量吗?

kubernetes - 如何在 kubespray 部署中设置 API Server 参数

arrays - Concourse CI - 数组变量

apache - Ubuntu 16.04 - Apache 2.4.18 - 请求 URI 太长

php - 如何将 PHP 通知和警告发送到 error_log 而不是在网页上?

apache - httpd中的SSLCACertificatePath

docker - 如何在容器内运行 kubectl 命令?

kubernetes - Pod 与绑定(bind)本地持久卷的主机节点的关联性

kubernetes - 无法通过kubelet指标获取PVC的使用情况