[英]Running an apache container on a port > 1024
我已经基于httpd:2.4构建了一个docker镜像。 在我的k8s部署中,我定义了以下securityContext
:
securityContext:
privileged: false
runAsNonRoot: true
runAsUser: 431
allowPrivilegeEscalation: false
为了使此容器正常运行,因为需要将非root apache配置为绑定到端口> 1024,而不是默认端口80。据我所知,这意味着在httpd.conf
中将Listen 80
编辑为Listen {Some port > 1024}
。
当我想运行正常构建的docker映像时(即在默认端口80上),我具有以下端口设置:
spec.template.spec.containers[0].ports[0].containerPort
:80 spec.ports[0].targetPort
:80 spec.ports[0].port
:8080 spec.rules[0].http.paths[0].backend.servicePort
:8080 有了这些设置,就可以通过入口清单中提供的主机URL访问该服务。 同样,这没有更改httpd.conf
。 当我进行了这些更改(使用Listen 8000
),并将securityContext
部分添加到部署中时,我相应地更改了各种清单:
spec.template.spec.containers[0].ports[0].containerPort
:8000 spec.ports[0].targetPort
:8000 spec.ports[0].port
:8080 spec.rules[0].http.paths[0].backend.servicePort
:8080 但是由于某种原因,当我尝试访问应该正常工作的URL时,出现502 Bad Gateway错误。 我是否正确设置了端口? 还有什么我需要做的吗?
kubectl get pods
kubectl logs pod_name
kubectl exec -it <pod_name> -- bash
$ curl http://localhost:8000
如果上述方法无效,请检查您的httpd.conf。
kubectl exec -it <ingress pod_name> -- bash
$ curl http://svc:8080
您也可以检查入口日志。
为了使此容器正常运行,因为需要将非根apache配置为绑定到端口> 1024,而不是默认端口80
知道了,这是使apache容器以非root用户身份运行的艰巨要求,因此,此更改需要在容器级别完成,而不是Kubernetes的抽象(例如Deployment的Pod规范或Service / Ingress资源对象定义)。 因此,剩下的唯一事情就是构建一个自定义httpd映像,侦听端口>1024。同样的方法适用于NGINX Docker容器。
您正在尝试手动调整Pod规范中“ containerPort”字段的一项关键信息,这种信息并不明显。 它在那里的主要目的是为了提供信息,并且不会导致在容器级别打开端口。 根据Kubernetes API 参考 :
在此处未指定端口并不能防止该端口暴露。 任何从容器中的默认“ 0.0.0.0”地址监听的端口都可以从网络访问。 无法更新。
希望这可以帮助您继续前进
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.