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 ...
随机推荐
- 我用STM32MP1做了个疫情监控平台4—功能完善界面重新设计
目录 前言 界面展示 新增功能 API 接口说明 多个接口数据的获取和解析 FontAwesome字体图标库的使用 代码下载 系列教程 @ 前言 之前我用STM32MP1和Qt实现了疫情监控平台,系列 ...
- Journal of Proteome Research | SAAVpedia: identification, functional annotation, and retrieval of single amino acid variants for proteogenomic interpretation | SAAV的识别、功能注释和检索 | (解读人:徐洪凯)
文献名:SAAVpedia: identification, functional annotation, and retrieval of single amino acid variants fo ...
- jenkins-gitlab-harbor-ceph基于Kubernetes的CI/CD运用(四)
前景提要 jenkins与gitlab结合,实现代码自动拉取:https://www.cnblogs.com/zisefeizhu/p/12548662.html jenkins与kubernetes ...
- matplotlib 的几种柱状图
1.x 表示数量,y 表示名字 import matplotlib.pyplot as plt dic = {'a': 22, 'b': 10, 'c': 6, 'd': 4, 'e': 2, 'f' ...
- cmdb autoserver端表数据分析
目录: 1.后台目录规划 autoserver: api: 接收数据并进行二次分析入库 API验证 backend : 负责后台管理 repository:负责管理模型类 (数据表) autoserv ...
- C语言结构体实现类似C++的构造函数
其主要依靠函数指针来实现,具体看代码吧~ #include <stdio.h> #include <stdlib.h> #include <string.h> ty ...
- C++中decltype(*)作为模板实参时的隐藏问题
在函数模板中使用智能指针时,可能会希望根据指针的类型推导出指针引用的对象类型作为模板参数,于是写出以下代码: shared_ptr<decltype(*objPtr)>(objPtr); ...
- 基于arduino、百度云、采用django、redis鱼缸在线监控
大家好,今天我给大家分享一下之前做的一个鱼缸远程监控的案例,希望有人喜欢 首先给大家看一下结构框架,由于我之前买的arduino开发板不带wifi功能,所有是通过pc机转发一下上的百度云,最近我刚购买 ...
- 爬虫&Selenium&ChromeDriver
一.Selenium selenium是什么 Selenium [1] 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, ...
- openssl生成rsa公私钥对并在java中使用
rsa著名的非对称加密算法,具体实现我也不是很清楚,大概先要了解一下密码学,有一定基础才能去看的东东,这里就先介绍怎么使用rsa为我们服务. 首先openssl这是个集成了众多加密算法的工具,它将这一 ...