kubernetes Service的负载均衡和网络路由秘密
- 格式:pdf
- 大小:946.83 KB
- 文档页数:18


k8s服务发现和负载均衡(转)原⽂ /blog/2360095kubernetes中如何发现服务如何发现pod提供的服务如何使⽤kube-dns发现服务service:服务,是⼀个虚拟概念,逻辑上代理后端pod。
众所周知,pod⽣命周期短,状态不稳定,pod异常后新⽣成的pod ip会发⽣变化,之前pod的访问⽅式均不可达。
通过service对pod做代理,service有固定的ip和port,ip:port组合⾃动关联后端pod,即使pod发⽣改变,kubernetes内部更新这组关联关系,使得service能够匹配到新的pod。
这样,通过service提供的固定ip,⽤户再也不⽤关⼼需要访问哪个pod,以及pod是否发⽣改变,⼤⼤提⾼了服务质量。
如果pod使⽤rc创建了多个副本,那么service就能代理多个相同的pod,通过kube-proxy,实现负载均衡service 模版{ "kind": "Service”,"apiVersion": "v1”,"metadata”:{ "name": "my-service" },"spec": { "selector”:{ "app": "MyApp" },"ports": [{ "protocol": "TCP”,"port": 80,"targetPort": 9376 } ] }}其中这个service代理了所有具有app:MyApp标签的pod,服务对外端⼝是80,服务ip(clusterip)在创建service的时候⽣成,也可以指定,这组ip:port在service的周期⾥保持固定。
k8s 中service暴露端口,外部可以访问的原理Kubernetes (K8s) 是一种开源的容器编排和管理平台,广泛用于应用程序的部署和管理。
在K8s中,Service是一种用于暴露应用程序由Pod组成的逻辑集合的对象。
通过Service,可以实现将应用程序暴露给集群内部和外部访问的需求。
那么,在K8s中,Service是如何暴露端口并允许外部访问的呢?本文将详细介绍K8s中Service暴露端口的原理。
1. Service是什么在K8s中,Service是一种抽象,用于将一组由Pod组成的逻辑集合公开为一个单一的DNS名称。
这样,其他应用程序或用户可以通过这个DNS 名称来访问Service所代表的所有Pod。
Service充当了一组Pod的负载均衡器,它将请求分发给后端的Pod。
这种抽象隐藏了底层Pod的细节,使得应用程序无需考虑具体的Pod IP地址和端口,从而实现了在K8s集群内动态地访问后端应用程序。
2. Service类型在K8s中,有三种类型的Service,分别为ClusterIP、NodePort和LoadBalancer。
- ClusterIP:默认类型,该类型的Service只会在集群内部进行通信,即只能被集群内的其他应用程序访问,无法从集群外部访问。
- NodePort:该类型的Service会在每个节点上监听一个端口,并通过该端口将外部流量转发到Service所代表的Pod。
这样,可以通过集群节点的IP地址和相应的端口来访问Service。
- LoadBalancer:该类型的Service会根据云厂商提供的负载均衡器来将请求分发给Service所代表的Pod。
这样,不仅可以通过集群节点的IP 地址和端口访问Service,还可以通过云负载均衡器提供的外部IP地址来访问Service。
3. Service暴露端口的原理# ClusterIP类型的Service对于ClusterIP类型的Service,它默认只能在集群内部访问,无法从集群外部访问。
Kubernetes是一个开源的容器编排引擎,用于自动化部署、扩展和操作应用程序容器化。
在Kubernetes中,Service是一个非常重要的概念,用于将一组Pods组合成一个网络服务。
1. 什么是Service?在Kubernetes中,Service是一组Pods的抽象,它们一起提供一个共同的功能。
Service通过一个稳定的网络位置区域和端口公开这些Pods,使得其它应用可以方便地访问这些Pods提供的功能。
而且,Service还可以提供负载均衡,使得请求能够分布到各个Pod上,从而提高服务的稳定性和可用性。
2. Service的类型在Kubernetes中,Service有多种类型,包括ClusterIP、NodePort、LoadBalancer和ExternalName等。
- ClusterIP类型的Service会在内部创建一个虚拟的ClusterIP位置区域来暴露服务,很适合内部服务的访问。
- NodePort类型的Service会在每个Node上绑定一个固定的端口,外部请求可以直接通过Node的IP位置区域和端口访问Service暴露的服务。
- LoadBalancer类型的Service会在云服务商上创建一个负载均衡器来暴露服务,可以动态的分配外部IP,并且提供负载均衡功能。
- ExternalName类型的Service可以将Service映射到一个外部服务的DNS名称,用于访问外部服务。
3. Service的工作原理Kubernetes的Service通过Labels和Selectors来实现对Pods的发现和匹配。
当创建一个Service时,我们需要指定对应Pods的Label,而Service会根据这些Label来选择匹配的Pods。
当有请求访问Service时,Service会使用代理模式将请求转发到对应的Pod上,从而实现对Pod的负载均衡。
4. Service的应用场景Service在Kubernetes中有多种应用场景,主要包括以下几个方面:- 服务发现:通过Service,可以方便地发现和访问集群中的其他服务,而不需要直接访问具体的Pod。
Kubernetes学习之路(⼗四)之服务发现Service⼀、Service的概念 运⾏在Pod中的应⽤是向客户端提供服务的守护进程,⽐如,nginx、tomcat、etcd等等,它们都是受控于控制器的资源对象,存在⽣命周期,我们知道Pod资源对象在⾃愿或⾮⾃愿终端后,只能被重构的Pod对象所替代,属于不可再⽣类组件。
⽽在动态和弹性的管理模式下,Service为该类Pod对象提供了⼀个固定、统⼀的访问接⼝和负载均衡能⼒。
是不是觉得⼀堆话都没听明⽩呢 其实,就是说Pod存在⽣命周期,有销毁,有重建,⽆法提供⼀个固定的访问接⼝给客户端。
并且为了同类的Pod都能够实现⼯作负载的价值,由此Service资源出现了,可以为⼀类Pod资源对象提供⼀个固定的访问接⼝和负载均衡,类似于阿⾥云的负载均衡或者是LVS的功能。
但是要知道的是,Service和Pod对象的IP地址,⼀个是虚拟地址,⼀个是Pod IP地址,都仅仅在集群内部可以进⾏访问,⽆法接⼊集群外部流量。
⽽为了解决该类问题的办法可以是在单⼀的节点上做端⼝暴露(hostPort)以及让Pod资源共享⼯作节点的⽹络名称空间(hostNetwork)以外,还可以使⽤NodePort或者是LoadBalancer类型的Service资源,或者是有7层负载均衡能⼒的Ingress资源。
Service是Kubernetes的核⼼资源类型之⼀,Service资源基于标签选择器将⼀组Pod定义成⼀个逻辑组合,并通过⾃⼰的IP地址和端⼝调度代理请求到组内的Pod对象,如下图所⽰,它向客户端隐藏了真是的,处理⽤户请求的Pod资源,使得从客户端上看,就像是由Service直接处理并响应⼀样,是不是很像负载均衡器呢! Service对象的IP地址也称为Cluster IP,它位于为Kubernetes集群配置指定专⽤的IP地址范围之内,是⼀种虚拟的IP地址,它在Service对象创建之后保持不变,并且能够被同⼀集群中的Pod资源所访问。