gpt4 book ai didi

docker - k8s如何知道Pod内部进程的目标端口?

转载 作者:行者123 更新时间:2023-12-02 20:53:56 24 4
gpt4 key购买 nike

假设我们有一个运行在Docker容器中并在端口3000上监听的Node应用程序。我们希望将此应用程序公开以在浏览器(也可以在端口3000)中访问。因此,我们进行如下端口转发:

docker run -p <port>:<targetPort> my-image // for example: 3000:3000
因此docker知道在哪个端口上侦听以及在容器内哪个进程转发网络。
但是在k8s NodePort服务中,它足以提供NodePort服务端口和Pod的目标端口,但不能提供Pod内部的目标端口,因此我们有随机的外部端口30,000-32,000(大约)来监听外部流量,将其转发到NodePort服务的端口,然后再转发到Pod的目标端口,但是..嘿,我们在Pod 中没有提到目标端口
那么Pod对象如何知道向其内部的哪个进程转发流量呢?我们通常假定Pod中只有一个容器,但是如果有多个容器呢?
还要注意,在Docker中公开图像的示例中-如果我们不提及端口转发,则整个博览会将无法工作,因此无法通过浏览器(容器外部)进行访问。

最佳答案

Pod规范中的containerPort仅是信息性的,非强制性的。提及并不能使Pod内部的应用程序在该端口上进行侦听。通常,您将在源代码或dockerfile中指定应用程序应侦听的端口。服务中的targetPort需要与该端口匹配。例如,将流量转发到Pod内运行的nginx容器的服务的targetPort应该是80,因为nginx进程监听端口80。
服务中的 targetPort`通知kubernetes服务在pod内运行的容器的哪个端口转发流量。
如果Pod中有多个容器在不同的端口上侦听,则可以在服务中指定多个targetPort,如下所示。

apiVersion: v1
kind: Service
metadata:
name: service-name
spec:
ports:
- name: http
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 443
- name: something
port: 6001
targetPort: 6001
selector:
app: app-label
type: NodePort

关于docker - k8s如何知道Pod内部进程的目标端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63957305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com