Kubernetes-6.Service
docker version:20.10.2
kubernetes version:1.20.1
本文概述Kubernetes Service的基本原理和使用。
服务
Service是将运行在一组Pods上的应用程序公开网络服务的抽象方法。
每个Pod都有自己的IP地址,但是在Deployment中,在同一时刻运行的Pod集合可能与之后运行该应用程序的Pod集合不同。如果一组Pod(称为“后端”)为集群内其他Pod(称为“前端”)提供功能,那么前端如何找出并跟踪要连接的IP地址,以便前端可以使用提供工作负载的后端部分?-- service
Service所针对的Pod集合通常是通过标签选择器来确定的。
定义Service
示例:
下面配置创建一个名称为"my-service"的Service对象,它会将请求代理到具有“app=MyApp”标签、TCP端口9376的Pod上。
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
Service会分配一个IP地址(集群IP,VIP),通过标签选择器的控制器不断扫描与其匹配的Pod,将其更新发布到Service的Endpoint对象。
没有标签选择器的Service
ExternalName Service是Service的特例,它没有选择算符,但是使用DNS名称。
当希望使用集群外部的服务时,可使用此方式。
示例:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9376
---
apiVersion: v1
kind: Endpoints
metadata:
name: my-service
subsets:
- addresses:
- ip: 192.0.2.42
ports:
- port: 9376
虚拟IP和Service代理
在集群中,每个Node运行一个kube-proxy进程。kube-proxy负责为Service实现了一种VIP(虚拟IP)形式。
userspace代理模式
用户空间代理模式下kube-proxy会监视Service对象和Endpoint对象的添加和移除操作。对每个Service,它会再本地Node上打开一个端口(随机选择)。任何连接到“代理端口”的请求,都会被代理到Service的后端Pods中的某个。使用哪个后端Pod,是kube-proxy基于SessionAffinity来确认的。
最后它配置iptables规则,捕获到达该Service的clusterIP(虚拟IP)和Port的请求,并重定向到代理端口,代理端口再代理请求到后端Pod。
默认情况下,用户空间模式下的kube-proxy通过轮询算法选择后端。
![services-userspace-overview]](https://img2020.cnblogs.com/blog/2286432/202102/2286432-20210225140728527-1532153658.png)
iptables代理模式
这种模式,kube-proxy会监视Service对象和Endpoint对象的添加和移除。对每个Service,它会配置iptables规则,从而捕获到达该Service的clusterIP和端口的请求,进而将请求重定向到Service的一组后端中的某个Pod。对于每个Endpoint对象,它也会配置iptables规则,这个规则会选择一个后端组合。
默认的策略是,kube-proxy在iptables模式下随机选择一个后端。
使用iptables处理流量具有较低的系统开销,因为流量由Linux netfilter处理,而无需在用户空间和内核空间之间切换。这种方法也可能更可靠。
如果kube-proxy在iptables模式下运行,并且所选的第一个Pod没有响应,则连接失败。这与用户空间模式不同,在用户空间模式下的这种情况,kube-proxy将检测到与第一个Pod的连接已失败,并会自动使用其他后端Pod重试。
可以使用Pod就绪探测器验证后端Pod可以正常工作,以便iptables模式下的kube-proxy仅看到测试正常的后端。这样做意味着你避免将流量通过kube-proxy发送到已知已失败的Pod。

IPVS代理模式
在ipvs模式下,kube-proxy监视service和Endpoint,调用netlink接口相应地创建IPVS规则,并定期将IPVS规则与Kubernetes服务和端点同步。该控制循环可确保IPVS状态与所需状态匹配。访问服务时,IPVS将流量定向到后端Pod之一。
IPVS代理模式类似于iptables模式的netfilter挂钩函数,但是使用哈希表作为基础数据结构,并且在内核空间中工作。这意味着,与iptables模式下的kube-proxy相比,IPVS模式下的kube-proxy重定向通信的延迟要短,并且在同步代理规则时具有更好的性能。与其他模式相比,IPVS模式还支持更高的网络流量吞吐量。
IPVS提供更多选项来平衡后端Pod的流量:
- rr:轮询(Round-Robin)
- lc:最少链接(Least Connection)
- dh:目标地址哈希(Destination Hashing)
- sh:源地址哈希(Source Hashing)
- sed:最短预期延迟(Shortest Expected Delay)
- nq:从不排队(Never Queue)
要在IPVS模式下运行kube-proxy,必须在启动kube-proxy之前使IPVS在节点上可用。
当kube-proxy以IPVS代理模式启动时,它将验证IPVS内核模块是否可用。如果未检测到IPVS内核模块,则kube-proxy将退回到以iptables代理模式运行。

无头服务
无头服务(Headless Service)并不会分配Cluster IP,kube-proxy不会处理它们,也不会为它们进行负载均衡和路由。DNS如何实现自动配置,依赖于Service是否定义了标签选择器。
通过指定ClusterIP(spec.clusterIP)的值为None来创建HeadlessService。
带有标签选择器的服务
定义了标签选择器的无头服务,Endpoint控制器在API中创建了Endpoints记录,并且修改DNS配置返回A记录,通过这个地址直接到达Service的后端Pod上。
无标签选择器的服务
对没有定义标签选择器的无头服务,Endpoint控制器不会创建Endpoints记录。然后DNS系统会查找和配置:
- 对于ExternalName类型的服务,查找其CNAME记录。
- 对所有其他类型的服务,查找与Service名称相同的任何Endpoints记录。
Kubernetes-6.Service的更多相关文章
- kubernetes进阶(04)kubernetes的service
一.service概念 Service是对一组提供相同功能的Pods的抽象,并为它们提供一个统一的入口.借助Service,应用可以方便的实现服务发现与负载均衡,并实现应用的零宕机升级.Service ...
- [Kubernetes]说说 Service 与 Ingress
在 Kubernetes 中, Service 有三种对外暴露的方法,但是由于每个 Service 都要有一个负载均衡的服务,所以采用 Service 的话,会造成既浪费成本又高的现象.对于用户来说, ...
- 【Kubernetes】Kubernetes的Service外部访问方式:NodePort和LoadBalancer
Kubernetes的Pod的寿命是有限的,它们不会复活,因此尽管每个Pod都有自己的IP地址,但是这些IP地址是不可靠的,会随着Pod的消亡而消失. 这就带来一个问题,如果一些Pod的集合(称之为b ...
- Kubernetes的Service运行原理
一.为什么Servcie能定位到Pod 因为Pod的IP是不固定的,所以Kubernetes需要Service,除此之外它还可以在多个Pod间负载均衡 Service的访问入口,其实是宿主机的kube ...
- Kubernetes中Service的使用
目录 简介 1. Service资源定义 1.1 Service Type ClusterIP 无头service NodePort sessionAffinity实现源地址session绑定 简介 ...
- kubernetes 简单service的例子
首先建一个Deployment: apiVersion: apps/v1beta1 kind: Deployment metadata: name: httpd spec: replicas: 3 t ...
- kubernetes的Service Account和secret
系列目录 Service Account Service Account概念的引入是基于这样的使用场景:运行在pod里的进程需要调用Kubernetes API以及非Kubernetes API的其它 ...
- kubernetes学习Service之headless和statefulSet结合
一.首先说headless Service和普通Service的区别 headless不分配clusterIP headless service可以通过解析service的DNS,返回所有Pod的地址 ...
- kubernetes之service
service出现的动机 Kubernetes Pods 是有生命周期的.他们可以被创建,而且销毁不会再启动. 如果您使用 Deployment 来运行您的应用程序,则它可以动态创建和销毁 Pod. ...
- 阿里云Kubernetes服务 - Service Broker快速入门指南
4月底阿里云容器服务上线了基于Kubernetes集群的服务目录功能.阿里云的容器的服务目录遵循Open Service Broker API标准,提供了一系列的服务代理组件,实现了对主流开源服务如M ...
随机推荐
- HDU-4773 Problem of Apollonius (圆的反演)
参考: https://oi-wiki.org/geometry/inverse/ https://blog.csdn.net/acdreamers/article/details/16966369 ...
- Second My Problem First HDU - 3706 单调队列
单调队列 单调队列是指一个队列内部的元素具有严格单调性的一种数据结构,分为单调递增队列和单调递减队列. 单调队列满足两个性质 1.单调队列必须满足从队头到队尾的严格单调性. 2.排在队列前面的比排在队 ...
- 14. 从0学ARM-exynos4412-看门狗裸机程序编写
看门狗 一.概念 看门狗的简称是WDT(Watch Dog Timer),exynos4412scp中的看门狗定时器(WDT)是一种定时装置. 1. 工作原理 由(一般需要客户编写)软件读写定时器相关 ...
- 【cpp上】课后正误小题
State whether each of the following is true or false. If false, explain why. Assume the state ment u ...
- 【原创】k8s之job和Cronjob
1.失败任务 apiVersion: batch/v1 kind: Job metadata: name: bad spec: template: metadata: name: bad spec: ...
- Kubernets二进制安装(5)之私有仓库harbor搭建
在IP地址为192.168.80.50,机器名为mfyxw50上搭建私有仓库harbor harbor下载地址: harbor下载连接地址:https://github.com/goharbor/ha ...
- Gym - 101981D Country Meow(模拟退火)题解
题意: 给\(n\)个三维点,问最小覆盖球的半径. 思路: 模拟退火. 代码: #include<set> #include<map> #include<cmath> ...
- 攻防世界ctf bug
bug 考查: 逻辑漏洞.文件内容检测绕过 ,文件头是位于文件开头的一段承担一定任务的数据,一般开头标记文件类型,如gif的gif89a,或gif87a, png的x89PNG\x0d\x0a,等等 ...
- 网站备案查询/ICP备案查询网
网站备案查询/ICP备案查询网 互联网站备案信息全国公安机关互联网站安全服务平台http://www.beian.gov.cn/portal/index 1 http://www.miitbeian. ...
- website SEO all in one
website SEO all in one SEO 指标量化 https://www.similarweb.com/zh/top-websites/ demo https://www.similar ...