Kubernetes核心组件Services

news2024/11/16 9:46:59

1. Kubernetes Service概念

Service是kubernetes最核心的概念,通过创建Service,可以为一组具有相同功能的POD(容器)应用提供统一的访问入口,并且将请求进行负载分发到后端的各个容器应用上。

在Kubernetes中,在受到RC调控的时候,Pod副本是变化的,比如发生迁移或者伸缩的时候。这对于Pod的访问者来说是不可接受的。

Kubernetes中的Service是一种抽象概念,它定义了一个Pod逻辑集合以及访问它们的策略,Service同Pod的关联同样是居于Label来完成的。Service的目标是提供一种桥梁, 它会为访问者提供一个固定访问地址,用于在访问时重定向到相应的后端,这使得非 Kubernetes原生应用程序,在无须为Kubemces编写特定代码的前提下,轻松访问后端。

Service同RC一样,都是通过Label来关联Pod的。当你在Service的yaml文件中定义了该Service的selector中的label为app:my-web,那么这个Service会将Pod–>metadata–>labeks中label为app:my-web的Pod作为分发请求的后端。

当Pod发生变化时(增加、减少、重建等),Service会及时更新。这样一来,Service就可以作为Pod的访问入口,起到代理服务器的作用,而对于访问者来说,通过Service进行访问,无需直接感知Pod。

1.2 Kubernetes Service实现方式

Kubernetes分配给Service的固定IP是一个虚拟IP,并不是一个真实的IP,在外部是无法寻址的。在真实的系统实现上,Kubernetes是通过Kube-proxy组件来实现的虚拟IP路由及转发。所以在之前集群部署的环节上,我们在每个Node上均部署了Proxy这个组件,从而实现了Kubernetes层级的虚拟转发网络。

  • Kubernetes通过为每个service分配一个唯一的ClusterIP,所以当使用ClusterIP:port的组合访问一个service的时候,不管port是什么,这个组合是一定不会发生重复的。另一方面,kube-proxy为每个service真正打开的是一个绝对不会重复的随机端口,用户在service描述文件中指定的访问端口会被映射到这个随机端口上。这就是为什么用户可以在创建service时随意指定访问端口。
  • K8S集群中,Pod的IP是在docker0网段动态分配的,当发生重启,扩容等操作时,IP地址会随之变化。当某个Pod(frontend)需要去访问其依赖的另外一组Pod(backend)时,如果backend的IP发生变化时,如何保证fronted到backend的正常通信变的非常重要,此时需要借助Service实现统一访问。
  • Service的Virtual VIP是由Kubernetes虚拟出来的内部网络,外部是无法寻址到的。但是有些服务又需要被外部访问到,例如web前段。这时候就需要加一层网络转发,即外网到内网的转发。Kubernetes提供了NodePort、LoadBalancer、Ingress三种方式:
  • NodePort,原理是Kubernetes会在每一个Node上暴露出一个端口:nodePort,外部网络可以通过(任一Node)[NodeIP]:[NodePort]访问到后端的Service。
  • LoadBalancer,在NodePort基础上,Kubernetes可以请求底层云平台创建一个负载均衡器,将每个Node作为后端,进行服务分发。该模式需要底层云平台(例如GCE)支持。
  • Ingress,是一种HTTP方式的路由转发机制,由Ingress Controller和HTTP代理服务器组合而成。Ingress Controller实时监控Kubernetes API,实时更新HTTP代理服务器的转发规则。HTTP代理服务器有GCE Load-Balancer、HaProxy、Nginx等开源方案。

1.3 Service实战NodePort案例实战

NodePort模式,Kubernetes将会在每个Node上打开一个端口并且每个Node的端口都是一样的,通过:NodePort的方式Kubernetes集群外部的程序可以访问Service。

NodePort每个 Node节点的端口有很多(0~65535),NodePort案例演练配置实战,如图所示,选择外部网络:
在这里插入图片描述
在这里插入图片描述
通过Node IP+31455端口访问,如图所示:
在这里插入图片描述
在这里插入图片描述
Nginx Service配置代码如下:


{
  "kind": "Service",
  "apiVersion": "v1",
  "metadata": {
    "name": "nginx",
    "namespace": "default",
    "selfLink": "/api/v1/namespaces/default/services/nginx",
    "uid": "6a84483a-5262-11e8-8969-000c292f77da",
    "resourceVersion": "613764",
    "creationTimestamp": "2021-05-08T01:52:08Z",
    "labels": {
      "app": "nginx"
    }
  },
  "spec": {
    "ports": [
      {
        "name": "tcp-30080-80-p7s3q",
        "protocol": "TCP",
        "port": 30080,
        "targetPort": 80,
        "nodePort": 31455
      }
    ],
    "selector": {
      "app": "nginx"
    },
    "clusterIP": "172.17.188.189",
    "type": "LoadBalancer",
    "sessionAffinity": "None"
  },
  "status": {
    "loadBalancer": {}
  }
}

1.4 Service- LoadBalancer实操案例一

LoadBlancer Service 是 kubernetes 深度结合云平台的一个组件;当使用 LoadBlancer Service 暴露服务时,实际上是通过向底层云平台申请创建一个负载均衡器来向外暴露服务。

目前 LoadBlancer Service 支持的云平台已经相对完善,比如国外的 GCE、DigitalOcean,国内的 阿里云,私有云 Openstack 等等,由于 LoadBlancer Service 深度结合了云平台,所以只能在一些云平台上来使用。

LoadBalancer会分配ClusterIP,分配NodePort,并且通过Cloud Provider来实现LB设备的配制,并且在LB设备中配置中,将:NodePort作为Pool Member,LB设备依据转发规则将流量转到节点的NodePort。
kubectl expose deployment nginxv1 --port=8081 --target-port=80 --type=LoadBalancer

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.5 LoadBalancer案例二

LoadBalancer,在NodePort基础上,Kubernetes可以请求底层云平台创建一个负载均衡器,将每个Node作为后端,进行服务分发。 ClusterIP模式会提供一个集群内部的虚拟IP(与Pod不在同一网段),以供集群内部的pod之间通信使用。ClusterIP是Kubernetes service的默认类型;
在这里插入图片描述
为了实现上图的功能,需要以下几个组件的协同工作:

  • apiserver 用户通过kubectl命令向apiserver发送创建service的命令,apiserver接收到请求以后将数据存储到etcd中;
  • kube-proxy kubernetes的每个节点中都有一个叫做kube-proxy的进程,这个进程负责感知service,pod的变化,并将变化的信息写入本地的iptables中;
  • Iptables 使用NAT等技术将virtualIP的流量转至endpoint中。
    Cluster IP访问需要在Master /etc/kubernetes/apiserver配置文件,添加如下代码:
    KUBE_SERVICE_ADDRESSES=“–service-cluster-ip-range=172.17.188.0/24”
    重启apiserver及其他相关的服务即可,指令:

for I in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $I; systemctl enable $I; done

在这里插入图片描述

然后实战ClusterIP案例演练配置,如图所示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
基于Cluster IP访问80端口,首先要在各个NODE节点配置访问Cluster IP网段的路由,执行命令如下:
ip route add 172.17.188.0/24 dev docker0
#ip route del 172.17.188.0/24 dev docker0

在这里插入图片描述
访问Cluster IP:172.17.188.61的80端口,访问效果如图所示:

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

vue项目打包后使用reverse-sourcemap反编译到源码(详解版)

首先得说一下,vue项目中productionSourceMap这个属性。该属性对应的值为true|false。 当productionSourceMap: true,时:   1、打包后能看到xxxx.js.map文件,map文件够通过反编译看到源码;   2、打包后会导致文件变大(因为多了很多map文件导致的)&…

智慧政务大屏建设方案

智慧政务大屏建设方案是为政府部门提供信息化展示和决策支持的重要工具。下面将提供一个详细的智慧政务大屏建设方案,包括硬件设备、软件平台和功能模块等。 **一、硬件设备** 智慧政务大屏的硬件设备需要满足以下基本要求: 1. 显示屏:选择…

网页游戏的开发流程

网页游戏的开发流程可以根据项目的规模和复杂性而有所不同,但通常包括以下一般步骤,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.需求分析: 确定游戏的概念、目标受众和核…

关于信息安全软考的记录5

1、防火墙的概念 为了应对网络威胁,联网的机构或公司将自己的网络与公共的不可信任的网络进行隔离。 网络的安全信息程度和需要保护的对象,人为地划分若干安全区域,这些安全区域有: 公共外部网络,如Intrenet内联网&…

华为云云耀云服务器L实例评测|华为云耀云服务器L实例评测包管理工具安装软件(六)

七、华为云耀云服务器L实例评测包管理工具安装软件: 根据企业级项目架构图所示,本章主要是安装公司企业项目的基本环境LNMP,相关的包管理器Composer、Node、Npm、Yarn安装,评测一下包管理工具安装软件是否存在问题,如果…

【Tomcat】Apache发布两个新版本Tomcat修复多个Bug

Apache 官网发布了两个最新的 Tomcat 版本包,分别是:8.5.94、9.0.81 这两个最新版本修复了多个漏洞,统计信息如下表所示。有关漏洞的详细信息,请查阅官方相关文档(见:参考)。 严重等级漏洞说明…

Premiere Elements 2024(PR简化版)直装版

Adobe Premiere Elements 2024 是一款由Adobe Systems推出的视频编辑软件,它结合了易用性和专业级的功能,帮助用户对视频进行剪辑、特效、色彩校正等处理。 主要功能和特点: 导入和组织视频:Premiere Elements 2024允许用户快速导…

安装CentOS7.9操作系统

下面是安装CentOS7.9操作系统的步骤: 下载CentOS7.9镜像文件,可以到CentOS官网或者其他镜像站点下载。 创建一个可用的安装媒介,可以使用USB或者DVD。 插入安装媒介,启动计算机,进入BIOS设置,选择从外部设…

数据仓库Hive(林子雨课程慕课)

文章目录 9.数据仓库Hive9.1 数据仓库的概念9.2 Hive简介9.3 SQL语句转换为MapReduce作业的基本原理9.4 Impla9.4.1 Impala简介9.4.2 Impala系统架构9.4.3 Impala查询执行过程9.4.4 Impala与Hive的比较 9.5 Hive的安装和基本操作9.5.1 Hive安装9.5.2 Hive基本操作 9.数据仓库Hi…

STM32F407ZGT6移植AD7606

昨天调试的时候在STM32F103VCT6程序一切正常。但是将代码移植到STM32F407ZGT6时出现问题。 不能正常读取结果,会出现4996的错误信号而且经常出现,正确信号的值也不对乘2才能对上。 总结原因。 将AD7606_read_data里的延时参数修改为3、4、4问题解决。

PanoFlow:学习360°用于周围时间理解的光流

1.摘要: 光流估计是自动驾驶和机器人系统中的一项基本任务,它能够在时间上解释交通场景。自动驾驶汽车显然受益于360提供的超宽视野(FoV)◦ 全景传感器。 然而,由于全景相机独特的成像过程,为针孔图像设计…

SpringBoot+Vue前后端文件传输问题总结

SpringBootVue前后端文件传输问题总结 一、文件上传功能前端:文件上传1.File2.FormData(常用)3.Blob4.ArrayBuffer5.Base64 后端:文件接收1.MultipartFile 二、文件下载功能后端:文件传输前端:文件接收1.设…

动捕设备在动画影视制作中的应用

随着科技的发展,动画影视作品中的CG角色越来越逼真、生动形象,而这些CG角色大多背后是通过真人穿戴动捕设备,从而捕捉真人演员的肢体动作而创建的,如《遮天》作为国内首部全流程虚幻引擎5动画,结合动捕设备实现真人化动…

三相空气开关

一、三相空开的作用 三相空气开关对任意一相出现过载或短路,均起到保护作用。 二、三相空气开关原理图: 1、短路时,电磁脱钩器工作 2、过载时,发热元件引起双金属片弯曲,使脱钩器工作 3、测试按钮闭合时&#xff0c…

<图像处理> Fast角点检测

Fast角点检测 基本原理是使用圆周长为N个像素的圆来判定其圆心像素P是否为角点,如下图所示为圆周长为16个像素的圆(半径为3);OpenCV还提供圆周长为12和8个像素的圆来检测角点。 相对中心像素的位置信息 //圆周长为16 static c…

uni-app : 生成三位随机数、自定义全局变量、自定义全局函数、传参、多参数返回值

核心代码 function generateRandomNumber() {const min 100;const max 999;// 生成 min 到 max 之间的随机整数// Math.random() 函数返回一个大于等于 0 且小于 1 的随机浮点数。通过将其乘以 (max - min 1),我们得到一个大于等于 0 且小于等于 (max - min 1…

【ARM CoreLink 系列 7 -- TZC-400控制器简介】

文章目录 概述TZC-400 使用示例TZC-400 interfacesFPID & NSAIDRegionregion 检查规则 FeaturesRegister summaryTZC-400和TZPC和TZASC区别 转自:https://www.cnblogs.com/lvzh/p/16582717.html 概述 TZC-400对发送到内存或外设的事务执行安全检查。TZC-400使…

华为认证 | HCIP-Datacom,这门认证正式发布新版本!

华为认证数通高级工程师HCIP-Datacom-Campus Network Planning and Deployment V1.5(中文版)自2023年9月28日起,正式在中国区发布。 01 发布概述 基于“平台生态”战略,围绕“云-管-端”协同的新ICT技术架构,华为公司…

Visual Studio 2022 cmake编译 PP-OCRv4

1 环境准备 下载PaddleOCR PaddleOCR C 部署代码位于 PaddleOCR\deploy\cpp_infer目录下 paddle_inference paddle_inference opencv 这里使用已经安装好的opencv4.5.5下载dirent-master.zip 下载dirent-master.zip, 解压并复制dirent.h文件到PaddleOCR\deploy\cpp_infer目录下…