kube-proxy和service

kube-proxy 是k8s中的组件之一,是以Pod 形式真实运行的进程,而service 是它的代理功能的具体实现,service 是k8s 中一种资源类型,里面定义的是集群Pod 的访问转发规则。

存在的意义

1、pod 是短暂的-它们随时会启动或者关闭, 无论是为了给其他 pod 提供空间而从节点中被移除, 或者是减少了 pod 的数量, 又或者是因为集群中存在节点异常。
 
2、Kubernetes 在 pod 启动前会给已经调度到节点上的pod 分配 IP 地址----因此客户端不能提前知道提供服务的 pod 的 IP 地址。
 
3、水平仲缩意味着多个 pod 可能会提供相同的服务每个 pod 都有自己的 IP地址, 客户端无须关心后端提供服务 pod 的数量, 以及各自对应的 IP 地址。它们无须记录每个 pod 的 IP 地址。 相反, 所有的 pod       可以通过一个单一的IP 地址进行访问。
 
为了解决上述问题, Kubemetes 提供了一种资源类型一服务 (service),一个service 对应一个服务,每个后端服务都有一个端口,service 通过映射内部服务端口对外提供访问,每个服务运行一组pod 。

service 作用

服务发现(防止pod 失联)

负载均衡(轮询转发请求到后端集群中的pod)

service与Pod 关联

两种方式

1、service 通过标签选择器selector 关联pod 的标签,找到pod 。

2、service 通过关联deployment 等资源,通过deployment 等资源间接关联pod。注意写yaml文件创建service 关联deployment 通过标签选择器配置成 selector: app: pay 形式关联的是pod 的标签不是                      deployment   的标签,可以通过expose命令关联dep资源创建service。

service 的三种形式

ClusterIP  

集群IP,仅供k8s内部访问(只能在pod 或node 上访问,无法外部访问),相当于service 加了1个vip,通过vip 提供访问地址,再转发给各个Pod

NodePort  

在每个node 节点为相应Pod启动一个对外端口(默认30000起步),映射pod 内部端口。通过任意一个Pod 所在的节点ip+port 就能访问pod ,多个pod 需要在service 前面加一个LB(lvs/proxy)把每个节点的ip+port 加入,才能实现负载均衡,这样每个服务都得添加一次,增加了管理维护成本。

Loadblance   

云服务厂商提供的,自动添加service 映射对外端口到负载上面,例如阿里云可以通过SLB为service 提供负载均衡。只有云服务厂商的k8s 才有此形式。

相关操作

 service  的创建

方式一 expose

kubectl  expose  --help

kubectl     expose     deployment       nginx-dep1   --port=2022         --target-port=80    --type=NodePort         -n kzf

                    service代理资源类型    资源名称   代理对外端口          pod 中内部端口      端口暴露类型(默认ClusterIp)   命名空间
View Code

相关文章:

  • 2021-05-02
  • 2021-10-22
  • 2021-12-21
  • 2021-09-22
  • 2021-11-20
猜你喜欢
  • 2021-09-12
  • 2022-12-23
  • 2021-08-23
  • 2021-10-18
  • 2022-12-23
  • 2022-12-23
  • 2021-09-03
相关资源
相似解决方案