1. 首页
  2. Kubernetes
  3. 正文

Kubernetes Service的port、targetPort、nodePort

2020年1月9日 318点热度 0人点赞 0条评论

在Kubernetes(K8s)的service对象中,spec.ports对象存在三个与端口有关的字段,分别是port、targetPort、nodePort,以下介绍这个字段的区别。

spec.ports.port

该字段表示 Service 自身的端口,即其他应用程序可以通过该端口访问该 Service 所关联的Pod(即spec.selector字段所匹配的Pod)。当其他 Pod 或外部客户端要与该 Service 通信时,它们将使用 Service 的 IP 地址和该端口号。这个端口是 Service 提供的服务的入口端口。

spec.ports.targetPort

该字段表示 Service 后端 Pod 上运行的应用程序的端口。当请求到达 Service,Service 将根据 Service 的配置将流量转发到相应的后端 Pod,并使用 targetPort 指定的端口与后端 Pod 上的应用程序进行通信。targetPort 是 Service 路由到后端 Pod 的目标端口。

例如,假设我们有一个后端 Pod,它在端口 8080 上运行一个 Web 服务器,并且有一个定义如下的 Service :

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: my-app       #匹配 metadata.labels.app: my-app 值的Pod
  ports:
    - protocol: TCP   # 使用的协议
      port: 8080      # 该Service所暴露端口
      targetPort: 80  # Pod容器上的应用程序的端口

在这个例子中,my-service Service 使用端口 8080,当外部请求到达 Service 时,它将被转发到 my-app 标签选择器匹配的后端 Pod,并且在后端 Pod 上的应用程序将使用端口 80 进行通信。因此,port 是 Service 自身的端口,而 targetPort 是后端 Pod 上应用程序的端口。

上述所定义的service资源将在默认的命名空间内生效,当我们需要与标签存在`app: my-app`的Pod通信时,使用该service.name作为Host访问,例如:http://my-service:8080。更进一步,当一个service资源仅定义了一个映射暴露出来的端口时,不需要显示指定该service端口,直接使用http://my-service来访问Mysql。

spec.ports.nodePort 字段

当指定 Service 的 type 字段为 NodePort 时,表示可以通过集群内任何一个节点(物理主机、云服务器)上的IP地址访问,从而实现外部与集群内部该 Service 通信。nodePort 就是用来定义该 Service 的端口,这个端口号通常是一个整数,范围为 30000 到 32767。

apiVersion: v1
kind: Service
metadata:
  labels:
    app: web
  name: web-svc
spec:
  type: NodePort         # 服务类型
  ports:
    - port: 80           # 该Service所暴露端口,集群内部通过该Service的IP访问使用
      protocol: TCP      # 协议
      targetPort: 80     # Pod容器上的应用程序的端口
      nodePort: 30001    # 对集群外部所暴露的端口,集群外部通过Pod所在任一主机上的IP访问
  selector:
  app: web               # 指定关联匹配一组labels字段中含有app: web的Pod对象

在这个例子中,nodePort 被设置为 30001。这意味着在集群内部,可以通过http://web-svc:80来访问该Service。同时,你也可以通过在外部的客户端使用任何一个节点上的 IP 地址和端口 30001 来访问web-svc,但这种在集群外部访问 Service 的方法通常用于测试、开发或需要外部访问的场景。

标签: K8s Kubernetes Port Service 端口
最后更新:2023年10月22日

Evans Ann

It's no use crying over spilt milk.

点赞
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

归档

  • 2023 年 11 月
  • 2023 年 10 月
  • 2021 年 1 月
  • 2020 年 8 月
  • 2020 年 1 月
  • 2019 年 8 月

分类目录

  • Docker
  • JavaScript
  • Kubernetes
  • Linux
  • PHP
  • Windows
  • 基础
  • 正则表达式
  • 英语

COPYRIGHT © 2018-2024 秋雨沥沥. ALL RIGHTS RESERVED.

赣ICP备18001671号-3