我是靠谱客的博主 无情汽车,最近开发中收集的这篇文章主要介绍service能去调另外一个service吗_kubernetes的service和pod是如何关联的?创建有副本的pod创建servicekube-proxy的模式服务发现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

kubernetes为我们提供了更方便管理容器的方式,大服务集群环境下不需要开发人员去关注底层的网络层逻辑,就能创建出一个稳定的集群服务。

下图说明了pod和service的关联原理图,且说明了服务之间通信数据转发的原理

c1fbba8bf8ee16a970b5165861406812.png

service和pod关联原理图

d6cf158716251f7b023b2ccb45a13064.png

创建有副本的pod

当我们创建pod时,仅仅是创建了pod,要为其创建rc(ReplicationController),他才会有固定的副本。

创建service

然后为其创建service,集群内部才能访问该pod,使用 NodePort 或者 LoadBalancer 类型的 Service,外部网络也可以访问该pod;每个 service 会创建出来一个虚拟 ip,通过访问 vip:port 就能获取服务的内容(内部访问,因为这是一个vip,外部无法访问的)
创建service时,其配置文件中的selector:指定后端绑定的pod,

例如serviceA的

selector:
app:a
env:dev

podA


labels:
app:a
env:dev

podB


labels:
app:a
env:dev
那么我们的serviceA 就会绑定podA,podB,绑定的pod的ip会填写到serviceA的endpoint中,内部访问(vip:port方式访问)serviceA,根据serviceA的vip:port直接访问,serviceA会随机的将服务转发给后端的pod(podA,podB)
已上实现是通过kube-proxy实现的,kube-proxy默认使用iptables模,实际中使用ipvs会更实用;

kube-proxy的模式

  • userspace: client -> iptables -> kube-proxy -> backend pod(rr), iptables只是把虚ip转换成kube-proxy的ip,通过kube-proxy自己维护的不同端口来轮询转发到后端的pod上。
  • iptables: client -> iptables -> backend pod(random),kube-proxy只是监听master上service的创建,之后动态添加/删除本机上的iptables规则
  • ipvs: client -> ipvs ->backend pod, ipvs是一个内核模块

在ipvs模式下,kube-proxy监听API Server中service和endpoint的变化情况,调用netlink接口创建相应的ipvs规则,并定期将ipvs规则与Kubernetes服 Services和Endpoints同步。保证IPVS状态。当访问Services时,IPVS将流量定向到后端pod之一。

  • ipvs 为大型集群提供了更好的可扩展性和性能
  • ipvs 支持比 iptables 更复杂的负载均衡算法(最小负载、最少连接、加权等等)
  • ipvs 支持服务器健康检查和连接重试等功能

服务发现

在k8s中用了两个方案让服务使用方找到我们定义的Service:环境变量 和 DNS。

环境变量
每当有service被创建出来之后,各个node(宿主机)上的kubelet,就会把service name加到自己宿主机的环境变量中,供所有Pod使用。环境变量的命名规则是

{SERVICE_NAME}_SERVICE_HOST,

${SERVICE_NAME}SERVICE_PORT,其中SERVICE_NAME是新serviceName的大写形式,serviceName中的横杠-会被替换成下划线.
使用环境变量有一个隐含的创建顺序,即服务使用方在通过环境变量访问一个service的时候,这个service必须已经存在了。
使用env命令可以看到pod内部有很多kubernetes内部组件的环境变量

DNS
这是官方不推荐的做法,推荐用来跟k8s的外部服务进行交互。

55068f72a27b229acad7038e32aa2534.png

最后

以上就是无情汽车为你收集整理的service能去调另外一个service吗_kubernetes的service和pod是如何关联的?创建有副本的pod创建servicekube-proxy的模式服务发现的全部内容,希望文章能够帮你解决service能去调另外一个service吗_kubernetes的service和pod是如何关联的?创建有副本的pod创建servicekube-proxy的模式服务发现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部