k8s独立组件ingress,七层转发

news2024/9/23 11:25:18

一、K8S的Service

1、Service的作用

Service的作用体现在两个方面:

1、集群内部:不断跟踪pod的变化,更新endpoints中的pod对象,基于pod的IP地址不断变化的一种服务发现机制,也可以实现负载均衡,四层代理,service暴露的端口只能用于内网访问,局域网。

2、集群外部:类似负载均衡器,可以把流量IP+端口,不涉及转发url(http、https),把请求转发到pod中

2、Service类型:

clusterip:默认模式,对外

NodePort:容器端口—Service端口—NodePort映射。设定了NodePort之后每个节点都会有一个端口被打开30000-32767   对内访问,内网

LoadBalancer:云平台上的Service服务。由云平台提供负载均衡的IP地址

ExternalName:域名映射

ingress:基于域名进行映射,转发的是url请求(http协议或者https协议)转发到Service,再由Service转发到每一个pod

ingress只需要一个或者是少量的公网IP或者LB,可以把多个http请求暴露到外网

他是七层反向代理

可以将ingress理解为,Service的Service。是一组基于域名和url路径把请求转发到一个或者多个请求转发到Service的规则

ingress先七层转发转发都Service,Service再四层转发转发到pod

二、ingress:是K8s独立的组件

1、ingress的组成:

ingress是一个api对象,通过yaml文件来进行配置。ingress作用就是定义请求如何转发到Service的规则

ingress通过http和https暴露集群内部的Service,给Service提供一个外部的url、负载均衡、ssl/tls(https)的能力,实现一个基于域名的负载均衡

ingress-controller:ingress由这个组件来具体的实现反向代理和负载均衡的程序,以及对ingress定义的规则进行解析,根据ingress的配置的规则进行请求的转发。

但是这个ingress-controller不是K8S自带的组件功能,ingress-controller是一种插件的统称(一系列工具)

比如ingress-nginx(最常用的)、traefik(可视化界面,但是并发量差)都是ingress-controller,插件

ingress-controller是pod的方式运行在节点上

ingress根据service的名称选择service,service根据标签来匹配pod

三、ingress-nginx-controller暴露服务端的三种方式

1、Deployment+LoadBalancer模式:

ingress部署在公有云。ingress配置文件中会有type。type:LoadBalancer。公有云平台会为这个LoadBalancer的Service自动创建一个负载均衡器。绑定公网地址

通过域名指向公网地址,实现集群对外暴露

2、Daemonset+hostnetwork+nodeSelector模式:域名  

Daemonset:在每个节点都会创建一个pod

hostnetwork:共享节点主机的网络命名空间。容器内直接使用节点主机的IP+端口(80和443)。pod上的容器可以直接访问主机上的网络资源(直接实现流量的转发和访问)

nodeSelector:根据标签选择部署的节点。选择nginx-ingress-controller部署的节点

缺点:和宿主机共用端口,直接利用节点主机的网络和端口资源,一个node只能部署一个ingress-controller的pod

优点:适用大并发场景的生产环境。性能是最好的

Service和endpoints来发现节点

最终转发是由ingress-controller来转发请求(http)和负载均衡

用DaemonSet结合nodeselector来部署ingress-controller到特定的node上,然后使用HostNetwork直接把该pod与宿主机node的网络打通,直接使用宿主机的80/433端口就能访问服务。这时,ingress-controller所在的node机器就很类似传统架构的边缘节点,比如机房入口的nginx服务器。该方式整个请求链路最简单,性能相对NodePort模式更好。

缺点是由于直接利用宿主机节点的网络和端口,一个node只能部署一个ingress-controller pod。 比较适合大并发的生产环境使用。 

3、deployment+NodePort:端口  

同样用deployment模式部署ingress-controller,并创建对应的service,但是service的type为NodePort。这样,ingress就会暴露在集群节点ip的特定端口上。由于nodeport暴露的端口是随机端口,一般会在前面再搭建一套负载均衡器来转发请求。该方式一般用于宿主机是相对固定的环境ip地址不变的场景

NodePort方式暴露ingress虽然简单方便,但是NodePort多了一层NAT,在请求量级很大时可能对性能会有一定影响

4.DaemonSet+HostNetwork具体的部署过程  

三个节点部署镜像

三台同步导入到当地仓库

  三台同步下载yaml文件

 主节点修改配置文件

 注释以下两行

8181端口时nginx-controller的默认配置,当ingress没有资源可以匹配时会自动转发

 编辑ingress

 

 

 

 客户端:

三个节点镜像域名及IP映射 

 前缀匹配

选择标签部署:vim mandatory.yaml

 选择node01打标签

正常访问 

5.deployment+NodePort部署:先删除部署ingrees-nginx的mandatory

 vim mandatory.yaml

下载nodeport的yaml文件

 ​​

6.ingress的deployment+NodePort实现https代理访问:

首先创建ssl的证书

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=CHINA/O=NJ"
 
req:生成证书文件的
x509:生成x.509自签名的证书
-sha256:表示使用sha-256散列算法
-nodes:表示生成到的秘钥不加密
-day 365:证书有效期365天
-newkey rsa:2048:RSA的密钥对,长度2048为位
-keyout tls.key -out tls.crt:密钥文件key,证书文件crt
-subj "/CN=nginxsvc/O=nginxsvc":主题,CN: common name O:

创建secret类型为tls

四、ingress的权限控制:访问页面的时候,输入设置好的密码才能访问页面,语法basicAuth

首先下载阿帕奇

 创建健全文件

创建secret名称为basic-auth

 编辑配置文件:首先设置认证的类型,再设置认证的secret的名称

 

访问时需要输入账号zhailiming及密码123

 如何做页面跳转 ​​​​​​​

 访问www.zlm.com就会跳转到www.test1.com

五、ingress的另外一个组件:

1.ingress-traefik 专门为了部署k8s微服务开发的http反向代理和负载均衡工具;自动发现匹配的后端pod变化,同时有可视化的页面;自动感知变化,实现服务自动发现。方法还是:deployment+NodePort和Daemonset+hostnetwork+nodeSelector

2.ingress-nginx和ingress-traefik区别:

ingress-nginx:使用nginx作为前端的负载均衡器,通过ingress-controller和k8s的api交互的方式来实现后端服务器的发现以及podIP地址的变化,动态的实现nginx的配置及修改

ingress-traefik:本身就能够和k8s的api交互,感知后端service以及pod的变化;traefik更简单、更加方便;由go语言写的和k8s的兼容性更好,但是并发能力只有ingres-nginx的6成

六、实现ingress-traefik的deployment+NodePort方法

 首先下载四个文件deployment.yaml、traefik-rbac.yaml、traefik-ds.yaml、ui.yaml

wget  https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-deployment.yaml
wget  https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-rbac.yaml
wget  https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/traefik-ds.yaml
wget  https://gitee.com/mirrors/traefik/raw/v1.7/examples/k8s/ui.yaml

 

 启动rbac健全文件

启动deploymount及ui(如果实现Daemonset+hostnetwork则启动ds和ui即可)

 实现deployment+NodePort 方法

 ​​​​​

 

 

七、总结

1.ingress:核心是对外提供访问

2.ingress---根据service的名称选择service----service把请求根据匹配的标签转发到pod

3.ingress支持http及https

4.有两个重要的组件:

nginx-ingress-controller------主流

traefik-ingress-controller------目前再推广

5.最常用的是deployment+NodePort

6.对外访问用:Daemonset+hostnetwork

7.nginx-ingress-controller三种工作方式:

deployment+LoadBalancer,需要云平台提供一个负载均衡的公网地址,公有云上做

Daemonset+hostnetwork+nodeSelector,指定节点部署controller,缺点就是和宿主机共享网络,只能是一个controller的pod,hostnetwork这个配置会和宿主机共享网络资源,适用于大集群

deployment+NodePort,最常见,最常用,也是最简单的方式。他是集中一个NodePort端口,所有的ingress的请求都会转发到NodePort,然后由Service把流量转发到pod,一个ingress的NodePort可以实现访问多个虚拟主机(域名),和nginx是一样的,使用于内部访问,性能较低

8.ingress由这个组件来具体的实现反向代理和负载均衡 

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

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

相关文章

vue element时间选择不能超过今天 时间选中长度不能超过7天

背景: 使用elenmet plus 组件实现时间选择;且日期时间选择不能超过今天;连续选中时间的长度范围不能超过7天 效果展示: 实现思路: 一、使用element组件自带的属性和方法; :disabled-date"disabledDate…

misc音频隐写

一、MP3隐写 (1)题解:下载附件之后是一个mp3的音频文件;并且题目提示keysyclovergeek;所以直接使用MP3stego对音频文件进行解密;mp3stego工具是音频数据分析与隐写工具 (2)mp3stego工具的使用:…

QT 绘制简易时钟

原文件 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->startTimer(1000); }Widget::~Widget() {delete ui; }//时钟底座 void Widget::paintEvent(Q…

景联文科技:专业扫地机器人数据采集标注服务

景联文科技作为一家专业AI数据采集标注公司,提供高质量数据支持,致力于帮助扫地机器人制造商和研发机构提升产品的智能水平和用户体验。 扫地机器人需要通过大量的环境数据来训练其导航和清洁算法。高质量标注数据是确保机器人在各种环境下高效工作的关键…

二百六十三、Java——IDEA项目打成jar包,然后在Linux中运行

一、目的 在用Java对原Kafka的JSON字段解析成一条条数据,然后写入另一个Kafka中,代码写完后打成jar包,放在Linux中,直接用海豚调度运行 二、Java利用fastjson解析复杂嵌套json字符串 这一块主要是参考了这个文档,然…

vite+vue3快速构建项目+router、vuex、scss安装

安装 Vite npm install -g create-vite-app创建vue3项目 npm init vitelatestnpm i安装依赖 安装veux、router npm install vue-router vuex新建router/index.js(自己创建home、login对应页面文件) import { createRouter, createWebHistory } from…

针对SVM算法初步研究

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝心态决定高度,细节决定成败…

Linux系统:mkdir命令

1、命令详解: mkdir命令是用来创建目录的,是make directory的缩写。 2、语法: mkdir [选项] 目录名 3、官方参数: 选项:-m, --modeMODE 设置新创建目录或文件的权限模式-p, --parents 创建多级目…

SEO之页面优化(一-页面标题)

初创企业搭建网站的朋友看1号文章;想学习云计算,怎么入门看2号文章谢谢支持: 1、我给不会敲代码又想搭建网站的人建议 2、“新手上云”能够为你开启探索云世界的第一步 博客:阿幸SEO~探索搜索排名之道 现在讨论页面本身可以优化…

基于zabbix实现监控Jenkins过程---超详细

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

【Lua学习】Lua最最基础的

Lua是什么? Lua是一种强大、高效、轻量级、可嵌入的脚本语言。它支持过程式编程、面向对象编程、函数式编程、数据驱动编程和数据描述。 Lua将简单的过程式语法与基于关联数组和可扩展语义的强大数据描述构造相结合。Lua是动态类型的,通过基于寄存器的虚…

C++ IO流全解析:标准库中的数据处理与文件读写艺术

🌈 个人主页:Zfox_ 🔥 系列专栏:C从入门到精通 目录 一: 🔥 C语言的输入与输出 二: 🔥 流是什么 三: 🔥 CIO流🚀 3.1 C标准IO流🚀 ist…

<<编码>> 第 10 章 逻辑与开关(Logic and Switches) 示例电路

串联电路 info::操作说明 鼠标单击开关切换开合状态 需要两个开关同时闭合才能接通电路 primary::在线交互操作链接 https://cc.xiaogd.net/?startCircuitLinkhttps://book.xiaogd.net/code-hlchs-examples/assets/circuit/code-hlchs-ch10-01-series-circuit.txt 并联电路 in…

windows下 MySQL8.4.2 LTS 解压版的安装使用

目录 一、下载二、解压三、创建 my.ini 文件四、安装 一、下载 下载地址:https://dev.mysql.com/downloads/mysql/ 二、解压 将下载包解压到 D 盘: 三、创建 my.ini 文件 D:\mysql-8.4.2-winx64 目录下创建 my.ini 文件: [mysql] # …

前端Vue框架实现html页面输出pdf(html2canvas,jspdf)

代码demo&#xff1a; <template><el-dialog class"storageExportDialog" :fullscreen"true" title"" :visible.sync"visible" v-if"visible" width"600px"><div id"exportContainer" …

第二期: 第一节 环境的搭建

1 找一个虚拟机。 下载工具链&#xff0c; 源码。 可以看到这个压缩包里&#xff0c;有 uboot kernel 工具链 &#xff0c;都有了。 将工具链 拷贝到 /usr/local/arm 目录下。 更改 .bashrc 2 先编译一遍&#xff0c;确定环境没问题。 压缩包里 有一个 uboot , kernle 一起…

unity3d入门教程二

unity3d入门教程二 5.1游戏对象5.2对象的显示顺序5.3对象的轴心5.4对象的父子关系6.1图片素材的准备6.2图片的切割6.3图片与渲染器7.1组件7.2transform组件 5.1游戏对象 游戏制作是在编辑器中进行的 游戏脚本是进行控制对象移动的 5.2对象的显示顺序 方法1&#xff1a;调整 Or…

【重学 MySQL】二十五、等值连接vs非等值连接、自连接vs非自连接

【重学 MySQL】二十五、等值连接vs非等值连接、自连接vs非自连接 等值连接&#xff08;Equijoin&#xff09; vs 非等值连接&#xff08;Non-equijoin&#xff09;等值连接&#xff08;Equijoin&#xff09;非等值连接&#xff08;Non-equijoin&#xff09; 自连接&#xff08;…

常见的ROM(只读存储器)及其区别(超详细)

目录 1. 掩模 ROM (Mask ROM) 2. 可编程 ROM (Programmable ROM, PROM) 3. 可擦写可编程 ROM (Erasable Programmable ROM, EPROM) 4. 电可擦写可编程 ROM (Electrically Erasable Programmable ROM, EEPROM) 5. 闪存 (Flash Memory) 6. NVRAM (Non-Volatile RAM) 各类 ROM 的主…

CTF—杂项题目

1.ctfshow-Misc入门-misc17 1 用010editer打开图片后没有直接搜到ctf&#xff1b; 2 用binwalk分析文件发现有一个bzip2的隐藏文件并将其分离&#xff1b; 3 得到一个压缩文件D86.bz2&#xff1b; 4 但使用解压命令进行解压时&#xff0c;显示文件受损&#xff1b; 5 参考别人…