通过service访问Pod

news2024/9/25 5:19:13
  1. 假设Pod中的容器可能因为各种原因发生故障而死掉,Deployment等controller会通过动态创建和销毁Pod来保证应用整体的健壮性,换句话说,Pod是脆弱的,但应用是健壮的

  2. 每个Pod都有自己的Ip,当controller用新的Pod替代发生故障的Pod时,新的Pod会分配到新的Ip地址,,所以kubernetes利用service来解决这样的问题:如果一组Pod对外提供服务,比如HTTP,他们的IP很可能会发生变化,那么客户端如何找到并访问这个服务

  3. 创建Service

    1. kubernetes从逻辑上代表了一组pod,具体是哪些Pod则是由label来挑选的,Service有自己的IP,而且这个IP是不变的,客户端只需要访问Service的IP,kubernetes则负责建立和维护Service与Pod的映射关系,无论后端Pod如何变化,对客户端不会有任何影响,因为Service没有变

    2. 创建一个Deployment在这里插入图片描述

    3. 启动了三个Pod,运行httpd镜像,label是run:httpd ,service将会用这个label来挑选Pod在这里插入图片描述

    4. Pod分配了各自的IP,这些IP只能被kubernetes cluster中的容器和节点访问在这里插入图片描述

    5. 创建service,配置文件为:在这里插入图片描述

      1. v1是service的apiVersion
      2. 指明当前资源的类型为Service
      3. Service的名字为httpd-svc
      4. selector指明挑选哪些label为run: https的pod作为Service的后端
      5. 将service的8080端口映射到Pod的80端口,使用TCP协议
      6. 执行kubectl apply 创建Service httpd-svc在这里插入图片描述
    6. httpd-svc分配到一个cluster-ip 10.99.299.179,可以通过该IP访问后端的httpd pod在这里插入图片描述

    7. 根据前面的端口映射,这里要使用8080端口,

    8. 除了自己创建的httpd-svc,还有一个Service kubernetes,Cluster内部通过这个Service访问Kubernetes API Service

    9. 通过kubectl describe 可以查看httpd-svc与pod的对应关系在这里插入图片描述

  4. cluster IP底层实现

    1. Cluster IP是一个虚拟IP,是由Kubernetes节点上的iptables规则管理的,可以通过iptables-save命令打印出当前节点的iptables规则,在这里插入图片描述

    2. 这两条规则的含义:

      1. 如果Cluster内的Pod(原地址来自10.244.0.0/16)要访问httpd-svc,则允许

      2. 其他原地址访问httpd-svc,跳转到规则KUBE-SVC-RL3JAE4GN7VOGDGP,在这里插入图片描述

        1. 1/3的概率跳转到规则KUBE-SEP-C5KB52P4BBJQ35PH

        2. 1/3的概率(剩下的2/3的一半)跳转到规则KUBE-SEP-HGVKQQZZCF7RV41T

        3. 1/3的概率跳转到规则KUBE-SEP-XE25WGVXLHEIRV05在这里插入图片描述

        4. 将请求分别转发到后端的三个pod,iptables将访问Service的流量转发到后端Pod,而且使用类似轮询的负载均衡策略,

        5. Cluster的每一个节点都配置了相同的iptables规则,这样就确保了整个Cluster都能够通过Service的Cluster IP访问Service

  5. DNS访问Service

    1. kube-dns是一个DNS服务器,每当有新的Service被创建,kube-dns会添加该Service的DNS记录,Cluster中的Pod可以通过<SERVICE_NAME>.<NAMESPACE_NAME>访问Service,比如可以用httpd-svc访问Service httpd-svc在这里插入图片描述

    2. 在一个临时的busybox pod中验证了DNS的有效性,由于这个Pod与httpd-svc同属于default namespace,因此可以省略default直接用httpd-svc访问Service在这里插入图片描述

    3. 用nslookup查看httpd-svc的DNS信息在这里插入图片描述

    4. DNS服务器是kube-dns.kube-system.svc.cluster.local,这实际上就是kube-dns组件,他本身是部署在kube-system namespace中的一个service。http-svc.default.svc.cluster.local是httpd-svc的完整域名,如果要访问其他namespace中的Service,就必须带上namespace,kubectl get namespace查看已有的namespace在这里插入图片描述

    5. 在kube-public中部署Service httpd2-svc在这里插入图片描述

    6. 通过namespace:kube-public指定资源所属的namespace,多个资源可以在一个YAML文件中定义,用 – 分割,执行kubectl apply创建资源在这里插入图片描述

    7. 查看kube-public的Service在这里插入图片描述

    8. 在busybox pod中访问httpd-svc在这里插入图片描述

    9. 因为不属于同一个namespace,所以必须使用httpd2-svc.kube-public才能访问到

  6. 外网如何访问Service

    1. 除了cluster内部可以访问Service,暴露给cluster外部的service,kubernetes提供了多种类型的Service,默认是Cluster IP

    2. clusterIP:service通过cluster内部的IP对外提供服务,只有cluster内部的节点和pod可以访问,这时默认的service类型,前面提到的service都是cluster ip

    3. NodePort:service通过cluster节点的静态端口对外提供服务,cluster外部可以通过:访问Service

    4. LoadBalancer:service利用cloud provider特有的load balancer对外提供服务,cloud provider负责将load balancer的流量导向service,目前支持的cloud provider有GCP,AWS,Azur等

    5. 在这里插入图片描述

    6. 添加type: NodePort,重新创建httpd-svc在这里插入图片描述

    7. kubernetes依然会为httpd-svc分配一个clusterIP,不同的是:

      1. EXTERNAL-IP为nodes,表示可以通过cluster每个节点自身的IP访问Service

      2. PORT(S)为8080:32312,8080是clusterIP监听的端口,32312则是节点上监听的端口,Kuberetes会从30000-32767中分配一个可用的端口,每个节点都会监听此端口并将请求转发给Service在这里插入图片描述

      3. 测试NodePort是否正常工作在这里插入图片描述

      4. 通过三个节点IP+32312端口都能够访问httpd-svc

    8. Kubernetes如何将:映射到Pod的

      1. 与cluster ip一样,也是借助了iptables,与clusterIp相比,每个节点的iptables中都增加了下面两条规则在这里插入图片描述

      2. 规则的含义是:访问当前节点的32312端口的请求会应用规则KUBE-SVC-RL3JAE4GN7VOGDGP在这里插入图片描述

      3. 作用就是负载均衡到每一个pod,NodePort默认的是随机选择,不过我们可以用nodePort指定某个特定端口在这里插入图片描述

      4. 现在配置文件中就有三个port了:

        1. nodePort是节点上监听的端口
        2. port是ClusterIP上监听的端口
        3. targetPort是Pod监听的端口
      5. 最终Node和Cluster在各自端口上接收到的请求都会通过iptables转发到Pod的targetPort在这里插入图片描述

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

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

相关文章

SDK(2 note)

复习上一次内容&#xff1a; 把前一次笔记中的代码&#xff0c;简写一下 #include <windows.h> #include<tchar.h> #include <stdio.h> #include <strsafe.h> VOID showerrormassage() {LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFF…

TS-AI:一种用于多模态个体化脑区划分的深度学习管道,并结合任务对比合成|文献速递-Transformer架构在医学影像分析中的应用

Title 题目 TS-AI: A deep learning pipeline for multimodal subject-specific parcellation with task contrasts synthesis TS-AI&#xff1a;一种用于多模态个体化脑区划分的深度学习管道&#xff0c;并结合任务对比合成 01 文献速递介绍 人类大脑在结构和功能组织上表…

nfs版本问题导致挂载失败

一、系统环境 环境版本操作系统Linux Mint 22 Wilma内核版本6.8.0-44-genericgcc 版本arm-none-linux-gnueabihf-gcc (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10)) 9.2.1 20191025uboot 版本2020.01开发板Linux版本5.4.31 二、问题描述 内核通过…

拒绝信息泄露!VMD滚动分解 + Informer-BiLSTM并行预测模型

前言 在时间序列预测任务中&#xff0c;像 EMD&#xff08;经验模态分解&#xff09;、CEEMDAN&#xff08;完全集合经验模态分解&#xff09;、VMD&#xff08;变分模态分解&#xff09; 等分解算法的使用有可能引入信息泄露&#xff0c;具体情况取决于这些方法的应用方式。信…

通过WebTopo在ARMxy边缘计算网关上实现系统集成

随着工业互联网技术的发展&#xff0c;边缘计算成为了连接物理世界与数字世界的桥梁&#xff0c;其重要性日益凸显。边缘计算网关作为数据采集、处理与传输的核心设备&#xff0c;在智能制造、智慧城市等领域发挥着关键作用。 1. BL340系列概述 BL340系列是基于全志科技T507-…

yolov8/9关键点检测模型检测俯卧撑动作并计数【源码免费+数据集+python环境+GUI系统】

yolov89模型检测俯卧撑动作并计数【源码免费数据集python环境GUI系统】 yolov8/9关键点检测模型检测俯卧撑动作并计数【源码免费数据集python环境GUI系统】 YOLO算法原理 YOLO&#xff08;You Only Look Once&#xff09;关键点检测的算法原理主要基于YOLO目标检测算法进行改进…

R包:VennDiagram韦恩图

加载R包 library(VennDiagram)数据 # Prepare character vectors v1 <- c("DKK1", "NPC1", "NAPG", "ERG", "VHL", "BTD", "MALL", "HAUS1") v2 <- c("SMAD4", "DKK1…

VMware虚拟网络的连接模式探究与实践

VMware安装完成虚拟机后&#xff0c;大多要进行网络配置&#xff0c;实现网络的互联互联&#xff0c;初学者往往感觉与一台实体主机的网络配置不同&#xff0c;局域网中一台实体主机一个物理网卡&#xff0c;配置一个IP地址&#xff1b;或直接通过WAN上网&#xff0c;比较直观&…

基于python的django微博内容网络分析系统,实现文本划分词结构

本项目旨在开发一个基于Python的Django框架的微博内容网络分析系统&#xff0c;聚焦于微博文本的分词处理、名词提取和主成分分析。该系统通过数据收集与预处理、分词及结构化文本分析&#xff0c;为舆情监测、话题分析和用户行为研究提供了一体化的解决方案。 主要功能包括&a…

数据分析学习之学习路线

前言 我们之前通过cda认证了解到数据分析行业&#xff0c;但是获取到证书&#xff0c;并不代表着&#xff0c;我们已经拥有的数据分析的能力&#xff0c;所以通过系统的学习数据分析需要掌握的能力&#xff0c;并学习大佬们的分析经验、分析思路&#xff0c;才是成为数据分析师…

TDengine 学习与使用经验分享:业务落地实践与架构升级探索

前言 随着物联网、工业互联网等行业的快速发展&#xff0c;时间序列数据的管理和处理需求急剧增加。传统的关系型数据库在处理大规模、高频次的时序数据时性能存在瓶颈&#xff0c;而专门针对时序数据设计的数据库系统则显示出其独特优势。TDengine 是其中的佼佼者&#xff0c;…

给pycharm项目设置conda环境新

创建虚拟环境 conda create -n llama python3.11 激活虚拟环境 conda activate llama 设置Pycharm环境

【初阶数据结构】排序——插入排序

目录 前言直接插入排序希尔排序 前言 排序&#xff1a;所谓排序就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。排序算法&#xff0c;就是如何使得记录按照要求排列的方法。   例如&#xff1a;买东西时会根据销量或价…

基于PHP+MySQL组合开发地方门户分类信息网站源码系统 带完整的安装代码包以及搭建部署教程

系统概述 随着互联网技术的飞速发展&#xff0c;地方门户分类信息网站逐渐成为城市生活不可或缺的一部分。它们涵盖了房产、招聘、二手交易、生活服务等多个领域&#xff0c;为当地居民提供了全方位的信息服务。为了满足这一市场需求&#xff0c;我们开发了这款基于PHPMySQL的…

23中设计模式,以及三种常见的设计模式demo

常见的23种设计模式 Java设计模式是软件工程中常见的解决方案&#xff0c;用于解决在软件设计中反复出现的问题。设计模式可以分为三大类&#xff1a;创建型模式、结构型模式和行为型模式。这里&#xff0c;我将简单介绍三种常见的设计模式&#xff0c;并给出相应的Java代码示例…

【车联网安全】车端网络攻击及检测的框架/模型

参考标准&#xff1a; 《汽车数据安全管理若干规定&#xff08;试行&#xff09;》ISO/SAE 21434《道路车辆 网络安全工程》威胁分析和风险评估&#xff08;TARA&#xff09;ISO/DIS 24089R155法规的国标转换&#xff1a;《汽车整车信息安全技术要求》&#xff08;UN R155&…

keil软件编写第一个c语言单片机程序并下载到单片机点亮一个发光二极管

Project-->new project-->选择文件夹-->输入工程名如&#xff1a;lession_1-->选择单片机芯片类型&#xff08;Atml的89c52&#xff09;-->newfile -->保存输入C语言文件名lession_1.c-->在左侧source Group 1右键--->选择add files to group “Source…

seaCMS v12.9代码审计学习(上半)

文章目录 CMS介绍环境搭建代码总览漏洞复现/js/player/dmplayer/player/index.php 反射性xss(详见https://github.com/HuaQiPro/seacms/issues/28)admin_ping.php 代码执行漏洞太多了&#xff0c;整理完了下半部分一次性写完 CMS介绍 海洋cms是一款经典的开源影视建站系统&…

使用celery+Redis+flask-mail发送邮箱验证码

Celery是一个分布式任务队列&#xff0c;它可以让你异步处理任务&#xff0c;例如发送邮件、图片处理、数据分析等。 在项目中和celery 有关系的文件如下&#xff1a; task.py : 创建celery.py 对象&#xff0c;并且添加任务&#xff0c;和app绑定&#xff0c;注意&#xff1…

C# CS1612 尝试修改集合中值类型的情况

在C#中&#xff0c;发现尝试直接修改集合中值类型的中的值发生报错 提示“它不是变量”&#xff0c;通过官方索引的链接可知&#xff0c;尝试修改某一值类型&#xff0c;但是该值类型作为中间表达式的结果生成但不存储在变量中&#xff0c;会发生报错。 正确做法是将其赋值给局…