Kubernetes服务发布基础

一、Service

1.service基本介绍     

  service为一组提供服务的pod提供抽象的稳定的网络访问地址,主要用于网络服务,通过service定义,为客户端提供访问地址和负载均衡,屏蔽endport的变化。

       在 kubernetes 中,pod 的IP 地址是动态变化的,因此无法直接通过 pod 的IP 地址进行访问。service的出现正式为了解决找个问题的。service 会为一组 pod 创建一个虚拟的 IP 地址,通过这个 IP 地址可以访问这组 pod 中的任意一个 pod。当客户端请求这个虚拟 IP 地址时,请求会被负载均衡到一组 pod 中的某一个 pod 上,从而完成对 pod 的访问。

        service 的实现依赖于 kube-proxy 组件。kube-proxy 会在每个节点上监听 service 的变化,一旦有 service 发生变化,kube-proxy 会更新本地的 iptables 规则,从而实现流量的转发和负载均衡。

        另外,service 还与 CoreDNS 有关。CoreDNS 是 kubernetes 集群中的 DNS 解析服务。在 kubernetes中 service 的虚拟 IP 地址还会注册到 coreDNS 中,从而使得客户端还可以通过service 名称访问service 的虚拟 IP 地址。在 service 的定义中,可以通过 spec,selector 字段指定哪些 pod 属于这个service,这样,就可以将请求负载均衡到这些 pod 中。

           总之,service 是 kubernetes 中一种非常重要的资源对象,它可以让 pod 对外提供服务,并提供负载均衡、服务发现等功能。servie的实现依赖于kube-proxy 和CoreDNS组件,他们共同协作,将 service与 pod 连接起来,实现对 pod 的代理访问,如下图所示。 

2.service负载均衡 

       当service在kubernetes集群定义出来现之后,客户端就可以通过服务IP访问到Pod容器提供的服务,服务IP和后端Pod负载均衡机制,由node上kube-proxy实现。

        kube-proxy代理模式:userspace,iptables,ipvs和kernelspace。

(1)userspace

       起初,kube-proxy进程是一个真实的TCP/UDP代理,当某个pod以clusterIP 方式访问某个service的时候,这个流量会被 pod 所在的本机的 iptables 转发到本机的 ube-proxy 进程,然后将请求转发到后端某个 pod 上。具体过程为:

  • kube-proxy 为每个 service 在 node 上打开一个随机端口作为代理端口
  • 建立 iptables 规则,将 clusterip 的请求重定向到代理端口(用户空间)
  • 到达代理端口的请求再由 kubeproxy 转发到后端

          clusterip 重定向到 kube-proxy 服务的过程存在内核态到用户态的切换,开销很大,因此有了iptables 模式,而 userspace 模式也被废弃了。

(2)iptables

       k8s在1.2版本之后iptables作为默认模式,kube-proxy不在起到proxy作用。主要功能是:通过API Server 的 watch 接口实时跟踪 Service 和 Endpoint 的变更信息,并更新对应的 iptables 规则,client 的请求流量通过 iptables 的 NAT 机制“直接路由”到目标 Pod。

      不同于 userspace,在 iptables 的模式中,kube-proxy 不再负责转发数据包,kube-proxy 主要完成对 iptables 策略的动态管理。数据包的走向完全由 iptables 规则决定,这样的过程不存在内核态到用户态的切换,效率明显会高很多。但是随着 service 的增加,iptables 规则会不断增加,导致内核十分繁忙(等于在读一张很大的没建索引的表)。

(3) ipvs

主要用于高性能负载均衡,使用高效数据结构Hash表,允许无线扩张规模,提供的算法:rr,lc,df,sh,sed(预计延迟时间最短),nq(从不排队)

(4)kernelspace 

在windows进行代理模式

3.service的四种类型

(1)Cluster IP

为Pod提供一个虚拟IP地址,其他Pod访问service,只需要访问该虚拟IP地址,k8s自动将请求路由到相应的Pod上。

(2)Nodeport 

       将Pod公开为集群中所有节点的端口,当请求到任何一个节点上的端口上,kubernetes会将请求路由到相应Pod上。

(3) LoadBalancer

使用云端提供商进行负载均衡将请求路由到后端Pod,kubernetes会自动创建和配置负载均衡器,绑定到service上。

(4)ExternalName

将service映射到外部域名地址。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值