对Kubernetes的port部分的具体梳理

包括clusterIP如何使用等等

Posted by Haiming on November 27, 2019

下面是对于Kubernetes 的各种port如何使用的梳理。

在k8s 之中,有三种port: port, targetPort 和 nodePort。

下面是cluster 和 service 的关系示意图:

87bf21f4bed449282f75a99bfb99209c

所有的service在同一个cluster之中,互相之间可以直接通信。直接通信可以通过 <clusterIP>:<port> 或者 service-name:port 来进行。

每一个service 之下管理很多Pod,pod是一个个的具体单位,是任务的具体执行者。我们一般不会直接管理Pod,而是让service 来管理。

首先对整体的流程做一个梳理:

  • 从本地的8802端口映射到跳板机的8802端口
  • 在跳板机的8802端口做port映射,映射8802端口到自己的service。
  • 直接在本机上面通过8802端口来访问自己的服务

或者:

  • 从本地的30802端口经过跳板机映射到nodeIP的 30802端口
  • 直接本地访问30802拿到对应API

下面是对三种port做具体的梳理:

  • port: port是service对外面暴露的port。对应起来,是在project 的 最外层的application.yml里面在引用其他service 的时候使用的那个port。例如 http://user-backend-internal-api:8080

  • targetPort: 是程序本身的端口。对应来是在resource下面的application.yml, 即程序本身对外暴露的端口。
  • nodePort: 是node 对外的端口,用来让外部程序从cluster来访问内部的程序。

那么如何使用nodePort来访问内部程序呢?nodePort,顾名思义是 node 的端口。那么就得使用 nodeIP:nodePort来访问。node 本身的 IP 可以通过 kubectl describe node 来拿到,而某个service 运行在某个 node 可以通过 kubectl describe service 拿到。配好跳板机直接怼就完事了。