我曾认为在Kubernetes中,暴露应用程序端口的方法是通过首先在Dockerfile中使用
然而,我刚刚注意到,在我的一个应用程序的Dockerfile中,我错误地暴露了一个端口为
然而,我的其他应用程序可以很好地访问该服务,并且请求无问题地转发到端口
为什么会这样?难道我不需要在 Dockerfile 中公开端口吗?
EXPOSE
来进行暴露,然后在部署yaml文件中设置containerPort
,最后在服务yaml文件中设置targetPort
。我认为这些值都必须相同,例如7214
。然而,我刚刚注意到,在我的一个应用程序的Dockerfile中,我错误地暴露了一个端口为
7124
(但是在另外两个文件中设置了正确的端口),如下所示:
Dockerfile
expose 7124 #This is incorrect
Deployment.yaml
ports:
- containerPort: 7214
Service.yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
ports:
- port: 7214
targetPort: 7214
然而,我的其他应用程序可以很好地访问该服务,并且请求无问题地转发到端口
7214
的应用程序上。为什么会这样?难道我不需要在 Dockerfile 中公开端口吗?
containerPort
起作用了吗?一个类似问题的用户回答称暴露的端口不需要匹配,但未解释原因。
expose 7124
,我想要在端口7124上暴露我的应用程序的所有流量。 - Hackerman7214
上访问它?7214
没有从Dockerfile中公开,那么为什么可以访问它呢? - user3275784containerPort: 7214
覆盖了 Dockerfile 的端口...你可以看到同样的行为也出现在环境变量上。例如,在 Dockerfile 中添加一些环境变量,然后在 yaml 文件中定义相同的变量并赋予其他值,你应该会看到它们具有新值而不是 Dockerfile 的值。 - Hackerman