k8s-N0.4-service
本章目录
- k8s中的三种网络
- service的构建及参数说明
一 k8s的三种网络
在k8s集群中,k8s是有三种网络类型的,下面我们看一下下面这个图

1 节点网络:顾名思义,节点网络就是你每台物理服务器或者虚拟机的物理IP地址
2 Pod网络:k8s专门为了pod分配的一个网段。它是通过CNI网络插件(flannel或者calico等组件)来实现IP的分配。我们可以把CNI插件理解成为一个交换机,每个pod都连接在这个交换机上,pod依靠这个交换机获取自己的IP地址
3 Service: 这是本章要讲的重点,service是为了k8s中某一组具有相同功能的pod应用提供一个稳定的统一的入口地址,然后service把请求负载均衡到后端的各个pod上面。
为什么会出现service这种抽象功能:为了实现高度自动化,k8s中的pod启动在哪个节点上与pod分配了什么IP都是通过k8s自动实现的。我们无法通过具体的固定的某一IP来定位到我们想要的pod,因为pod一旦重启,ip就会发生变化,为了解决这种问题,
k8s巧妙的利用了service的这一中间层充当固定的IP地址,所有同类型的pod都归一个service管理,只要找到这个service,无论podIP如何变化,service都能稳定的提供对应的业务功能
相信大家都用过nginx负载均衡,其实这个service与nginx作为负载均衡的作用是类似

看完这个图相信大家对service就有大体的轮廓了
二 service的构建及参数说明
我们先看一个service的构建模板
apiVersion: v1
kind: Service
metadata:
name: demo-service
labels:
app: demo-service
namespace: deafult
spec:
selector: #标签选择器,指明哪些标签的pod被此service管理
app: aanginx
type: NodePort #指明service的类型,一共有四种,clusterIP,nodeport,externalName,loadBalancer,其中默认的是cluster,
clusterIP: 10.xx.xx.xx #虚拟服务IP地址,当type=clusterIP的时候,如果不指定,则默认分配,一般这项我们都会选择默认,所以在生产环境中最好不要自己制定IP,以免冲突
sessionAffinity: cluster #是否支持session,可选值有俩个,一个是clusterIP,一个是NONE,默认NONE。
ports:
- name: nginx-port #port名字,指不指定都行
protocol: TCP #端口协议 可选项为TCP UDP。现在多出来一个SCTP,默认的TCP
port: 80 #service的端口
target: 80 #容器的端口(或者叫做pod的端口,一般都是一个pod里面一个容器)
nodeport: 30002 #节点端口,此端口的作用是可以让外部IP访问到服务
service的构建同样是四大部分,apiVersion,kind,metadata,spec。其中前三个变化不大,只有spec中的几个选项需要重点说明一下
type:
- ClusterIP:虚拟服务的IP地址(默认的就是这个),该地址用来让k8s集群内部的pod访问
- NodePort: 使用宿主机的端口。外部通过k8s集群的node+port就能访问到服务
- ExternalName: 让k8s集群内部的pod能够访问到集群外的服务,
- LoadBalancer: 使用外接负载均衡器完成服务的负载分发
sessionAffinity:
NONE:当为空时,service对后端的pod进行轮询访问,类似nginx负载均衡策略中的轮询策略
ClusterIP: 当指定为Cluster的时候,同一客户端(根据客户端的IP判定)的访问请求都转发达到同一个后端pod。类似于nginx中的URL_hash
ports:
下面我们说一下port,targetport,跟nodeport

根据上图我们可以知道,targetport属于pod容器的端口,比如nginx Pod要映射出80端口,那么targetPort就写8080,端口
port是属于service的端口,这个端口的作用用于在k8s集群中的pod进行通信,一般来说我们会将port的端口与targetPort的端口设置的相同以便于区分
nodePort就是节点上的端口,它能够给外界提供访问。注意nodeport端口有设置范围的,30000<= nodeport <=32767,让然我们可以通过手动修改来更改这个端口号的范围 比如像把端口范围改成1-65535,则在apiserver的启动命令里面添加如下参数:
–service-node-port-range=1-65535
三 小结
k8s service的基础知识就这么多,当再生产环境中方 pod需要暴露给公网的时候需要用到ingress,ingress其实也是service的一部分,只不过要复杂的多,ingress后续会专门写一篇来做详细说明
k8s-N0.4-service的更多相关文章
- k8s实战之Service
一.概述 为了适应快速的业务需求,微服务架构已经逐渐成为主流,微服务架构的应用需要有非常好的服务编排支持,k8s中的核心要素Service便提供了一套简化的服务代理和发现机制,天然适应微服务架构,任何 ...
- k8s 中的 service 如何找到绑定的 Pod 以及如何实现 Pod 负载均衡
k8s 中的 service 如何找到绑定的 Pod 以及如何实现 Pod 负载均衡 前言 endpoint kube-proxy userspace 模式 iptables ipvs kernels ...
- idou老师教你学Istio 14:如何用K8S对Istio Service进行流量健康检查
Istio利用k8s的探针对service进行流量健康检查,有两种探针可供选择,分别是liveness和readiness: liveness探针用来侦测什么时候需要重启容器.比如说当liveness ...
- 六,k8s集群service资源
目录 Service简介 ClusterIP Headless(无头service) NodePort Service简介 service的基本说明: Service 是作用于客户端可服务端(Pod) ...
- k8s重器之Service
Service是k8s的核心,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并将请求进行负载分发到各个容器应用上. 目录: Service定义详解 Service基本 ...
- 关于k8s里的service互访,有说法
昨天,测试了一个项目的接入.明白了以下几个坑: 1,traefik有可能有性能问题,如果daemonset安装,可重建.也需要通过8580端口查看性能. 2,集群中的service访问自己时,好像性能 ...
- k8s入门之Service(六)
将一组pod公开为网络服务,通过service代理,可以实现负载均衡 一.ClusterIP 此方式只能在集群内访问 1.使用命令暴露已存在的pod (1)继续使用前面章节的案例,查看名称为nginx ...
- k8s nod rc service 使用
引用自:https://blog.csdn.net/dream_broken/article/details/53115770
- k8s之Service
一.概述 在k8s中暴露Service访问(无论内部还是外部),都要经过kube-proxy: 如下图:
- 容器编排系统k8s之Service资源
前文我们了解了k8s上的DemonSet.Job和CronJob控制器的相关话题,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14157306.html:今 ...
随机推荐
- fiddler主要图标说明
主要图标含义说明: 正在将请求数据发往服务器 正在从服务器下载返回数据 请求过程中暂停 返回过程中暂停 请求中使用了HTTP HEAD方法; 返回中应该没有body内容 请求中使用了HTTP CONN ...
- web富文本编辑器收集
1.UEditor 百度的. 优点:插件多,基本满足各种需求,类似贴吧中的回复界面. 缺点:不再维护,文档极少,使用并不普遍,图片只能上传到本地服务器,如果需要上传到其他服务器需要改动源码,较为难办, ...
- html基础技巧:点击、placeholder、文本、字体、清楚浮动
点击处理: 消除a标签点击后的边框,颜色(background:#fff) 1:a:focus{outline:none;} button去除边框 1:border:none 2:border:0px ...
- js小方法,获取知道公历生日 (‘1992-01-19’),获取阴历生日日期,属相,非简单根据年份判断-----------声明:整理自网络!!
let lunar = { tg: '甲乙丙丁戊己庚辛壬癸', dz: '子丑寅卯辰巳午未申酉戌亥', number: '一二三四五六七八九十', year: '鼠牛虎兔龙蛇马羊猴鸡狗猪', mont ...
- 怎么给PDF文件交换页面
在使用PDF文件的时候有文件页面的排版错误的时候,这个时候就需要交换页面了,那么怎么给PDF文件交换页面呢,在使用PDF文件的时候需要交换页面的时候要怎么做呢,下面小编就为大家分享一下PDF文件交换页 ...
- SQL入门(3):定义约束/断言assertion/触发器trigger
本文介绍数据库的完整性 完整性控制程序: 指定规则,检查规则 (规则就是约束条件) 动态约束 intergrity constraint::=(O,P,A,R) O : 数据集合, 约束的对象 ?: ...
- appJSON["window"]["navigationBarTextStyle"] 字段需为 black 或 white
appJSON["window"]["navigationBarTextStyle"] 字段需为 black 或 white 改动成这个就可以了 &qu ...
- Visual Studio 2013 突然不高亮,编译报错
同事的电脑,估计是windows更新失败的原因,C盘容量减小到不到1G,VS的高亮也坏了,重启后硬盘容量增加了但是仍然不高亮. 解决办法记录一下: 重置下. 开始菜单 -->所有程序--> ...
- 转:mongoDB 修改 ulimit
转自:http://blog.yucanlin.cn/2015/03/23/mongodb-%E4%BF%AE%E6%94%B9-ulimit/ mongoDB 修改 ulimit 一切都源于mong ...
- Classy Numbers
http://codeforces.com/group/w1oiqifZbS/contest/1036/problem/C ①先查找,存入vector(dfs)-->排序(sort)--> ...