三十二、Kubernetes中Service详解、实例第二篇

news2024/11/15 19:42:31

1、概述

 

  在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。

        为了解决这个问题,kubernetes提供了Service资源,Service会对提供同一个服务的多个pod进行聚合,并且提供一个统一的入口地址。通过访问Service的入口地址就能访问到后面的pod服务。

在上篇文章中我们详细介绍了Service的作用、分类、创建以及ClusterIP类型的Service实例操作

如果没看的朋友建议先看先完上篇,再看这篇。地址:https://blog.csdn.net/u011837804/article/details/128509465

2、 Endpoint

        Endpoint是kubernetes中的一个资源对象,存储在etcd中,用来记录一个service对应的所有pod的访问地址,它是根据service配置文件中selector描述产生的。

        一个Service由一组Pod组成,这些Pod通过Endpoints暴露出来,Endpoints是实现实际服务的端点集合。换句话说,service和pod之间的联系是通过endpoints实现的,咱们通过下面的图例可以更清晰看出,endpoint是不是很像咱们的nginx代理呢。

负载分发策略

对Service的访问被分发到了后端的Pod上去,目前kubernetes提供了两种负载分发策略:

  • 如果不定义,默认使用kube-proxy的策略,比如随机、轮询

  • 基于客户端地址的会话保持模式,即来自同一个客户端发起的所有请求都会转发到固定的一个Pod上

    此模式可以使在spec中添加sessionAffinity:ClientIP选项

2.1、Endpoint默认分发策略

2.1.1、准备工作

安装上一篇文章的模式,创建service,并将每个pod中的nginx首页更改为其所在pod的IP,以示区别。

[root@k8s-master ~]# kubectl get pod -n dev -owide
NAME                             READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
pc-deployment-69cbb4f6b6-789qv   1/1     Running   0          18m   172.17.169.183   k8s-node2   <none>           <none>
pc-deployment-69cbb4f6b6-ct6qw   1/1     Running   0          18m   172.17.169.181   k8s-node2   <none>           <none>
pc-deployment-69cbb4f6b6-ttfbk   1/1     Running   0          18m   172.17.36.104    k8s-node1   <none>           <none>
[root@k8s-master ~]# curl 172.17.169.183
172.17.169.183
[root@k8s-master ~]# curl 172.17.169.181
172.17.169.181
[root@k8s-master ~]# curl 172.17.36.104
172.17.36.104

2.1.2、实例操作

# 查看ipvs的映射规则【rr 轮询】
[root@k8s-master ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.1:443 rr
  -> 192.168.8.120:6443           Masq    1      1          0
TCP  10.0.0.10:53 rr
  -> 172.17.235.193:53            Masq    1      0          0
  -> 172.17.235.194:53            Masq    1      0          0
TCP  10.0.0.10:9153 rr
  -> 172.17.235.193:9153          Masq    1      0          0
  -> 172.17.235.194:9153          Masq    1      0          0
# 此条映射即为当前实验service-clusterip 映射规则
TCP  10.4.248.58:80 rr
  -> 172.17.36.104:80             Masq    1      0          0
  -> 172.17.169.181:80            Masq    1      0          0
  -> 172.17.169.183:80            Masq    1      0          0
TCP  10.9.81.85:443 rr
  -> 172.17.169.146:4443          Masq    1      1          0
UDP  10.0.0.10:53 rr
  -> 172.17.235.193:53            Masq    1      0          0
  -> 172.17.235.194:53            Masq    1      0          0
[root@k8s-master ~]# clear
[root@k8s-master ~]#
[root@k8s-master ~]#
[root@k8s-master ~]#
[root@k8s-master ~]#
[root@k8s-master ~]# kubectl get endpoints -n dev
NAME                ENDPOINTS                                              AGE
service-clusterip   172.17.169.181:80,172.17.169.183:80,172.17.36.104:80   22m
[root@k8s-master ~]#

[root@k8s-master ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.1:443 rr
  -> 192.168.8.120:6443           Masq    1      1          0
TCP  10.0.0.10:53 rr
  -> 172.17.235.193:53            Masq    1      0          0
  -> 172.17.235.194:53            Masq    1      0          0
TCP  10.0.0.10:9153 rr
  -> 172.17.235.193:9153          Masq    1      0          0
  -> 172.17.235.194:9153          Masq    1      0          0
TCP  10.4.248.58:80 rr
  -> 172.17.36.104:80             Masq    1      0          0
  -> 172.17.169.181:80            Masq    1      0          0
  -> 172.17.169.183:80            Masq    1      0          0
TCP  10.9.81.85:443 rr
  -> 172.17.169.146:4443          Masq    1      1          0
UDP  10.0.0.10:53 rr
  -> 172.17.235.193:53            Masq    1      0          0
  -> 172.17.235.194:53            Masq    1      0          0
[root@k8s-master ~]#
# 循环访问测试 发现每个pod 轮询访问
[root@k8s-master ~]# while true;do curl 10.4.248.58:80; sleep 5; done;
172.17.169.183
172.17.169.181
172.17.36.104
172.17.169.183
172.17.169.181
172.17.36.104

2.2、更改分发策略,修改sessionAffinity:ClientIP

# 修改 sessionAffinity:None 改为 sessionAffinity:ClientIP
[root@k8s-master ~]# kubectl edit svc service-clusterip -n dev
service/service-clusterip edited
# 查看ipvs规则
[root@k8s-master ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.1:443 rr
  -> 192.168.8.120:6443           Masq    1      1          0
TCP  10.0.0.10:53 rr
  -> 172.17.235.193:53            Masq    1      0          0
  -> 172.17.235.194:53            Masq    1      0          0
TCP  10.0.0.10:9153 rr
  -> 172.17.235.193:9153          Masq    1      0          0
  -> 172.17.235.194:9153          Masq    1      0          0
# 【persistent 代表持久】
TCP  10.4.248.58:80 rr persistent 10800
  -> 172.17.36.104:80             Masq    1      0          0
  -> 172.17.169.181:80            Masq    1      0          0
  -> 172.17.169.183:80            Masq    1      0          0
TCP  10.9.81.85:443 rr
  -> 172.17.169.146:4443          Masq    1      1          0
UDP  10.0.0.10:53 rr
  -> 172.17.235.193:53            Masq    1      0          0
  -> 172.17.235.194:53            Masq    1      0          0
[root@k8s-master ~]#
# 循环访问测试 发现访问了同一个pod
[root@k8s-master ~]# while true;do curl 10.4.248.58:80; sleep 5; done;
172.17.169.183
172.17.169.183
172.17.169.183
172.17.169.183

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/171574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML常见转义字符

HTML中常见的转义字符 其他一些常用的字符实体&#xff1a; 链接 http://www.w3chtml.com/html/character.html

PID优化系列之给定值斜坡函数(PLC完整代码+Simulink仿真测试)

很多变频器里的工艺PID,都有"PID给定值变化时间"这个参数,这里的给定值变化时间我们可以利用斜坡函数实现,当然也可以利用PT1 低通滤波器对给定值进行平滑。给定值缓慢变化在很多闭环控制系统里很重要,比如收放卷在初始建张阶段目标值不建议突变容易将卷材拉断(…

初识 Django(Python WEB 框架)

初识 Django&#xff08;Python WEB 框架&#xff09;参考描述优劣 Django&#xff08;部分&#xff09;优势功能完备&#xff0c;开箱即用开发效率高Admin 管理后台安全ORM可扩展劣势性能模板过渡封装获取长期支持版&#xff08;Long Time Support&#xff0c;LTS&#xff09;…

基于Java+SpringBoot+Vue企业资源规划系统设计与实现

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战✌ 博主作品&#xff1a;《微服务实战》专栏是本人的实战经验总结&#xff0c;《Spring家族及…

开源项目介绍

文章目录简介经验casdoorkeycloaklatexopenMP简介 不经常见的开源项目&#xff0c;第一次接触。 经验 如果是已经开源的软件&#xff0c;使用起来非常的平稳&#xff0c;问题也少。原因是已经经过了多年的历练&#xff0c;已经稳当下来&#xff0c;该发现的问题已经解决的差…

unplugin-vue-components 不能识别组件的自动导入的类型 (pnpm)

引言 unplugin-vue-components 是一款能帮助组件自动导入的库&#xff0c;简单点的说&#xff0c;你不需要使用import xx from xxx.vue 这行语句也能实现导入的效果。 <script setup lang"ts"> import ScreenAdpter from compontents/ScreenAdpter/index.vue i…

[前端笔记——多媒体与嵌入] 6.HTML 中的图片+视频+音频内容

[前端笔记——HTML介绍] 6.HTML 中的图片1.HTML中的图片1.1怎样将一幅图片放到网页上&#xff1f;1.2备选文本1.3宽度和高度1.4.Image titles 图片标题1.5通过为图片搭配说明文字的方式来解说图片1.6CSS背景图片2.视频和音频内容2.1Web中的视频和音频2.1.1<video>元素2.1…

在linux中部署SpringBoot+Vue前后端分离应用

最近有任务需求&#xff0c;自己在linux中通过docker虚拟环境的方式部署了SpringBoot和Vue前后端分离的项目&#xff0c;现在做点总结&#xff0c;给需要的小伙伴分享。不足之处多多指正。关于在linux中安装docker&#xff0c;可以查看博主前几篇博客按照步骤进行安装&#xff…

【JUC系列】ReentrantLock实现本地锁的源码分析

使用场景 public class ReentrantLockTest {private static ReentrantLock lock new ReentrantLock();public static void main(String[] args) {new Thread(()->{lock.lock();// do somethingSystem.out.println("111");try {Thread.sleep(Integer.MAX_VALUE);…

[ 华为云 ] 云计算中Region、VPC、AZ 是什么,他们又是什么关系,应该如何抉择

前几天看到一个问答帖&#xff0c;我回答完了才发现这个帖子居然是去年的也没人回复&#xff0c;其中他问了一些华为云的问题&#xff0c;对于其中的一些概念&#xff0c;这里来总结讲解一下&#xff0c;希望对学习华为云的小伙伴有所帮助。 文章目录区域&#xff08;Region&am…

致 Tapdata 开源贡献者:聊聊 2022 年的进展和新一年的共建计划

岁末年初&#xff0c;在开源领域刚埋下一颗生机勃勃的种子的 Tapdata&#xff0c;想和正在关注我们的开发者&#xff0c;聊聊这一年的进展和新一年的共建计划。 2022年4月&#xff0c;Tapdata 宣布开源 PDK&#xff08;Plugin Development Kit&#xff09;&#xff0c;将自身的…

前端js实现文件多次添加累加上传和选择删除(django+js)- 添加累加文件上传 (一)

前言 原本的多文件上传功能在选择文件时&#xff0c;只能通过同一范围的鼠标框选或者ctrl/shift多选取选择文件&#xff0c;这样选择文件很不灵活&#xff0c;而且在确定之后如果漏选了文件&#xff0c;再次点击上传按钮时会清空表单里的文件信息&#xff0c;只能重复之前的操…

数据库mysql调优

问题描述: mysql dba在mysql服务端启用了连接在空闲一定时间 (10分钟) 后&#xff0c;就自动关闭连接(连接失效)的功能&#xff0c;导致java端连接池在空闲一段时间后&#xff0c;连接被自动关闭(自动失效)。为了避免这种情况出现&#xff0c;可以在dbcp上配置空闲的时候检测连…

PCI、PCI-X、PCI-E、PCI-E Card、Mini PCI-E、M.2、Add-in Card 它们有啥区别?这些概念你搞清楚了吗?

搞硬件或通信的“攻城狮”们&#xff0c;免不了要和各种通信协议及接口打交道。比如&#xff0c;我们经常接触PCI、PCI-X、PCI-E、PCI-E Card、Mini PCI-E、M.2(NGFF)、Add-in Card这些概念&#xff0c;作为“攻城狮”队伍中的一员&#xff0c;你搞清楚它们之间的关系了吗&…

Python爬虫教你爬取csdn作者排行榜

(一)两种爬取方式介绍 1.自动化测试工具 安装好驱动(以前的selenium文章有教程),然后进行元素定位&#xff0c;最后数据提取&#xff0c;用xls表格进行持久化存储 2.requests库 利用基本方法发起请求&#xff0c;获得json数据进行持久化存储 本篇文章先讲解第二种&#xf…

洛谷——树与图dp与状压dp

文章目录[NOIP1996 提高组] 挖地雷题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路代码最大食物链计数题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示思路代码[ZJOI2006]三色二叉树题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #…

浅说 INSERT/块参照/BlockReference

在AutoCAD中使用INSERT命令插入一个块时&#xff0c;生成块参照实体&#xff0c;也叫INSERT实体&#xff0c;在ObjectARX中&#xff0c;对应类AcDbBlockReference。反正就这么一个东西&#xff0c;名儿还挺多&#xff0c;我家乡有句话叫“二嫚她婆婆俩名”&#xff0c;莫非这是…

数据结构(5) treap

活动 - AcWing 参考—《算法竞赛进阶指南》-lyd 目录 一、概述 二、具体操作详解 1.常见操作 2.结构定义 3.操作基础函数 &#xff08;1&#xff09;pushup &#xff08;2&#xff09; 获得一个新节点 &#xff08;3&#xff09;左旋右旋 &#xff08;4&#xff09;建…

centos上面用docker 安装nacos 1.4.1

方式一&#xff1a; 下载nacos本地文件 1. 去官网下载GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.2.上传到Linux服务器中cd /usr/uploadtar -zxvf nacos-serv…

二、QML工程之初始工程代码分析

接着上一讲&#xff0c;当建立完工程之后&#xff0c;IDE 会呈现如下的界面下面的代码是main.cpp&#xff0c;工程起始运行的代码段&#xff0c;具体的函数说明都在代码段里面进行了标注。#include <QGuiApplication> //主要是ui进程运行头函数&#xff0c;包含事件循环&…