kubernetes中Service详解(图解)

Kubernetes K8S之Service服务详解与示例 K8S之Service概述与代理说明,并详解所有的service服务类型与示例 阅读详情

目录

容器及Pod间通信

Kube-proxy

DNS服务发现机制

Kubernetes服务


第一部分:容器及Pod间通信

Kubernets网络模型设计的一个基础原则是:每个Pod都拥有一个独立的IP地址,而且假定所有的Pod都在一个可以之间联通的,扁平的网络空间里,所以不管是否运行在同一个Node中,都要求他们可以直接通过对方的IP进行访问。设计这个原则的原因是用户不需要额外考虑如何建立Pod之间的连接,也不需要将容器端口映射到主机端口等问题

按照上述的网络抽象原则,Kubernets对集群的网络有以下要求:
1)所有容器都可以在不用NAT的方式下同其他容器通信
2)所有节点都可以在不用NAT的方式下同其他容器通信
3)容器的地址和别人看到的地址是同一个地址

下面我们介绍kubernets中有哪些通信场景
一.同一Pod中的容器间通信
同一个Pod中的容器共享同一个网络命名空间,他们之间的访问可以通过localhost地址和容器端口来实现

二.同一Node中Pod间通信
同一Node中的Pod默认路由都是Docker0的地址,由于他们关联在同一个Docker0网桥上,地址网段相同,所以他们能直接通信

三.不同Node之间Pod间的通信
Docker0网桥与宿主机网卡是完全不同的IP网段,并且Node之间的通信只能通过宿主机的物理网卡进行,因此要想实现位于不同Node上的Pod容器之间的通信,就必须想办法通过主机的IP地址进行寻址和通信

另一方面,这些动态分配并且隐藏在Docker0之后的所谓“私有IP地址”也是可以找到的,Kubernetes会记录所有正在运行的Pod的IP分配信息,并且将这些信息保存在etcd中(作为Service的Endpoint),这些私有IP对Pod到Pod之间的通信是非常重要的

想要实现支持不同Node上的Pod之间的通信,要达到两个条件
1.在整个kubernetes集群中对Pod的IP进行规划,不能有冲突
2.找到一种方法,将Pod的IP和所在的Node关联起来,通过这个关联可以让Pod可以互相访问

应对条件一,Kubernetes的网络增强软件Flannel就能够管理网段的划分
应对条件二,Pod中的的数据在发出时需要一个机制,能够知道对方Pod的IP地址挂载具体哪个Pod上,也就是要先找到Node对应宿主机的IP地址,将数据发送到这个宿主机的网卡上,然后在宿主机上将相应的数据发送到具体的Docker0上,一旦数据到达宿主机Node,则该Node内部的Docker0便知道如何将数据发送到Pod上

关于上述三种通信的模型图解,请查看笔者的另一篇文章Dokcer网络模型

第二部分:kube-proxy

kube-proxy是一个简单的网络代理和负载均衡器,它的作用主要是负载Service的实现,实现从Pod到Service,以及从NodePort到Service的访问

一.kube-proxy实现方式
usersapce方式:通过kube-proxy实现LB的代理服务,是kube0proxy的最初版本,较为稳定,但是效率不高

iptables方式:采用iptables来实现LB,是当前kube-proxy的默认方式

kube-proxy监视Kubernetes主服务器对服务/端点对象的各种增,删,改等操作。对于每个服务,它配置iptables规则,捕获Service的ClusterIP和端口的流量,并将流量重定向到服务的后端之一。对于每个Endpoint对象,它选择后端Pod的iptables规则

默认情况下,后端的选择是随机的。可通过Service.spec.sessionAffinity设置为“ClientIP”来选择基于客户端IP的会话关联

第三部分:DNS服务发现机制

在Kubernetes系统中,当Pod需要访问其他Service时,可以通过两种方式来发现服务,即环境变量和DNS方式。前者有非常大的局限性,所以实际我们一般都选用第二种DNS方式来实现服务的注册和发现

kube-dns用来为Service分配子域名,以便集群中的Pod可通过域名获取Service的访问地址,通常kube-dns会为Service赋予一个名为“service_name.namespace_name.svc.cluster_domain”的记录,用来解析Service的Cluster_IP。Kubernetes v1.4版本之后,其主要由Kubedns,Dnsmasq,Exechealthz三个组件构成

Kubedns通过Kubernetes API监视Service资源变化并更新DNS记录,主要为Dnsmasq提供查询服务,服务端口是10053
Dnsmasq是一款小巧的DNS配置工具,其在kube-dns插件中的作用是:通过kube-dns容器获取DNS规则,在集群中提供DNS查询服务,提供DNS缓存,提高查询性能,降低kube-dns容器的压力
Exechealthz主要提供监控检查功能

在这里插入图片描述
到这里我们其实可以简单描述一下整个Kubernetes之间到底是如何各组件之间进行协作的了!

第四部分:Kubernetes服务

Service是Kubernets最核心的概念,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求进行负载均衡分发到后端的各个容器应用上。
Service是一个虚拟的概念,真正实现Service功能的是kube-proxy,kube-proxy起到一个代理和负载均衡的作用

下面我们介绍一下Service的类型
Service的类型,即Service的访问方式
Service的类型默认是ClusterIP

ClusterIP,虚拟服务IP地址,该地址用于Kubernetes集群内部的Pod访问,在Node上kube-proxy通过设置的iptables规则进行转发

NodePort模式,使用宿主机的端口,使能够访问各Node的外部客户端通过Node的IP地址和端口号就能访问服务

LoadBalancer模式:使用外部负载均衡器完成到服务的负载分发,需要在spec.status.loadBalancer字段指定外部负载均衡器的地址,并同时定义nodePort和cluster IP,用于公有云环境

一.ClusterIP
ClusterIP服务是Kubernetes默认的服务类型。如果用户在集群内创建一个服务,
则在集群内部的其他应用程序可以对这个服务进行访问,但是不具备集群外部访问的能力

Service的ClusterIP地址是Kubernetes系统中虚拟的IP地址,由系统动态分配

二.NodePort
NodePort服务是外部访问服务的最基本方式,顾名思义,NodePort就是在所有节点或者虚拟机上开放特点的端口,该端口的流量将被转发到对应的服务
在这里插入图片描述
我们来分析一下上图要表达的意思,当集群外部的客户想要访问ServiceA时,它可以访问Host1-10.10.1.2的31600端口,也可以访问Host2-10.10.1.3的31600端口。这两个访问地址最终都会连接到ServiceA上,并且集群内部的Pod还是可以通过访问192.168.1.22这个集群地址来访问到ServiceA

可总结如下:
在具有集群内部IP的基础上,在集群的每个节点上的端口(每个节点上的相同端口)上公开服务。用户可以在任何< Node IP >:NodePort地址上访问

NodePort方式的缺点主要有:
1)每个服务占用一个端口
2)可以使用的范围端口为30000~32767
3)如果节点/虚拟机IP地址发生更改,需要进行相关处理

三. LoadBalancer
LoadBalancer服务是暴露服务至互联网最标准的方案,除了具有集群内部IP以及在NodePort上公开服务之外,还要求云提供商负载均衡将请求转发到每个Node节点的NodePort端口商
在这里插入图片描述
来自外部负载均衡器的流量将被定向到后端Pod,尽管其工作原理取决于云提供商。一些云提供商允许指定LoadBalancer IP。在这些情况下,将使用用户指定的LoadBalancerIP创建负载均衡器

四.Ingress
Ingress并不是服务类型的一种,它位于多个服务的前端,充当一个智能路由表或者集群的入口点,GKE默认的Ingress控制器将启动一个HTTP(S)的负载均衡器,这将使用户可以基于访问路径和子域名将流量路由到后端服务
例如下图,我们可以将app.sample.com下的流量转发到服务A,将app.comlpex.com路径下的流量转发到服务B
在这里插入图片描述

[Kubernetes]3. k8s集群Service详解 k8s集群Service详解,以及常用的几种类型 阅读详情

相关推荐

Kubernetes——Service详解

在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。为了解决这个问题,kubernetes提供了Service资源,Service会对提供同一个服务的多个pod进行聚合,并且提供一个统一的入口地址。通过访问Service的入口地址就能访问到后面的pod服务。Service在很多情况下只是一个概念,真正起作用的其实是。

wzpny的博客 1650

Kubernetes Service详解

一、Service介绍 在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也意味着不方便直接采用pod的ip对服务进行访问。 为了解决这个问题,kubernetes提供了Service资源,Service会对提供同一个服务的多个pod进行聚合,并且提供一个统一的入口地址。通过访问Service的入口地址就能访问到后面的pod服务。 Service在很多情况下只是一个概念,真正起作用...

axibazZ的博客 4496

容器化进阶Kubernetes(K8S)详解

作为Kubernetes系统的入口,其封装了核心对象的增删改查操作,以RESTful API接口方式提供给外部客户和内部组件调用。维护的REST对象持久化到Etcd中存储。Kubernetes Scheduler 为新建立的Pod进行节点(node)选择(即分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器。负责执行各种控制器,目前已经提供了很多控制器来保证Kubernetes的正常运行。

weixin_64672480的博客 3923

Kubernetes之Service详解

Kubernetes之Service详解 文章目录Kubernetes之Service详解前言一、Service 概念二、Service 流量策略2.1 外部流量策略2.1 内部流量策略三、Service 使用3.1 一般用法3.1.1 Cluster IP模式3.1.2 NodePort模式3.2 多端口 Service3.3 外部服务 Service3.3.1 Service绑定负载均衡3.3.2 Service转发流量至外部服务总结 前言 在kubernetes集群中每个Pod都有自己的 IP 地址

爱情码头的博客 3201

k8s创建service

k8s创建service 在之前已经创建了一个有两个nginx副本数的deployment,如下所示: [root@k8s-node1 mytestyaml]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 2/2 2 2 45m [root@k8s-node1 mytestyaml]# kubectl get

Liu_G的博客 5094

Kubernetes(k8s)之Service服务

Kubernetes Service 是集群内部服务发现和负载均衡的核心机制。它通过标签选择器将一组 Pod 抽象为服务,为前端应用提供稳定的访问入口。kube-proxy 是实现 Service 的关键组件,支持三种代理模式:userspace(已淘汰)、iptables(默认)和更高性能的 IPVS 模式。Service 支持多种类型:ClusterIP(集群内访问)、NodePort(节点端口暴露)、LoadBalancer(外部负载均衡)和 ExternalName(引入外部服务)。

m0_60889254的博客 1409

【云原生】kubernetes深入理解之Service

Service引入主要是解决Pod的动态变化,提供统一访问入口。Kubernetes Service定义了这样一种抽象: Service是一种可以访问 Pod逻辑分组的策略, Service通常是通过 Label Selector访问 Pod组。 Service能够提供负载均衡的能力,但是在使用上有以下限制:只提供 4 层负载均衡能力,而没有 7 层功能,但有时我们可能需要更多的匹配规则来转发请求,这点上 4 层负载均衡是不支持的。

康师傅没有眼泪 1735

k8s实践(12)--K8s service服务详解_kubernetes 中的service支持什么协议

希望在生产环境中使用外部的数据库集群,但测试环境使用自己的数据库。希望服务指向另一个Namespace中或其它集群中的服务。正在将工作负载转移到 Kubernetes 集群,和运行在 Kubernetes 集群之外的 backend。metadata:spec:ports:port: 80由于这个 Service 没有 selector,就不会创建相关的 Endpoints 对象。

2401_86358808的博客 1752

Service详解

Service介绍 在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。 为了解决这个问题,kubernetes提供了Service资源,Service会对提供同一个服务的多个pod进行聚合,并且提供一个统一的入口地址。通过访问Service的入口地址就能访问到后面的pod服务。 Service在很多情况下只是一个概念,真正起作用的其实是kube-proxy服务进程,每个Nod

Yosigo_的博客 3072

【云原生K8S】Kubernetes之Service

K8S的Service配置(ClusterIP、NodePort)

m0_71518373的博客 1953

云原生(二十) | Kubernetes篇】深入了解Kubernetes(k8s)Service

Service 创建完成后,会对应一组EndPoint。可以kubectl get ep 进行查看 type有四种,每种对应不同服务发现机制 Servvice可以利用Pod的就绪探针机制,只负载就绪了的Pod。自动剔除没有就绪的Pod 原理:kube-proxy 在负责这个事情 手动指定的ClusterIP必须在合法范围内 None会创建出没有ClusterIP的headless service(无头服务),Pod需要用服务的域名访问

Lansonli(蓝深李)的博客 1602

【云原生】详解Kubernetes、详解k8s,什么是k8s,k8s有什么用;k8s集群是什么、有什么用?

Kubernetes 是Google开源的分布式容器管理平台,是为了更方便的在服务器中管理我们的容器化应用。Kubernetes 简称 K8S,为什么会有这个称号?因为K和S是 Kubernetes 首字母和尾字母,而K和S中间有八个字母,所以简称 K8S,加上 Kubernetes比较绕口,所以一般使用简称 K8S。Kubernetes 即是一款容器编排工具,也是一个全新的基于容器技术的分布式架构方案,在基于Docker的基础上,可以提供从 一系列服务,提高了容器集群管理的便捷性。大家可以先看一下,下面一

点赞的都能无bug通过! 3968

2023-ICCV-隐式神经网络实现低光照图像增强(NeRCo)论文解读+代码解析

NeRCo()提出了一种名为NeRCo的隐式神经表示方法,用于合作式低光图像增强。现有的低光图像增强方法存在以下三个限制:不可预测的亮度降低和噪声、度量友好版本和视觉友好版本之间的固有差距,以及有限的配对训练数据。为了解决这些限制,论文提出了NeRCo方法,它以无监督的方式稳健地恢复感知友好的结果。具体而言,NeRCo通过一个可控的拟合函数统一了现实场景中多样的退化因素,从而提高了鲁棒性。对于输出结果,论文引入了来自预训练视觉-语言模型的先验信息,采用语义导向的监督方法。

weixin_45595504的博客 3183

Kubernetes(K8s)详解

Kubernetes(K8S)是一个开源的容器编排引擎,用于自动化部署、扩缩和管理容器化应用。其核心架构包括Master Node(含API Server、Scheduler、Controller Manager等组件)和Worker Node(含Kubelet、Kube-Proxy等)。K8S提供核心特性如服务发现、存储编排、自我修复等,支持通过kubectl命令行工具进行资源管理。Namespace用于隔离资源,Pod是最小部署单元,而Deployment则管理Pod的多副本和自愈能力。通过YAML文件

Java资料站 2007

AXI Memory Mapped To PCI Express IP 核设计实例

本文详细描述了AXI Memory Mapped To PCI Express(2.9) IP核的应用实例

u011565038的博客 2796

python中frida的安装+frida-server(雷电模拟器)保姆级安装教程

frida的安装,安卓逆向,adb

2301_80224944的博客 4577

Kubernetes (K8s) 与 Service Mesh 详解

本文详细介绍了 Kubernetes (K8s) 与 Service Mesh 技术,重点分析了 Kubernetes 原生网络模型的局限性及 Service Mesh 的解决方案。文章对比了 Istio、Linkerd、Consul Connect 和 Open Service Mesh 等主流产品的特点与适用场景,并探讨了 Kubernetes 1.28+ 对 Sidecar 的原生支持演进。核心功能部分深入解析了 Service Mesh 的可观测性和流量管理能力,包括自动指标收集、金丝雀发布等关键特

瘦到被风吹走的博客 1245

华为灵衢UB总线介绍

华为发布"灵衢"(UB)超节点互联协议,旨在构建支持AI大模型计算的基础设施。该协议采用统一内存语义和对等架构,使设备可直接访问远程内存,实现资源池化。技术突破包括2.1微秒超低时延和TB级带宽,支持64节点、52万张昇腾卡的集群互联。相比传统RDMA,"灵衢"更注重系统级资源调度,而非单纯数据传输。华为开放技术规范,推动生态建设,已有厂商开发兼容IP核。"灵衢"可适应x86、RISC-V等架构,未来将扩展至百万卡规模集群。

技术引领业务创新 4415

k8s的Service详解

我们在使用pod的时候,pod之前可以相互ping通的,机器本身也可以ping通pod和另外机器的pod,如果是一个serivce的话,我们通过端口号,就可以访问service。 不要直接使用和管理Pods,为什么? 当我们使用ReplicaSet 或者ReplicationController做水平扩展scale的时候,Pods可能被结束。 当我们使用Deployment的时候,我们去...

lixinkuan的博客 8166

SAP 人力资源工资配置项3---工资项配置

工资项设置

xiouluoyang的专栏 1万+

python基础:工作会用到的95%的基础python代码都在这了(万字详解!)

本文是一份Python编程语言的快速参考备忘单,涵盖了Python基础语法和常用数据类型。主要内容包括:Python入门指南(打印、变量声明)、内置数据类型(字符串、数值、列表、元组、集合、字典等)、控制结构(判断、循环)、函数定义、文件处理操作以及字符串操作方法(切片、循环遍历等)。这个备忘单特别适合初学者快速查阅Python基础语法,同时也提供了数据类型转换、f-string格式化字符串等实用技巧。通过简洁的代码示例展示了Python的基本语法规则和典型用法。

数据知道的博客 8158

K8S中service的分类以及各种使用场景详解

前言 前面两个章节讲解了K8S的总体入门准备以及全局配置管理的相关内容,正常来说接下来应该将将存储或者组件,但是由于那两部分内容过多且相对偏重细节,所以这一篇先把K8S中的Service先讲解下,帮助大家先理清K8S的整体架构,后续再讲解细节内容的时候可以快速上手,便于理解。 正文 Service是什么? 在说明Service是什么之前先了解下Service的使用场景: 当客户端想要访问K8S集群中的pod时,需要知道pod的ip以及端口,那K8S中如何在不知道pod的地址信息的情况下进行po

microGP的专栏 9463

【2026年华为秋招(AI)-2月4日-第一题(100分)- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

本文摘要:本文包含20道选择题,涵盖机器学习、线性代数、Transformer架构、概率统计等多个领域。题目涉及正交矩阵性质、Transformer注意力机制、聚类距离度量、ReAct框架、Softmax函数、混淆矩阵计算、Flash-Attention优化、位置编码、期望计算、归一化方法、矩阵迭代法、矩阵秩、大模型架构、神经网络推理、泊松流性质、SVM核函数以及聚类算法等知识点。每道题均提供解析,帮助理解核心概念和解题思路。

m0_73659489的博客 124
上一篇: Docker网络模型
下一篇: Linux进程管理命令ps和top
flat0809
博客等级 码龄9年 45粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值