系列文章:
总目录索引:九析带你轻松完爆 istio 服务网格系列教程
目录
1 前言
2 邀约
3 NodePort 样例
4 访问流程
5 实例演示
6 缺点
1 前言
如果你对博客有任何疑问,请告诉我。
2 邀约
你可以从 b 站搜索 “九析”,获取免费的、更生动的视频资料:
3 NodePort 样例
跟 hostNetwork 和 hostPort 不同,NodePort 属于 service 类型之一。hostPort 和 hostNetwork 作用对象是 Pod,而 NodePort 作用对象则是 service。
pod 文件如下所示:
service 文件如下:
创建 NodePort 服务时,用户可以在 30000 ~ 32767 范围内指定一个端口,也可以通过 patch 打补丁的方式修改 service 类型,这样 NodePort 端口将会在范围 30000 ~ 32767 之间自动分配。
kubectl patch svc svc_name -n ns_name -p '{"type": "NodePort"}'
4 访问流程
下图展示当 k8s svc 创建之后,k8s 集群内部都发生了哪些变化。
当 client 发送 kubectl apply 指令给 APIServer 后,会生成相关的 service 对象,k8s 集群内的所有节点(master 和 node)上都会运行 kube-proxy 进程,如下截图所示:
该进程的作用就是负责跟 APIServer 进行通信并对 node 上的 pod 进行生命周期管理。如果创建了 k8s service ,那么 kube-proxy 会创建相应的 iptables 规则,并将发送到 service nodePort 的流量转发到 service 后端提供的 Pod 的相应端口上。
5 实例演示
当执行 jiuxi-svc.yaml 资源文件后,如下截图所示:
查看网络监控接口可知 30088 对应的服务进程就是 kube-proxy,如下图所示:
当我们通过 curl 访问 hostIP:30088 时,数据包会通过 30088 端口送给 kube-proxy 进程,kube-proxy 进程会根据 k8s service 的 endpoint 将数据包路由到实际的 pod IP 和对应的端口去。如下截图查看 service 对应的 endpoints。
6 缺点
使用 NodePort 方式,在 k8s 集群内部,每个节点(master 或 node)上 kube-proxy 进程都会开启相关的端口。如果服务都采用这样的方式,端口就有冲突的可能。因此建议谨慎使用。