什么是用于Kubernetes服务的“端口”

问题描述 投票:2回答:2

考虑一个非常简单的service.yaml文件:

kind: Service
apiVersion: v1
metadata:
  name: gateway-service
spec:
  type: NodePort
  selector:
    app: gateway-app
  ports:
  - name: gateway-service
    protocol: TCP
    port: 80
    targetPort: 8080
    nodePort: 30080

我们知道服务会将所有请求路由到端口app=gateway-app(a.k.a.8080)的targetPort标签。服务定义中还有另一个port字段,在这种情况下是80。这个port用于什么?我们什么时候应该使用它?

从文档中,还有这一行:

默认情况下,targetPort将设置为与端口字段相同的值。

参考:https://kubernetes.io/docs/concepts/services-networking/service/

换句话说,什么时候我们应该保持targetPortport相同,什么时候不?

kubernetes
2个回答
4
投票

nodePort服务中,您可以定义3种类型的端口:

TARGETPORT:

正如您在问题中提到的,这是您的pod的相应端口,基本上是您在副本清单中定义的containerPorts。

端口(servicePort):

这定义了其他本地资源可以引用的端口。引自Kubernetes文档:

此服务将[本地]显示为.spec.clusterIP:spec.ports [*]。port

这意味着,这不是公开访问的,但是您可以通过此端口通过其他资源(在群集内)引用您的服务端口。例如,您为此服务创建入口。在您的入口处,您将被要求在servicePort字段中显示此端口:

  ...
        backend:
          serviceName: test
          servicePort: 80

NodePort:

这是节点上公开公开您的服务的端口。再次引用文档:

此服务将[公开]显示为[NodeIP]:spec.ports [*]。nodePort


3
投票

Port是客户将连接到的。 TargetPort是容器正在收听的内容。当它们不相等时的一个用例是当你在非root用户下运行容器并且通常不能绑定到1024以下的端口时。在这种情况下你可以监听8080但是客户端仍然会连接到80,这对他们来说可能更简单。

© www.soinside.com 2019 - 2024. All rights reserved.