编排系统K8S之Service资源解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 今天我们来了解下K8S上的Service资源的相关话题,这是容器化体系的第1篇,基本的概念、基础理论不在本章描述。

      今天我们来了解下K8S上的Service资源的相关话题,这是容器化体系的第1篇,基本的概念、基础理论不在本章描述。

      众所周知,云原生现在越来越流行,已成为云计算发展的必然趋势,在云原生的4大核心领域中,容器化也必然成为不可或缺的一项伟大工程。

     基于Google 2014年创建管理,其多年大规模容器管理技术Borg的开源版本的Kubernetes,可以在物理或虚拟机的上运行容器化应用,能提供一个以“容器为中心的基础架构”,满足在生产环境中运行应用的一些常见需求。

      Service资源在编排系统K8S上主要用来解决Pod的访问问题。我们知道在K8S上Pod由于各种原因需要进行重建,此时,重建后的Pod的Ip地址和名称均已发生变更,这样一来使得应用服务访问Pod时就变得有些不便。为了解决Pod访问能有一个固定的端点,在K8S平台上,我们就借用Service资源进行解决。

     简单来讲,Service对象就是工作在节点上的一组Iptables 或 Ipvs规则,用于将到达Service对象Ip地址的流量调度转发至相应Endpoint对象指向的Ip地址 和 端口之上。工作于每个节点的Kube-Proxy组件通过ApiServer持续监控着各Service及其关联的Pod对象,并将其创建或变动实时反映至当前工作节点上相应的Iptables 或 Ipvs规则。其实Service和Pod或其他资源的关联,本质上不是直接关联,它依靠一个中间组件Endpoint,Endpoint主要作用就是引用后端Pod或其他资源(比如K8S外部的服务也可以被Endpoint引用),所谓Endpoint就是Ip地址 + 端口。

       

     

      如上图所示:在K8S平台上,Kube-Proxy会不断监视着ApiServer上的Service资源变动情况,及时将变动转化为本机的Iptables 或 Ipvs规则,对应客户端Pod访问对应Server Pod,报文首先会从本机的Iptables 或 Ipvs规则所匹配,然后再由对应规则逻辑把请求调度到对应的Pod上。

       Service代理模式  

      截止目前,在K8S平台上Service代理模式主要包含以下三种:

       1、userspace

      早期的K8S平台版本(在version 1.1及之前的版本)所采用的默认代理模式。在 Kubernetes v1.1 版本,新增了 Iptables 代理,但并不是默认的运行模式。

       2、iptables

      从 Kubernetes v1.2 起,默认就是 Iptables 代理。在 Kubernetes v1.8.0-beta.0 中,添加了 Ipvs 代理。

       3、ipvs

     后面的版本(即 version 1.11开始及以后版本)默认代理模式为如果对应ipvs的模块没有加载,它会自动降级为Iptables 。在 Kubernetes 1.14 版本开始默认使用 Ipvs 代理。

      此种模式,Kube-Proxy 会监视 Kubernetes Service 对象和 Endpoints ,调用 netlink 接口以相应地创建 Ipvs 规则并定期与 Kubernetes Service 对象和 Endpoints 对象同步 Ipvs 规则,以确保 Ipvs 状态与期望一 致。访问服务时,流量将被重定向到其中一个后端 Pod。

      与 Iptables 类似,Ipvs 于 netfilter 的 hook 功能,但使用哈希表作为底层数据结构并在内核空间中工作。这意 味着 Ipvs 可以更快地重定向流量,并且在同步代理规则时具有更好的性能。此外,Ipvs 为负载均衡算法提供了更多选项。


       Service类型

       截止目前,在K8S平台上Service类型主要包含以下四种:

       1、Cluster IP,即 我们在创建Service资源时,如果不指定其type类型的话,默认为此种类型

       2、NodePort

       3、Load Balancer

       4、ExternalName

       不同类型的service,其功能和作用也有所不同。在 Kubernetes v1.0 版本, Service 是 “4层”(TCP/UDP over IP)概念。在 Kubernetes v1.1 版本,新增了 Ingress API(beta 版),用来表示 “7层”(HTTP)服务。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
16天前
|
Kubernetes 容器
K8S的Service的LoadBanlance之Metallb解决方案
本文介绍了如何在Kubernetes中使用MetalLB来实现Service的LoadBalancer功能,包括MetalLB的部署、配置、以及通过创建地址池和部署服务来测试MetalLB的过程。
26 1
K8S的Service的LoadBanlance之Metallb解决方案
|
20天前
|
Kubernetes 负载均衡 微服务
Kubernetes 生态系统中的微服务治理
【8月更文第29天】随着微服务架构的普及,管理分布式系统的复杂性也随之增加。Kubernetes 作为容器编排的事实标准,为微服务架构提供了强大的支持。结合像 Istio 这样的服务网格工具,Kubernetes 能够有效地解决微服务治理中的诸多挑战,如服务发现、负载均衡、流量管理和安全策略等。
27 1
|
8天前
|
网络协议 大数据 云栖大会
2024云栖大会 预告:IPv6与DNS基础资源专场
2024云栖大会 预告:IPv6与DNS基础资源专场
2024云栖大会 预告:IPv6与DNS基础资源专场
|
6天前
|
域名解析 缓存 网络协议
域名系统DNS_基础知识
域名系统(DNS)使我们能够通过易记的域名访问互联网资源,而非直接使用IP地址。DNS采用层次树状结构,由多个分量组成,如顶级域名(如.com或.cn)位于最右侧。域名长度限制为255个字符,各级域名由相应管理机构监管,顶级域名由ICANN管理。DNS分为国家顶级域名、通用顶级域名和反向域等。域名解析涉及根域名、顶级域名及权限域名服务器,通过递归和迭代查询完成。为提高效率,DNS使用分布式服务器和高速缓存技术。
|
18天前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
59 6
|
18天前
|
图形学 开发者 UED
Unity游戏开发必备技巧:深度解析事件系统运用之道,从生命周期回调到自定义事件,打造高效逻辑与流畅交互的全方位指南
【8月更文挑战第31天】在游戏开发中,事件系统是连接游戏逻辑与用户交互的关键。Unity提供了多种机制处理事件,如MonoBehaviour生命周期回调、事件系统组件及自定义事件。本文介绍如何有效利用这些机制,包括创建自定义事件和使用Unity内置事件系统提升游戏体验。通过合理安排代码执行时机,如在Awake、Start等方法中初始化组件,以及使用委托和事件处理复杂逻辑,可以使游戏更加高效且逻辑清晰。掌握这些技巧有助于开发者更好地应对游戏开发挑战。
41 0
|
18天前
|
图形学 C# 开发者
Unity粒子系统全解析:从基础设置到高级编程技巧,教你轻松玩转绚丽多彩的视觉特效,打造震撼游戏画面的终极指南
【8月更文挑战第31天】粒子系统是Unity引擎的强大功能,可创建动态视觉效果,如火焰、爆炸等。本文介绍如何在Unity中使用粒子系统,并提供示例代码。首先创建粒子系统,然后调整Emission、Shape、Color over Lifetime等模块参数,实现所需效果。此外,还可通过C#脚本实现更复杂的粒子效果,增强游戏视觉冲击力和沉浸感。
35 0
|
18天前
|
C# Windows 开发者
超越选择焦虑:深入解析WinForms、WPF与UWP——谁才是打造顶级.NET桌面应用的终极利器?从开发效率到视觉享受,全面解读三大框架优劣,助你精准匹配项目需求,构建完美桌面应用生态系统
【8月更文挑战第31天】.NET框架为开发者提供了多种桌面应用开发选项,包括WinForms、WPF和UWP。WinForms简单易用,适合快速开发基本应用;WPF提供强大的UI设计工具和丰富的视觉体验,支持XAML,易于实现复杂布局;UWP专为Windows 10设计,支持多设备,充分利用现代硬件特性。本文通过示例代码详细介绍这三种框架的特点,帮助读者根据项目需求做出明智选择。以下是各框架的简单示例代码,便于理解其基本用法。
56 0
|
20天前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
1月前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
53 6