[英]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.