测试开发技术网站
博客
设计
设计
开发
Python
测试
unittest
运维
Linux基础应用
CI/CD
CI/CD
数据库
数据库
云计算
云计算
云原生
云原生
爬虫
爬虫
数据分析
数据分析
人工智能
人工智能
登录
注册
Kubernetes----服务Service简介
收藏本文
作者:redrose2100 类别: 日期:2022-05-23 14:20:03 阅读:1167 次 消耗积分:0 分
# 一、Service简介 在Kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这就意味着不方便直接采用pod的ip对服务进行访问 为了解决这个问题,Kubernetes提供了Service资源,Service会对提供同一个服务的多个pod进行整合,并且提供一个统一的入口地址,通过访问Service的入口地址就能访问到后面的pod的服务 ![](/static/upload/20220523_141822.png) Service在很多情况下只是一个概念,真正起作用的其实是kube-proxy服务进程,每个node节点上都运行着一个kube-proxy服务进程,当创建service的时候会通过api-server像etcd写入创建的Service的信息,而kube-proxy会基于监听的机制发现这种Service的变动,然后它会将最新的Service信息转换成对应的访问规则 ![](/static/upload/20220523_141843.png) 通过 ipvsadm -Ln 命令可以查询到当前的kube-proxy转发规则,如下: ```bash [root@master ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 127.0.0.1:30100 rr persistent 10800 -> 10.244.1.244:9898 Masq 1 0 0 -> 10.244.1.245:9898 Masq 1 0 0 -> 10.244.1.246:9898 Masq 1 0 0 TCP 127.0.0.1:30101 rr persistent 10800 -> 10.244.1.14:801 Masq 1 0 0 -> 10.244.1.15:801 Masq 1 0 0 -> 10.244.2.220:801 Masq 1 0 0 TCP 172.17.0.1:30100 rr persistent 10800 -> 10.244.1.244:9898 Masq 1 0 0 -> 10.244.1.245:9898 Masq 1 0 0 -> 10.244.1.246:9898 Masq 1 0 0 TCP 172.17.0.1:30101 rr persistent 10800 -> 10.244.1.14:801 Masq 1 0 0 -> 10.244.1.15:801 Masq 1 0 0 -> 10.244.2.220:801 Masq 1 0 0 TCP 172.17.0.1:30110 rr persistent 10800 -> 10.244.1.248:9898 Masq 1 0 0 -> 10.244.2.215:9898 Masq 1 0 0 -> 10.244.2.216:9898 Masq 1 0 0 TCP 172.18.0.1:30080 rr -> 10.244.1.78:8443 Masq 1 0 0 TCP 172.18.0.1:30100 rr persistent 10800 -> 10.244.1.244:9898 Masq 1 0 0 -> 10.244.1.245:9898 Masq 1 0 0 -> 10.244.1.246:9898 Masq 1 0 0 TCP 172.18.0.1:30101 rr persistent 10800 -> 10.244.1.14:801 Masq 1 0 0 -> 10.244.1.15:801 Masq 1 0 0 -> 10.244.2.220:801 Masq 1 0 0 TCP 172.18.0.1:30110 rr persistent 10800 -> 10.244.1.248:9898 Masq 1 0 0 -> 10.244.2.215:9898 Masq 1 0 0 -> 10.244.2.216:9898 Masq 1 0 0 TCP 192.168.16.40:30080 rr -> 10.244.1.78:8443 Masq 1 0 0 TCP 192.168.16.40:30100 rr persistent 10800 -> 10.244.1.244:9898 Masq 1 0 0 -> 10.244.1.245:9898 Masq 1 0 0 -> 10.244.1.246:9898 Masq 1 0 0 TCP 192.168.16.40:30101 rr persistent 10800 -> 10.244.1.14:801 Masq 1 0 0 -> 10.244.1.15:801 Masq 1 0 0 -> 10.244.2.220:801 Masq 1 0 0 TCP 192.168.16.40:30110 rr persistent 10800 -> 10.244.1.248:9898 Masq 1 0 0 -> 10.244.2.215:9898 Masq 1 0 0 -> 10.244.2.216:9898 Masq 1 0 0 TCP 10.96.0.1:443 rr -> 192.168.16.40:6443 Masq 1 1 0 TCP 10.96.0.10:53 rr -> 10.244.2.96:53 Masq 1 0 0 -> 10.244.2.97:53 Masq 1 0 0 TCP 10.96.0.10:9153 rr -> 10.244.2.96:9153 Masq 1 0 0 -> 10.244.2.97:9153 Masq 1 0 0 TCP 10.99.92.60:802 rr persistent 10800 -> 10.244.1.14:801 Masq 1 0 0 -> 10.244.1.15:801 Masq 1 0 0 -> 10.244.2.220:801 Masq 1 0 0 TCP 10.101.183.26:8000 rr -> 10.244.1.79:8000 Masq 1 0 0 TCP 10.101.236.21:443 rr -> 192.168.16.42:443 Masq 1 2 0 TCP 10.102.27.124:9898 rr persistent 10800 -> 10.244.1.244:9898 Masq 1 0 0 -> 10.244.1.245:9898 Masq 1 0 0 -> 10.244.1.246:9898 Masq 1 0 0 TCP 10.103.241.6:443 rr -> 10.244.1.78:8443 Masq 1 0 0 TCP 10.109.97.23:9898 rr persistent 10800 -> 10.244.1.248:9898 Masq 1 0 0 -> 10.244.2.215:9898 Masq 1 0 0 -> 10.244.2.216:9898 Masq 1 0 0 TCP 10.244.0.0:30080 rr -> 10.244.1.78:8443 Masq 1 0 0 TCP 10.244.0.0:30100 rr persistent 10800 -> 10.244.1.244:9898 Masq 1 0 0 -> 10.244.1.245:9898 Masq 1 0 0 -> 10.244.1.246:9898 Masq 1 0 0 TCP 10.244.0.0:30101 rr persistent 10800 -> 10.244.1.14:801 Masq 1 0 0 -> 10.244.1.15:801 Masq 1 0 0 -> 10.244.2.220:801 Masq 1 0 0 TCP 10.244.0.0:30110 rr persistent 10800 -> 10.244.1.248:9898 Masq 1 0 0 -> 10.244.2.215:9898 Masq 1 0 0 -> 10.244.2.216:9898 Masq 1 0 0 TCP 127.0.0.1:30080 rr -> 10.244.1.78:8443 Masq 1 0 0 TCP 127.0.0.1:30110 rr persistent 10800 -> 10.244.1.248:9898 Masq 1 0 0 -> 10.244.2.215:9898 Masq 1 0 0 -> 10.244.2.216:9898 Masq 1 0 0 TCP 172.17.0.1:30080 rr -> 10.244.1.78:8443 Masq 1 0 0 UDP 10.96.0.10:53 rr -> 10.244.2.96:53 Masq 1 0 0 -> 10.244.2.97:53 Masq 1 0 0 [root@master ~]# ``` # 二、Kube-proxy工作模式 ## 2.1 userspace模式 userspace模式下,kube-proxy会为每一个Service创建一个监听端口,发现ClusterIP的请求被iptables规则重定向到kube-proxy监听的端口上,kube-proxy根据LB算法选择一个提供服务的pod并和其建立连接,以将请求转发到Pod上 在此模式下,kube-proxy充当了一个四层负载均衡的角色,由于kube-proxy运行在userspace中,在进行转发处理时会增加内核和用户空间之间的数据拷贝,虽然比较稳定,但是效率比较低 ![](/static/upload/20220523_141912.png) ## 2.2 iptables模式 iptables模式下,kube-proxy为service后端的每个pod创建对应的iptables规则,直接将向ClusterIP的请求重定向到一个Pod的ip 此模式下kube-proxy下承担四层负载均衡器的角色,只负责创建iptables规则,该模式的优点是较userspace模式效率更高,但不能灵活的LB策略,当后端Pod不可用时也无法进行调试 ![](/static/upload/20220523_141931.png) ## 2.2 ipvs模式 ipvs模式和iptables模式类似,kube-proxy监控Pod的变化并创建相应的ipvs规则,ipvs相对iptables转发效率更高,除此以外,ipvs支持更多的LB算法,ipvs也是当前默认的推荐的模式 ![](/static/upload/20220523_141954.png) # 三、Service资源清单 ```yaml apiVersion: v1 # 版本 kind: Service # 类型 metadata: # 元数据 name: service # 资源名称 namespace: dev # 命名空间 spec: # 描述 selector: # 标签选择器,用于确定当前service代理哪些pod app: nginx type: # Service类型,指定service的访问方式 clusterIP: # 虚拟服务的IP地址 sessionAffinity: # session亲和性,支持ClientIP,Node两个选项 ports: # 端口信息 - protocol: TCP port: # Service 端口 targetPort: # Pod端口 nodePort: # 主机端口 ``` 其中type字段可选值有以下几个: * ClusterIP:默认值,它是Kubernetes系统自动分配的虚拟IP,只能在集群内部访问 * NodePort:将Server通过指定的Node上的端口暴露都给外部,通过此方法,就可以在集群外部访问服务 * LoadBalancer:使用外接负载均衡器完成到服务的负载分发,注意此模式需要外部云环境支持 * ExternalName:把集群外部的服务引入集群内部,直接使用
始终坚持开源开放共享精神,同时感谢您的充电鼓励和支持!
版权所有,转载本站文章请注明出处:redrose2100, http://blog.redrose2100.com/article/279
上一篇:
Kubernetes----CronJob控制器
下一篇:
Kubernetes----ClusterIP类型的Service
搜索
个人成就
出版书籍
《Pytest企业级应用实战》
测试开发技术全栈公众号
测试开发技术全栈公众号
DevOps技术交流微信群
加微信邀请进群
常用网站链接
开源软件洞察
云原生技术栈全景图
Python语言官方文档
Golang官方文档
Docker官方文档
Jenkins中文用户手册
Scrapy官方文档
VUE官方文档
Harbor官方文档
openQA官方文档
云原生开源社区
开源中国
Kubernetes中文文档
Markdown语法官方教程
Kubernetes中文社区
Kubersphere官方文档
BootStrap中文网站
JavaScript中文网
NumPy官方文档
Pandas官方文档
GitLink确实开源网站
数据库排名网站
编程语言排名网站
SEO综合查询网站
数学加减法练习自动生成网站
Kickstart Generator
文章分类
最新文章
最多阅读
特别推荐
×
Close
登录
注册
找回密码
登录邮箱:
登录密码:
图片验证码:
注册邮箱:
注册密码:
邮箱验证码:
发送邮件
注册邮箱:
新的密码:
邮箱验证码:
发送邮件