重温k8s基础概念知识系列四(服务、负载均衡和联网)

文章目录

    • 1、Kubernetes 网络模型
    • 2、为什么需要 Service?
      • 2.1、定义service
      • 2.2、Service的类型
      • 2.3、Service 工作原理
      • 2.4、Service 与 DNS
    • 3、Ingress(高级流量管理)
      • 3.1、定义Ingress 资源
      • 3.2、Ingress 规则
    • 4、常见面试高频问答
    • 5、总结

1、Kubernetes 网络模型

Kubernetes 网络模型由几个部分构成:

  1. 集群中的每个 Pod 都会获得自己的、独一无二的集群范围 IP 地址。

    • Pod 有自己的私有网络命名空间,Pod 内的所有容器共享这个命名空间。 运行在同一个 Pod 中的不同容器的进程彼此之间可以通过 localhost 进行通信。
  2. Pod 网络(也称为集群网络)处理 Pod 之间的通信。它确保(除非故意进行网络分段):

    • 所有 Pod 可以与所有其他 Pod 进行通信, 无论它们是在同一个节点还是在不同的节点上。 Pod 可以直接相互通信,而无需使用代理或地址转换(NAT)。

    在 Windows 上,这条规则不适用于主机网络 Pod。

    • 节点上的代理(例如系统守护进程或 kubelet)可以与该节点上的所有 Pod 进行通信。
  3. Service API 允许你为由一个或多个后端 Pod 实现的服务提供一个稳定(长效)的 IP 地址或主机名, 其中组成服务的各个 Pod 可以随时变化。

    • Kubernetes 会自动管理 EndpointSlice 对象,以提供有关当前用来提供 Service 的 Pod 的信息。

    • 服务代理实现通过使用操作系统或云平台 API 来拦截或重写数据包, 监视 Service 和 EndpointSlice 对象集,并在数据平面编程将服务流量路由到其后端。

  4. Gateway API (或其前身 Ingress 使得集群外部的客户端能够访问 Service。

    • 当使用受支持的 云提供商(Cloud Provider) 时,通过 Service API 的 type: LoadBalancer 可以使用一种更简单但可配置性较低的集群 Ingress 机制。
  5. NetworkPolicy 是一个内置的 Kubernetes API,允许你控制 Pod 之间的流量或 Pod 与外部世界之间的流量。

在早期的容器系统中,不同主机上的容器之间没有自动连通, 因此通常需要显式创建容器之间的链路,或将容器端口映射到主机端口,以便其他主机上的容器能够访问。 在 Kubernetes 中并不需要如此操作;在 Kubernetes 的网络模型中, 从端口分配、命名、服务发现、负载均衡、应用配置和迁移的角度来看,Pod 可以被视作虚拟机或物理主机。

这个模型只有少部分是由 Kubernetes 自身实现的。 对于其他部分,Kubernetes 定义 API,但相应的功能由外部组件提供,其中一些是可选的:

- Pod 网络命名空间的设置由实现容器运行时接口(CRI)的系统层面软件处理。
- Pod 网络本身由 Pod 网络实现管理。 在 Linux 上,大多数容器运行时使用容器网络接口 (CNI) 与 Pod 网络实现进行交互,因此这些实现通常被称为 CNI 插件。- Kubernetes 提供了一个默认的服务代理实现,称为 kube-proxy, 但某些 Pod 网络实现使用其自己的服务代理,以便与实现的其余组件集成得更紧密。- NetworkPolicy 通常也由 Pod 网络实现提供支持。 (某些更简单的 Pod 网络实现不支持 NetworkPolicy,或者管理员可能会选择在不支持 NetworkPolicy 的情况下配置 Pod 网络。在这些情况下,API 仍然存在,但将没有效果。)- Gateway API 的实现有很多, 其中一些特定于某些云环境,还有一些更专注于“裸金属”环境,而其他一些则更加通用。

在这里插入图片描述

2、为什么需要 Service?

Pod 的 IP 不是固定的,Pod 重建时 IP 会变。

应用之间需要 稳定的访问入口。
👉 Service 提供了一个固定的访问地址(ClusterIP / DNS),并通过标签选择器将流量转发到后端 Pod。

解决使用Pod IP 访问应用的问题;

Kubernetes 中 Service 是主要用于Pod之间的通信,相对于Pod的IP它创建完成以后就是不变的资源; 将运行在一个或一组 Pod 上的网络应用程序公开为网络服务的方法。

Namespace级别的隔离。

2.1、定义service

最常用的service

apiVersion: v1
kind: Service
metadata:name: my-service
spec:selector:app: demo-nginxports:- protocol: TCPport: 80targetPort: 80name: http

2.2、Service的类型

    - ClusterIP:在集群内部使用的,默认类型- NodePort:在每个宿主机上暴露一个随机端口,30000-32767,--service-node-port-range,集群外部可访问。- LoadBalancer:使用云服务商提供的IP地址。成本太高。- ExternalName:反代到指定的域名上。

没有Selector的service。不会自动创建EndPoints。
192.168.1.100 3306 没有selector的service的名字+端口进行访问到192.168.1.100 3306。
172.16.1.100

ClusterIP+Ingress 域名访问

Service 类型作用使用场景
ClusterIP(默认)仅在集群内访问微服务之间通信
NodePort在每个节点上开放一个端口(30000-32767),转发到后端 Pod对外暴露服务(开发/测试)
LoadBalancer使用云厂商负载均衡器,对外提供统一入口云环境生产环境
ExternalName将 Service 映射到外部 DNS 名称调用外部数据库/第三方 API
Headless Service不分配 ClusterIP,直接返回 Pod IP数据库、StatefulSet 场景

2.3、Service 工作原理

kube-proxy 是核心组件,支持两种主要模式:

  • iptables 模式:通过 iptables 规则转发流量到后端 Pod。

  • ipvs 模式:基于 Linux IPVS,性能更高,适合大规模集群。

📌 流量路径:
客户端 → Service VIP(ClusterIP) → kube-proxy → Pod

2.4、Service 与 DNS

kube-dns/CoreDNS 自动为 Service 创建 DNS 记录。

访问方式:

myservice.my-namespace.svc.cluster.local

直接 myservice(同一命名空间)

3、Ingress(高级流量管理)

它是Kubernetes集群中服务的入口,可以提供负载均衡、SSL终止和基于域名的虚拟主机。Treafik、Nginx、HAProxy、Istio。

Ingress 提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源所定义的规则来控制。

  • Service 暴露的是 四层网络 (TCP/UDP)。

  • Ingress 负责 七层 HTTP/HTTPS 路由,支持:

    • 域名路由(api.example.com → serviceA)

    • URL 路由(/shop → serviceB)

    • SSL 证书管理(HTTPS)

  • 常用 Ingress Controller:

    • Nginx Ingress Controller

    • Traefik

    • HAProxy

在这里插入图片描述

Ingress 官方文档:https://kubernetes.io/docs/concepts/services-networking/ingress/

Ingress-Nginx安装文档:https://kubernetes.github.io/ingress-nginx/deploy/

Ingress-Nginx 文档:https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/

3.1、定义Ingress 资源

一个最小的 Ingress 资源示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: minimal-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:ingressClassName: nginx-examplerules:- http:paths:- path: /testpathpathType: Prefixbackend:service:name: testport:number: 80

host: 可选参数,一般都会配置我们自己的域名。
path: 一个路径对应一个serviceName和一个Port
backend: path对应的后端是谁。
foo.bar.com/foo  service1:4200

Ingress:https://kubernetes.io/docs/concepts/services-networking/ingress/

3.2、Ingress 规则

每个 HTTP 规则都包含以下信息:

  • 可选的 host。在此示例中,未指定 host,因此该规则基于所指定 IP 地址来匹配所有入站 HTTP 流量。 如果提供了 host(例如 foo.bar.com),则 rules 适用于所指定的主机。
  • 路径列表(例如 /testpath)。每个路径都有一个由 service.name 和 service.port.name 或 service.port.number 确定的关联后端。 主机和路径都必须与入站请求的内容相匹配,负载均衡器才会将流量引导到所引用的 Service,
  • backend(后端)是 Service 文档中所述的 Service 和端口名称的组合, 或者是通过 CRD 方式来实现的自定义资源后端。 对于发往 Ingress 的 HTTP(和 HTTPS)请求,如果与规则中的主机和路径匹配, 则会被发送到所列出的后端。

通常会在 Ingress 控制器中配置 defaultBackend(默认后端), 以便为无法与规约中任何路径匹配的所有请求提供服务

4、常见面试高频问答

  • Q1:Pod IP 为什么不能直接对外提供服务?
    👉 Pod IP 动态变化、生命周期不固定,外部客户端无法直接依赖。

  • Q2:Service 如何选择后端 Pod?
    👉 通过 Label Selector 机制,所有匹配的 Pod 会加入 Endpoints。

  • Q3:NodePort 的局限性是什么?
    👉 端口范围有限(30000-32767),跨节点访问需要 NodeIP,不适合大规模生产。

  • Q4:Ingress 与 LoadBalancer 有什么区别?
    👉

LoadBalancer:提供四层入口,通常由云厂商实现。

Ingress:基于七层应用层路由,更灵活,能做域名/路径转发。

  • Q5:Headless Service 的应用场景?
    👉 数据库集群(如 MySQL、Redis、ZooKeeper、Kafka),需要直接访问每个 Pod 的真实 IP。

5、总结

Service 解决 Pod 动态 IP 的问题,Ingress 解决复杂的 HTTP 路由问题,LoadBalancer 提供云环境对外统一入口。

在这里插入图片描述


“人的一生会经历很多痛苦,但回头想想,都是传奇”。


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

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

相关文章

基于SpringBoot的停车场管理系统【2026最新】

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

Nginx前后端分离反代(VUE+FastAPI)

原文链接&#xff1a;Nginx前后端分离反代&#xff08;VUEFastAPI&#xff09; < Ping通途说 0.前言 工作需求自己全栈开发了一个后台后端&#xff0c;要求前后端分离&#xff0c;即nginx静态代理前端文件&#xff0c;再代理后端接口。以前自己也遇过这种情况&#xff0c;但…

豆包1.5 Vision Lite 对比 GPT-5-min,谁更适合你?实测AI模型选型利器 | AIBase

“团队要上线一个智能客服系统&#xff0c;预算有限&#xff0c;中文场景为主&#xff0c;偶尔需要读图——该选豆包1.5还是GPT-5-min&#xff1f;” “个人开发者想接大模型API做写作助手&#xff0c;要求响应快、成本低&#xff0c;Claude Haiku、Moonshot、GPT-5-min 哪个更…

Swift与C++混编深度解决方案:手动桥接 vs SwiftyCPP框架性能终极评测

Swift与C混编深度解决方案&#xff1a;手动桥接 vs SwiftyCPP框架性能终极评测一、技术背景与行业痛点1.1 Swift与C互操作现状1.2 行业痛点数据二、解决方案架构对比2.1 手动桥接OC中间层实现细节&#xff1a;2.2 SwiftyCPP自动框架技术突破&#xff1a;三、性能深度评测3.1 测…

[Oracle数据库] Oracle 常用函数

目录 一、先搞懂这些基础约定 二、数值函数&#xff1a;处理数字的 “小帮手” 1️⃣MOD (n1, n2)&#xff1a;取余数 2️⃣ROUND (n1 [, n2])&#xff1a;四舍五入 3️⃣TRUNC (n1 [, n2])&#xff1a;截断&#xff08;不四舍五入&#xff09; 其他常用数值函数 三、字…

Pytorch模型复现笔记-STN(空间注意力Transformer网络)讲解+架构搭建(可直接copy运行)+ MNIST数据集视角调整实验

Spatial Transformer Networks 本文了讲述STN的基本架构&#xff0c;空间几何注意力模块的基本原理&#xff0c;冒烟测试以及STN在MNIST数据集用于模型自动调整图片视角的实验&#xff0c;如果大家有不懂或者发现了错误的地方&#xff0c;欢迎讨论。 中文名&#xff1a;空间Tra…

【LeetCode】16. 最接近的三数之和

文章目录16. 最接近的三数之和题目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a;解题思路算法分析问题本质分析排序双指针法详解双指针移动策略搜索过程可视化各种解法对比算法流程图边界情况处理时间复杂度分析空间复杂度分析关键优化点实际应用场景测试用例设计…

微信小程序实现蓝牙开启自动播放BGM

下面是一个完整的微信小程序实现方案&#xff0c;当蓝牙设备连接时自动播放背景音乐(BGM)。实现思路监听蓝牙设备连接状态当检测到蓝牙设备连接时&#xff0c;自动播放音乐当蓝牙断开时&#xff0c;停止音乐播放处理相关权限和用户交互完整代码实现1. 项目结构text/pages/index…

XML 序列化与操作详解笔记

一、XML 基础概念XML&#xff08;eXtensible Markup Language&#xff0c;可扩展标记语言&#xff09;是一种用于存储和传输数据的标记语言&#xff0c;由 W3C 制定&#xff0c;具有以下特点&#xff1a;可扩展性&#xff1a;允许自定义标记&#xff08;如<Student>、<…

第八十四章:实战篇:图 → 视频:基于 AnimateDiff 的视频合成链路——让你的图片“活”起来,瞬间拥有“电影感”!

AI图生视频前言&#xff1a;从“刹那永恒”到“动态大片”——AnimateDiff&#xff0c;让图片“活”起来&#xff01;第一章&#xff1a;痛点直击——静态图像到视频&#xff0c;不是“幻灯片”那么简单&#xff01;第二章&#xff1a;探秘“时间魔法”&#xff1a;AnimateDiff…

2025深大计算机考研复试经验贴(已上岸)

如果你在初试出分前看到此贴 我建议&#xff1a; 准备机试和简历&#xff0c;即使你不估分&#xff1a;因为如果要准备春招的话&#xff0c;也总要刷题和做简历的。尽早估分&#xff0c;查一下往年的复试线&#xff0c;如果有望进复试&#xff0c;可尽早开始准备。 Preface …

用Pygame开发桌面小游戏:从入门到发布

一、引言 Pygame是一个基于Python的跨平台游戏开发库,它提供了简单易用的图形、声音和输入处理功能,非常适合新手入门游戏开发。本文将以"经典游戏合集"项目为例,带你一步步了解如何使用Pygame开发、打包和发布自己的桌面小游戏。 二、开发环境搭建 安装Python:…

CSS backdrop-filter:给元素背景添加模糊与色调的高级滤镜

在现代网页设计中&#xff0c;半透明元素搭配背景模糊效果已成为流行趋势 —— 从毛玻璃导航栏、模态框遮罩&#xff0c;到卡片悬停效果&#xff0c;这种设计能让界面更具层次感和高级感。实现这一效果的核心 CSS 属性&#xff0c;正是backdrop-filter。它能对元素背后的内容&a…

检索增强生成(RAG) 缓存增强生成(CAG) 生成中检索(RICHES) 知识库增强语言模型(KBLAM)

以下是当前主流的四大知识增强技术方案对比&#xff0c;涵盖核心原理、适用场景及最新发展趋势&#xff0c;为开发者提供清晰的技术选型参考&#xff1a; &#x1f50d; 一、RAG&#xff08;检索增强生成&#xff09;​​ 核心原理​&#xff1a; 动态检索外部知识库&#xff0…

LLM(大语言模型)的工作原理 图文讲解

目录 1. 条件概率&#xff1a;上下文预测的基础 2. LLM 是如何“看着上下文写出下一个词”的&#xff1f; 补充说明&#xff08;重要&#xff09; &#x1f4cc; Step 1: 输入处理 &#x1f4cc; Step 2: 概率计算 &#x1f4cc; Step 3: 决策选择 &#x1f914; 一个有…

Python netifaces 库详解:跨平台网络接口与 IP 地址管理

一、前言 在现代网络编程中&#xff0c;获取本机的网络接口信息和 IP 配置是非常常见的需求。 例如&#xff1a; 开发一个需要选择合适网卡的 网络服务&#xff1b;在多网卡环境下实现 流量路由与控制&#xff1b;在系统诊断工具中展示 IP/MAC 地址、子网掩码、默认网关&#x…

HTML应用指南:利用POST请求获取上海黄金交易所金价数据

上海黄金交易所&#xff08;SGE&#xff09;作为中国唯一经国务院批准、专门从事黄金等贵金属交易的国家级市场平台&#xff0c;自成立以来始终秉持“公开、公平、公正”的原则&#xff0c;致力于构建规范、高效、透明的贵金属交易市场体系。交易所通过完善的交易机制、严格的风…

C++常见面试题-1.C++基础

一、C 基础 1.1 语言特性与区别C 与 C 的主要区别是什么&#xff1f;C 为何被称为 “带类的 C”&#xff1f; 主要区别&#xff1a;C 引入了面向对象编程&#xff08;OOP&#xff09;特性&#xff08;类、继承、多态等&#xff09;&#xff0c;而 C 是过程式编程语言&#xff1…

Tomcat里catalina.sh详解

在 Tomcat 中&#xff0c;catalina.sh&#xff08;Linux/macOS&#xff09;或 catalina.bat&#xff08;Windows&#xff09;是 核心的启动和关闭脚本&#xff0c;用于控制 Tomcat 服务器的运行。它是 Tomcat 的“主控脚本”&#xff0c;负责设置环境变量、启动/关闭 JVM 进程&…

STM32之MCU和GPIO

一、单片机MCU 1.1 单片机和嵌入式 嵌入式系统 以计算机为核心&#xff0c;tips&#xff1a;计算机【处理单元&#xff0c;内存 硬盘】 可以控制的外部设备&#xff0c;传感器&#xff0c;电机&#xff0c;继电器 嵌入式开发 数据源--> 处理器(CPU MCU MPU) --> 执行器 …