ClusterIP、NodePort、LoadBalancer 和 ExternalName

Service 定义
在 Kubernetes 中,由于Pod 是有生命周期的,如果 Pod 重启它的 IP 可能会发生变化以及升级的时候会重建 Pod,我们需要 Service 服务去动态的关联这些 Pod 的 IP 和端口,从而使我们前端用户访问不受后端变更的干扰。

Service 原理


Kubernetes 在创建 Service 时,会根据标签选择器 Label Selector 来寻找 Pod,找到 Pod 后,会建立 Endpoint 映射表,存放 Pod 的端口和 IP 。当 Pod 发生变化时,Endpoint 也会更新它的映射关系,这样 Service 接收前端 Client 请求的时候,就会通过 Endpoint,找到最终需要转发到哪个 Pod 进行访问。Endpoint 和 Service 是同名的,这里的具体实现是靠kube-proxy完成的。

同时,由于 Kubernetes 内部有一个 DNS Server,我们可以在 Pod 容器内以【服务名.命名空间.域名后缀】的方式访问服务名称,这样也不需要固定的 Service IP 了,默认域名后缀是 svc.cluster.local

 Kubernetes 的 Service 共有四种类型:ClusterIP、NodePort、LoadBalancer 和 ExternalName。

ClusterIP: 此为默认的 Service 类型,自动分配一个仅 Cluster 内部可以访问的虚拟 IP。

NodePort: 这种类型建立在 ClusterIP 类型之上,其在每个节点的 IP 地址的某静态端口(NodePort)暴露服务,因此,它依然会为 Service 分配集群 IP 地址,并将此作为 NodePort 的路由目标。这种类型的 Servcie 既可如 ClusterIP 一样受到集群内部客户端 Pod 的访问,也会受到集群外部客户端通过套接字 <NodeIP>:<NodePort> 进行的请求。

NodePort 即节点 Port,通常在安装部署 Kubernetes 集群系统时会预留一个 端口范围用于 NodePort,默认为 30000~32767 之间的端口。

LoadBalancer:这种类型建立在 NodePort 类型之上,其通过 cloud provider 提供的负载均衡器将服务暴露到集群外部,因此 LoadBalancer 一样具有 NodePort 和 ClusterIP。简单的说,就是一个 LoadBalancer 类型的 Service 会指向关联至 Kubernetes 集群外部的、切实存在的某个负载均衡设备,该设备通过工作节点之上的 NodePort 向集群内部发送请求流量。
 

EXternalName:其通过将 Service 映射至由 externalName 字段的内容指定的主机名来暴露服务,此主机名需要被 DNS 服务解析至 CNAME 类型的记录。此种类型并非定义由 Kubernetes 集群提供的服务,而是把集群外部的某服务以 DNS CNAME 记录的方式映射到集群内,从而让集群内的 Pod 资源能够访问外部的 Service 的一种实现方式。因此,这种类型的 Service 没有 CluserIP 和 NodePort,也没有标签选择器用于选择 Pod 资源,因此也不会有 Endpoints 存在。

port

  • port是k8s集群内部访问service的端口(service暴露在Cluster IP上的端口),即通过clusterIP: port可以访问到某个service
nodePort
  • nodePort是外部访问k8s集群中service的端口,通过nodeIP: nodePort可以从外部访问到某个service。

比如外部用户要访问k8s集群中的一个Web应用,那么我们可以配置对应service的type=NodePort,nodePort=30001。其他用户就可以通过浏览器http://node:30001访问到该web服务。而数据库等服务可能不需要被外界访问,只需被内部服务访问即可,那么我们就不必设置service的NodePort

TargetPort
  • targetPort 是pod的端口,从port和nodePort来的流量经过kube-proxy流入到后端pod的targetPort上,最后进入容器。
containerPort
  • containerPort是pod内部容器的端口,targetPort映射到containerPort。
hostPort

这是一种直接定义Pod网络的方式。hostPort是直接将容器的端口与所调度的节点上的端口路由,这样用户就可以通过宿主机的IP加上来访问Pod了,如

这样做有个缺点,因为Pod重新调度的时候该Pod被调度到的宿主机可能会变动,这样就变化了,用户必须自己维护一个Pod与所在宿主机的对应关系。 使用了 hostPort 的容器只能调度到端口不冲突的 Node 上,除非有必要(比如运行一些系统级的 daemon 服务),不建议使用端口映射功能。如果需要对外暴露服务,建议使用 NodePort Service。

总的来说,port和nodePort都是service的端口,前者暴露给集群内客户访问服务,后者暴露给集群外客户访问服务。从这两个端口到来的数据都需要经过反向代理kube-proxy流入后端 pod的targetPod,从而到达pod上的容器内。

Endpoint

创建Service的同时,会自动创建跟Service同名的Endpoints。

Endpoint 是k8s集群中一个资源对象,存储在etcd里面,用来记录一个service对应的所有pod的访问地址。service通过selector和pod建立关联。

Endpoint = Pod IP + Container Port

service配置selector endpoint controller 才会自动创建对应的endpoint 对象,否则是不会生产endpoint 对象

一个service由一组后端的pod组成,这些后端的pod通过service endpoint暴露出来,如果有一个新的pod创建创建出来,且pod的标签名称(label:pod)跟service里面的标签(label selector 的label)一致会自动加入到service的endpoints 里面,如果pod对象终止后,pod 会自动从edponts 中移除。在集群中任意节点 可以使用curl请求service <CLUSTER-IP>:<PORT>

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

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

相关文章

MySQL运维实战之ProxySQL(9.10)proxysql监控

作者&#xff1a;俊达 stats数据库 从stats数据库中可以查到proxysql一些内部组件的状态&#xff0c;如内存使用情况、连接池信息、会话信息、SQL执行状态等。 mysql> show tables from stats; --------------------------------------- | tables …

昇思25天学习打卡营第11天 | ResNet50迁移学习

利用ResNet50进行迁移学习的探索与实践 在人工智能的各个领域中&#xff0c;迁移学习已成为一个极其有效的策略&#xff0c;特别是在图像识别任务中。通过使用预训练模型&#xff0c;我们可以利用在大型数据集&#xff08;如ImageNet&#xff09;上学到的丰富特征&#xff0c;…

Vue 使用 Element UI 组件库

https://andi.cn/page/621589.html

C嘎嘎类与对象拓展

本篇文章是对浅谈C嘎嘎类与对象的拓展 初始化列表&#xff08;初始化&#xff09; 格式&#xff1a;类名&#xff08;类型 形参1, 类型 形参2&#xff09; &#xff1a;&#xff08;冒号&#xff09; 变量【类中声明的变量】&#xff08;形参1&#xff09; , 变量【类中…

基于天地图使用Leaflet.js进行WebGIS开发实战

目录 前言 一、天地图的key 1、创建应用 2、调用限制策略 注&#xff1a; &#xff08;1&#xff09;日服务调用超量会暂时拒绝访问&#xff0c;次日自动开启&#xff1b; &#xff08;2&#xff09;如果服务调用过程中存在数据爬取或者下载行为&#xff0c;服务调用会被自…

【中项】系统集成项目管理工程师-第3章 信息技术服务-3.6服务发展

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

K12智慧校园智能化解决方案

1. 项目背景 “十三五”期间&#xff0c;教育信息化工作旨在为教育改革发展提供动力与手段&#xff0c;目标是到2020年建成与国家教育现代化发展目标相适应的教育信息化体系。 2. 建设需求 智慧校园系统框架解析与建设目标分析&#xff0c;旨在实现教育信息化目标任务。 3.…

【C++航海王:追寻罗杰的编程之路】关于空间配置器你知道多少?

目录 1 -> 什么是空间配置器 2 -> 为什么需要空间配置器 3 -> SGI-STL空间配置器的实现原理 3.1 -> 一级空间配置器 3.2 -> 二级空间配置器 3.2.1 -> 内存池 3.2.2 -> SGI-STL中二级空间配置器设计 3.2.3 -> SGI-STL二级空间配置器之空间申请 …

Java | Leetcode Java题解之第263题丑数

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isUgly(int n) {if (n < 0) {return false;}int[] factors {2, 3, 5};for (int factor : factors) {while (n % factor 0) {n / factor;}}return n 1;} }

C++树形结构(3 树的中心、重心)

目录 一.树的中心&#xff1a; 1.树的概念&#xff1a; 2.树的性质&#xff1a; 性质1&#xff1a; 性质2&#xff1a; 3.树的中心求解&#xff1a; 4.例题&#xff1a; 二.树的重心&#xff1a; 1.基础概念&#xff1a; 2.求解方法&#xff1a; 3.例题&#xff1a;…

毕业/期刊论文发表必备:YOLOv5 / v7 / v8 /v10算法网络结构图【文末提供原型文件下载地址】

前言:Hello大家好,我是小哥谈。同学们在写YOLO算法相关毕业论文/期刊论文的时候,不可避免的会用到相关版本的网络结构图,曾有很多小伙伴私信我索要原型文件,本文就给大家提供YOLOv5/v7/v8/v10版本算法网络结构图及原型文件下载地址。🌈 目录 🚀1.网络结构图 �…

SpringBoot源码深度解析

今天&#xff0c;聊聊SpringBoot的源码&#xff0c;本博客聊的版本为v2.0.3.RELEASE。目前SpringBoot的最新版为v3.3.2&#xff0c;可能目前有些公司使用的SpringBoot版本高于我这个版本。但是没关系&#xff0c;因为版本越新&#xff0c;新增的功能越多&#xff0c;反而对Spri…

2024-07-19 Unity插件 Odin Inspector9 —— Validation Attributes

文章目录 1 说明2 验证特性2.1 AssetsOnly / SceneObjectsOnly2.2 ChildGameObjectsOnly2.3 DisallowModificationsIn2.4 FilePath2.5 FolderPath2.6 MaxValue / MinValue2.7 MinMaxSlider2.8 PropertyRange2.9 Required2.10 RequiredIn2.11 RequiredListLength2.12 ValidateIn…

Python数据风险案例54——人工智能热门概念股爬虫分析其价值(三因子模型)

案例背景 人工智能概念如火如荼的夏天&#xff0c;在这个2024年&#xff0c;我觉得需要提早布局一下这个概念。所以我们找一下A股里面人们的人工智能概念股&#xff0c;然后分析他们的数据应用三因子模型&#xff0c;也就是最经典的资本资产定价模型的衍生版去研究他们各自的投…

51 单片机[8]:串口通信

一、目标 单片机通过串口向电脑发送数据&#xff08;数字递增&#xff09;电脑通过串口控制单片机上的LED 二、基本概念 1. 串口 串口是一种应用十分广泛的通讯接口&#xff0c;串口成本低、容易使用、通信线路简单&#xff0c;可实现两个设备的互相通信。 单片机的串口可以…

Visio绘制的relu激活函数结构图,可导出高清图片,可修改,无水印。

Visio绘制的relu激活函数结构图,可导出高清图片&#xff0c;可修改&#xff0c;无水印。 方便用于小论文写作&#xff0c;方便用于毕业设计。 Visio版本为2021版&#xff0c;可用更高版本打开。 下载地址&#xff1a;地址 图片展示&#xff1a;

【Linux Commands】命令分类整理-命令搜索引擎-速查手册

Linux命令速查网站&#xff1a;https://linux.embeddev.asia 目前已经搜集了600条命令,对每一条命令都有详细的介绍。 本文展示的命令不全是安装系统时自带的。 Linux命令基于Unix哲学&#xff0c;旨在创建简单、短小、可组合的工具。每个命令通常只执行一个任务&#xff0…

open3d:随机采样一致性分割平面

1、背景介绍 随机采样一致性算法&#xff08;RANSAC Random Sample Consensus&#xff09;是一种迭代的参数估计算法&#xff0c;主要用于从包含大量噪声数据的样本中估计模型参数。其核心思想是通过随机采样和模型验证来找到数据中最符合模型假设的点。因此&#xff0c;只要事…

TI 【ads131m02】DSP TMS320F280049C调试与学习笔记

ads131m02 调试与学习笔记 时序SPI 参考链接&#xff1a; ADS131M02_TI官网资料参考 ADS131M02—英文使用手册 ADS131M0x—参考代码 Example C Code ADS131M02 是一款 two 通道、同步采样、24 位、ΔΣ 模数转换器 (ADC)&#xff0c;具有宽动态范围、低功耗和电能测量特定功能…

你还在手动构建Python项目吗?PyBuilder让一切自动化!

在 Python 项目开发中&#xff0c;构建和管理项目是一项繁琐但必不可少的工作。你可能需要处理依赖项、运行测试、生成文档等。这时候&#xff0c;PyBuilder 出场了。它是一个强大的构建自动化工具&#xff0c;可以帮助你简化项目管理&#xff0c;让你更专注于编写代码。 什么…