下面是对于Kubernetes 的各种port如何使用的梳理。
在k8s 之中,有三种port: port, targetPort 和 nodePort。
下面是cluster 和 service 的关系示意图:
所有的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
拿到。配好跳板机直接怼就完事了。