k8s Service学习
service的概念
kubernetes service定义了一个抽象概念,一个pod的逻辑分组,一种可以访问的策略---通常称为服务。这组pod能够被service访问到,通常通过label selector
service能够提供负载均衡能力,但是在使用上有限制:
只能提供四种负载能力,而没有7层功能。但有时我们需要更多匹配规则来转发请求,这点上4层负载均衡是不支持的
service类型
Service在K8s中有以下四种类型:
Cluster:默认类型,自动分配一个仅 Cluster内部可以访问的虚拟IP
Nodeport:在 Cluster基础上为 Service在每台机器上绑定一个端口,这样就可以通过: Nodeport来访问该服务
Loadbalancer:在 Nodeport的基础上,借助 cloud provider创建一个外部负载均衡器,并将请求转发到: Nodeport
Externalname:把集群外部的服务引入到集群内部来,在集群内部直接使用。没有任何类型代理被创建这只有 kubernetes1.7或更高版本的kube-dns才支持
VIP和 Service代理
在 Kubernetes集群中,每个Node运行一个kube- proxy进程。 kube-proxy负责为 Service实现了ー种VIP(虚拟IP)的形式,而不是 Externalname的形式。在 Kubernetes v1.版本,代理完全在 userspace。在Kubernetes v1.1版本,新増了 iptables代理,但并不是默认的运行模式。从 Kubernetes v1.2起,默认就是iptables代理。
在 Kubernetes v1.8.0-beta.0中,添加了ipvs代理
在 Kubernetes1.14版本开始默认使用ipvs代理
在 Kubernetes v1.0版本, Service是“4层"(TCP/ UDP over P)概念。在 Kubernetes v'1.1版本,新増了gressAP(beta版),用来表示“7层"(HTTP)服务
代理模式分类
1.username模式
2.iptables
3.ipvs
这种模式, kube-proxy会监视 Kubernetes service对象和 Endpoints,调用 netlink接口以相应地创建ipvs规则并定期与 Kubernetes Service对象和 Endpoints对象同步ipvs规则,以确保ipvs状态与期望一致。访问服务时,流量将被重定向到其中一个后端Pod
与 iptables类似,ipvs于 netfilter的hook功能,但使用哈希表作为底层数据结构井在内梭空间中工作。这味着ipvs可以更快地重定向流量,并且在同步代理规则旳具有更好的性能。
此外,ipvs为贠載均衡算法提供了更多选项,例如
rr:轮询调度
lc:最小连接数
dh:目标哈希
sh:源哈希
ed:最短期延迟
nq:不排队调度
ClusterIP
ClusterIP主要在每个node使用iptables将发向 clusterIP对应端口的数据,转发到kube- proxy中。然后kube- proxy自己内部实现有负載均衡的方法,并可以查询到这个 service下对应pod的地址和端口,进而把数据转发给对应的pod的地址和端口
为了实现图上的功能,主要需要以下几个组件的协同工作:
api-server 用户通过 kubectl命令向 aipserver发送创建 service的命令, apiserver接收到请求后将数据存储到etcd中
kube- proxy kubernetesl的每个节点中都有一个叫做kube- porxy的进程,这个进程负责感知 service,pod的变化,并将变化的信息写入本地的 iptables规则中
iptables使用NAT等技术将 virtualIP的流量转至 endpoint中
创建 myapp- deploy.yaml文件
service:myapp-service.yaml
$ ipvsadm -Ln //产看也是关系
Headless Service
有时不需要或不想要负载均衡,以及单独的 Service IP。遇到这种情况,可以通过指定 ClusterIP(spec.clusterIP)的值为"None"来创建 Headless Service。这类 Service并不会分配 Cluster IP.kube-proxy不会处理它们,而且平台也不会为它们进行负载均衡和路由
Nodeport
nodeport的原理在于在node上开了一个端口,将向该端口的流量导入到 kube-proxy,然后由 kube-proxy进一步到给对应的pod
查询流程:
Load Balancer
Load Balancer和 nodePort其实是同一种式。区别在于 loadBalancer比 nodeport多了一步,就是可以调用cloud provider去刨建LB来向节点导流
Externalname
这种类型的 Service通过返回 CNAME和它的值,可以将服务映射到 externalname字段的内容(例如xxxx.com)。Externalname Service是Service的持例,它没有selector,也没有定义任何的端口和Endpoint。相反的,对于运行在集群外部的服务,它通过返回该外部务的别名这种方式来提供服务
当查询主机my- service. defalut.svc. cluster. local( SVC NAMSPACE.svc cluste)时,集群的DNS服务将返回一个值my.database.example.com的CNAME记录。访问这个服务的工作方式和其他的相同,唯一不同的是重定向发生在DNS层。而且不会进行代理戓转发
k8s Service学习的更多相关文章
- ASP.NET Core on K8S 入门学习系列文章目录
一.关于这个系列 自从2018年底离开工作了3年的M公司加入X公司之后,开始了ASP.NET Core的实践,包括微服务架构与容器化等等.我们的实践是渐进的,当我们的微服务数量到了一定值时,发现运维工 ...
- Web Service学习笔记:动态调用WebService
原文:Web Service学习笔记:动态调用WebService 多数时候我们通过 "添加 Web 引用..." 创建客户端代理类的方式调用WebService,但在某些情况下我 ...
- ASP.NET Core on K8S深入学习(7)Dashboard知多少
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 在第二篇<部署过程解析与Dashboard>中介绍了如何部署Das ...
- 使用nginx 正向代理暴露k8s service && pod ip 外部直接访问
有时在我们的实际开发中我们希望直接访问k8s service 暴露的服务,以及pod的ip 解决方法,实际上很多 nodeport ingress port-forword 实际上我们还有一种方法:正 ...
- k8s service对象
k8s service对象 概述 service服务也是Kubernetes里核心字眼对象之一,Kubernetes里的每一个service其实就是我们经常提起的微服务架构中的一个微服务,之前讲解 ...
- k8s service NodePort 方式向外发布
k8s service NodePort 方式向外发布 k8s 无头service 方式向内发布 k8s service 服务发现 {ServiceName}.{Namespace}.svc.{Clu ...
- ASP.NET Core on K8S深入学习(4)你必须知道的Service
本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章. 前面几篇文章我们都是使用的ClusterIP供集群内部访问,每个Pod都有一个 ...
- Kubernetes系列之理解K8s Service的几种模式
今天给大家介绍下k8s的service的几种访问模式. 概述 我们知道pod的ip不是固定的,是根据所在宿主机的docker0网卡生成的,每次重启,更新,调度等情况IP都会变,那pod与pod之间需要 ...
- ASP.NET Core on K8S深入学习(1)K8S基础知识与集群搭建
在上一个小系列文章<ASP.NET Core on K8S学习初探>中,通过在Windows上通过Docker for Windows搭建了一个单节点的K8S环境,并初步尝试将ASP.NE ...
随机推荐
- 「每天五分钟,玩转 JVM」:对象访问定位
前言 在「对象内存布局」一节中,我们了解到对象头中包含了一个叫做类型指针的东西,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例.但是,并不是所有的虚拟机都是这么去做的.不 ...
- Vulnhub靶场 DC-2 WP
DC-2简介 描述 与DC-1一样,DC-2是另一个专门构建的易受攻击的实验室,目的是获得渗透测试领域的经验. 与原始DC-1一样,它在设计时就考虑了初学者. 必须具备Linux技能并熟悉Linux命 ...
- STM8L152的EEPROM读写(使用固件库)
STM8L系列单片机内置1K字节的EEPROM,使用起来很方便. EEPROM的地址为: 使用1.6.1的固件库 void EEPROM_Write_Byte(uint16_t Addr,uint8_ ...
- 干货系列之java注解
干货系列之java注解 前言 java反射和注解在java里面很重要,但是很多人对这方面的知识理解不是很好,我来说说我自己对java反射和注解的理解,这两块内容本来应该出在一个博客文章里面讲解,但是由 ...
- 一些js 概念 整理
1.原型链 prototype 这个属性 是一个指针,指向一个对象 这个对象 包含 所有实例共享的属性和方法,即这个原型对象是用来给实例共享属性和方法的. 而每个实例内部 ...
- Springboot学习笔记【持续更新】
1.Springboot四大核心: 自动配置 与Spring应用程序和常见的应用功能,Springboot能自动提供相关配置 起步依赖 告诉Springboot需要什么功能,它就能引入需要的依赖库 A ...
- Building Applications with Force.com and VisualForce(Dev401)( 八):Designing Applications for Multiple users:Managing your users' experience II
Dev 401-008: Design Applications for Multiple Users' Experience Part 2Universal Containers Scenario1 ...
- TensorFlow 卷积神经网络手写数字识别数据集介绍
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 手写数字识别 接下来将会以 MNIST 数据集为例,使用卷积层和池 ...
- js 的 new 干了什么
- Python学习笔记:String类型所有方法汇总
# 按字母表熟悉下string中的方法# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z# 标红的为常用重点的方法!! str = " ...