当前位置: 首页 > news >正文

k8s之对外服务ingress

一、service

1、service作用

①集群内部:不断跟踪pod的变化,不断更新endpoint中的pod对象,基于pod的IP地址不断变化的一种服务发现机制(endpoint存储最终对外提供服务的IP地址和端口)

②集群外部:类似负载均衡器,不涉及转发url(不涉及http和https),把流量(IP地址+端口)转发到pod中

2service类型

(1)nodeport:容器端口和service端口做映射,设定nodeport后,每个节点都会有一个端口被打开(30000-32767),通过IP+端口实现负载均衡

(2)loadbalance:云平台上的service服务,由云平台提供负载均衡的IP地址

(3)extrenalname:基于域名映射

ingress基于域名进行映射,将url转发到service,再由service把请求转发到每一个pod

二、ingress

1、定义

ingress只要一个或少量的公网IP或者loadbalance,可以把多个http请求暴露到外网。ingress是七层反向代理,可以理解为service的service,是一组基于域名和URL路径把一个或多个请求转发到service的规则

七层代理ingress——四层代理service——pod

客户端发出请求,先由ingress七层代理转发到service,再由service四层代理转发到pod【面试】

2、ingress组成

(1)内部结构:ingress是一个api对象,通过yaml文件来进行配置。ingress的作用是定义请求如何转发到service的规则,相当于一个配置模板,ingress通过http和https暴露集群内部的service,给service提供一个外部的url、负载均衡、ssl/tls(https)功能,实现一个基于域名的负载均衡

(2)ingress-controller:由这个组件来具体实现反向代理和负载均衡,以及对ingress定义的规则进行解析,根据ingress配置来进行请求的转发。ingress-controller不是k8s自带的组件,只是一个统称,凡是能实现上述功能的都称为ingress-controller

1)实现ingress-controller功能的开源工具

①nginx ingress contoller

②traefik

2)ingress-controller资源定义项

①定义外部流量的路由规则

②定义服务的暴露方式、主机名、访问路径和其他选项

③负载均衡(由ingress-contrller实现)

3、下载nginx ingress contoller

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml

nginx ingress contoller以pod方式运行在集群中

4、ingress暴露服务的方式

(1)deployment+LoadBalancer模式:把ingress部署在公有云,在ingress配置文件里有一个type,type:LoadBalancer。公有云平台会为loadbalancer的service自动创建一个负载均衡器,且会绑定一个公网地址,通过域名指向这个公网地址可以实现集群对外暴露

(2)DaemonSet+hostnetwork+nodeSelector模式:七层代理。DaemonSet每个节点都会创建一个pod,hostnetwork表示pod共享节点主机的网络命名空间,容器内直接使用节点主机的IP地址+端口,pod中的容器可以直接访问主机上的网络资源;nodeSelector根据标签选择nginx ingress contoller部署的节点

缺点:直接利用节点主机的网络和端口,一个node只能部署一个ingress controller pod,比较是个大并发的生产环境,性能最好

(3)deployment+NodePort模式:七层+四层代理

ingress标签匹配ingress-nodeport标签,ingress-nodeport匹配service标签,service匹配pod标签

5、traefik ingress controller(有可视化界面)

(1)定义:traefik是一个为了让部署微服务更加快捷而诞生的http反向代理、负载均衡(工作在应用层,是七层代理)。traefik可以实时与k8s的API交互,自动感知后端service以及pod的变化,自动更新配置和重载

(2)部署方式

①daemonset

 优点:每个节点都会部署一个trafik,可以自动发现、更新容器的配置,不需要手动重载

 缺点:大型集群中daemonset可能会运行多个traefik的实例,尤其是在节点上不需要大量容器运行的情况下,资源利用率低;daemonset一般部署在对外集群,对外的业务会经常变更,daemonset可以自动发现服务配置变更;也没有办法扩缩容

②deployment

 优点:集中控制,可以使用少量的实例来运行处理整个集群的流量,更容器升级和维护

 缺点:deployment的负载均衡不会均分到每个节点;且无法感知容器内部配置的变化,需手动更新,一般部署在对内集群,对内的业务相对稳定,更新和变化比较少,适用deployment方式

设置标签:

对内服务:traffic-type:interal

对外服务:traffic-type:exteral

(3)nginx-ingress和traefik-ingress的区别

①相同点:都是七层代理,都可以动态的更新配置、自动发现服务

②不同点

 traefik-ingress自动更新的重载更快,更方便;nginx-ingress相对较慢

 traefik-ingress的并发能力只有nginx-ingress的60%

ingress之DaemonSet+hostnetwork+nodeSelector模式暴露服务实验

1、下载nginx ingress contoller控制器

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml

nginx ingress contoller以pod方式运行在集群中

2、设置节点标签3、每个节点上传控制器镜像并解压

4、在controller控制器创建的pod的节点上查看端口

netstat -antp|grep nginx

8181端口

nginx-controller默认配置的一个bachend,反向代理的端口,所有请求中,只要是不符合ingress配置的请求会转发到8181,相当于一个error页面

5、、创建pvc、pod、service、ingress

kubectl apply -f service-nginx.yaml

6、域名映射

7、测试访问

8、测试删除一个pod查看endpoind是否发生变化

结论:endpointIP地址变化

ingress之deployment+NodePort模式暴露服务实验

1、下载nginx ingress contoller控制器

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml

nginx ingress contoller以pod方式运行在集群中

2、下载service-nodeport控制器

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml

nodeport会在每个节点上创建一个端口

3、创建pv、pod、service、ingress4、域名映射

5、访问测试

基于deployment+NodePort模式的一个ingress可以访问多个主机实验

1、下载nginx ingress contoller控制器

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml

nginx ingress contoller以pod方式运行在集群中

2、下载service-nodeport控制器

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml

3、创建多个pod、service

pod1、service1

pod2、service2

4、创建多个ingress

5、主机映射

基于DaemonSet+hostnetwork+nodeSelector模式的一个ingress可以访问多个主机实验

1、下载nginx ingress contoller控制器

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml

nginx ingress contoller以pod方式运行在集群中

2、设置节点标签

3、每个节点上传控制器镜像并解压

4、在controller控制器创建的pod的节点上查看端口

netstat -antp|grep nginx

8181端口

nginx-controller默认配置的一个bachend,反向代理的端口,所有请求中,只要是不符合ingress配置的请求会转发到8181,相当于一个error页面

5、创建多个pod、service

pod1、service1

pod2、service2

6、创建多个ingress

7、主机映射

8、测试

ingress通过域名实现https代理访问实验

第一步:创建证书和密钥

第二步:secrets保存密钥信息,部署pod时将secret信息挂载到pod

1、生成证书和密钥文件

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/0=nginxsvc"

req

请求生成证书文件

x509

自动生成x.509的自签名的证书

-sha256

一种散列算法,用于加密密钥

-nodes

生成的密钥不加密

-days 365

证书有效期365天

-newkey rsa:2048

rsa的密钥对,长度2048位

-keyout tls.key -out tls.crt

密钥文件key,证书文件crt

-subj "/CN=nginxsvc/0=nginxsvc"

subj主题,CN(common name)名称,O(organization)组织

2、创建secret保存证书和密钥(将证书和密钥都加密)

kubectl create secret tls tls-secret --key tls.key --cert tls.crt

3、创建pod、service(创建ingress时导入secret)

注:spec下出现tls字段代表使用的是https协议进行流量转发。表明对于域名www.123ccc.com来说,使用了https协议

4、主机映射

5、测试访问

curl -k https://www.123ccc.com:30048

6、测试轮询

nginx的账号认证实验

第一步:借助http的加密工具,生成认证文件,只能叫auth

第二步:创建ingress

①声明认证类型

②导入认证的密钥文件,以secret的方式存储在集群中

1、下载httpd

yum -y install httpd

2、创建用户、密码

3、创建secret保存用户信息(将用户信息加密)

4、生成新的ingress

使用上一个实验的service。虽然这个信息加密了,但可以把流量转发到上一个实验service对应的pod

实际上生成的是auth.kgc.com

5、域名映射

nginx的重写实验

nginx的重定向(用ingress代理实现)

在ingress文件中声明的路径都会跳转到指定页面

1、创建ingress

重点:容器内页面跳转(一定要用Ingress来实现代理)

2、域名映射

3、访问测试

输入www.shu.com:31520跳转到https://www.123ccc.com:30048/

nginx-ingress-controller以上所有均介绍完毕

traefik-ingress的deployment模式实验

1、下载3个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/ui.yaml3、访问ui界面

8080是提供可视化界面的端口

4、创建pod、service、ingress

7、域名映射

8、测试

扩容

缩容

traefik-ingress的daemonset模式实验

1、下载3个文件

①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

2、修改nginx的配置文件

3、创建pod、service、ingress

4、测试daemonset自动发现功能

5、域名映射

6、热更新(将配置文件传入容器中)

kubectl patch deployments.apps nginx-traefik --patch '{"spec": {"template": {"metadata": {"annotations": {"version/config": "20240118"}}}}}'

7、更改配置文件,看ui界面是否自动发现

相关文章:

k8s之对外服务ingress

一、service 1、service作用 ①集群内部:不断跟踪pod的变化,不断更新endpoint中的pod对象,基于pod的IP地址不断变化的一种服务发现机制(endpoint存储最终对外提供服务的IP地址和端口) ②集群外部:类似负…...

Ubuntu使用docker-compose安装mysql8或mysql5.7

ubuntu环境搭建专栏🔗点击跳转 Ubuntu系统环境搭建(十四)——使用docker-compose安装mysql8或mysql5.7 文章目录 Ubuntu系统环境搭建(十四)——使用docker-compose安装mysql8或mysql5.7MySQL81.新建文件夹2.创建docke…...

【办公类-21-02】20240118育婴员操作题word打印2.0

作品展示 把12页一套的操作题批量制作10份,便于打印 背景需求 将昨天整理的育婴师操作题共享, 因为题目里面有大量的红蓝颜色文字,中大班办公室都是黑白单面手动翻页打印。只有我待的教务室办公室有彩色打印机打印(可以自动双面…...

SpringMVC 文件上传和下载

文章目录 1、文件下载2、文件上传3. 应用 Spring MVC 提供了简单而强大的文件上传和下载功能。 下面是对两者的简要介绍: 文件上传: 在Spring MVC中进行文件上传的步骤如下: 在表单中设置 enctype“multipart/form-data”,这样…...

强缓存、协商缓存(浏览器的缓存机制)是么子?

文章目录 一.为什么要用强缓存和协商缓存?二.什么是强缓存?三.什么是协商缓存?四.总结 一.为什么要用强缓存和协商缓存? 为了减少资源请求次数,加快资源访问速度,浏览器会对资源文件如图片、css文件、js文…...

android 13.0 Camera2 去掉后置摄像头 仅支持前置摄像头功能

1.概述 在定制化13.0系统rom定制化开发中,当产品只有一个前置摄像头单摄像头,这时调用相机时就需要默认打开前置摄像头就需要来看调用摄像头这块的代码,屏蔽掉后置摄像头的调用api就可以了,接下来就来具体实现相关功能的开发 2.Camera2 去掉后置摄像头 仅支持前置摄像头功…...

【蓝桥杯EDA设计与开发】立创开源社区分享的关于蓝桥被EDA真题与仿真题的项目分析

立创开源社区内有几个项目分享了往年 EDA 设计题目与仿真题,对此展开了学习。 【本人非科班出身,以下对项目的学习仅在我的眼界范围内发表意见,如有错误,请指正。】 项目一 来源:第十四届蓝桥杯EDA赛模拟题一 - 嘉立…...

电影《潜行》中说的蜜罐是什么(网络安全知识)

近期刘德华、彭于晏主演的电影《潜行》在网上掀起了轩然大波,电影中有提到网络蜜罐,这引起了很多观众的疑问,蜜罐到底是什么? 从字面意思上来看,蜜罐就是为黑客设下的诱饵。这是一种具有牺牲性质的计算机系统&#xff…...

基于 UniAPP 社区论坛项目多端开发实战

社区论坛项目多端开发实战 基于 UniAPP 社区论坛项目多端开发实战一、项目准备1.1 ThinkSNS 简介及相关文档1.2 使用 UniAPP 构建项目1.3 构建项目文件结构1.4 配置页面 TabBar 导航1.5 使用 npm 引入 uView UI 插件库 二、首页功能实现2.1 首页 header 广告位轮播图功能实现2.…...

Ubuntu 22.04 安装MySql

MySQL是非常常用的关系型数据库,无论是大厂还是小厂,都有它的身影。最大的优点是免费,安装起来也比较简单。 MySQL的架构 画了个简图,描述了下MySQL的架构。 其中的比较有趣的点在于连接池和存储引擎。连接池缓存了数据库和客户端的TCP连接,以减少建立连接的开销。存储引…...

Centos常用命令整理,常用的比较全了

目 录 1、更改文件拥有者 2、修改权限 3、修改⽂件⽇期 4、链接⽂件 5、⽇期操作 6、显⽰⽇历 7、显⽰⽂件头部 8、显⽰⽂件尾部 9、显⽰⽤户标识 10、查看当前登录的⽤户 11、显⽰都谁登录到机器上 12、显⽰当前终端上的⽤户名 13、寻找⽂件…...

专业137总分439东南大学920专业基础综合考研经验电子信息与通信电路系统芯片

我本科是南京信息工程大学,今年报考东南大学信息学院,成功逆袭,专业137,政治69,英语86,数一147,总分439。以下总结了自己的复习心得和经验,希望对大家复习有一点帮助。啰嗦一句&…...

C++总结笔记

1. 简介 1、面向对象程序设计 面向对象的四大特性 1)封装 2)继承 3)多态 4)抽象 2、标准库 标准C由三个部分组成 1)核心语言:提供了所有的构件块 2)C标准库:提供了大量的函…...

数据库重点简答题

文章目录(持续更新) 数据库重点简答题📣一、SQL语言的作用?📣二、说一下你对ER图的认识?📣三、数据库中的三个模型?📣四、数据库基本表和视图的区别和联系?&a…...

Cmake(1)——Cmake的基本介绍和原理、Cmake的安装、如何使用Cmake构建项目

Cmake的基本介绍和原理、Cmake的安装、如何使用Cmake构建项目 插播!插播!插播!亲爱的朋友们,我们的Cmake课程上线啦!感兴趣的小伙伴可以去下面的链接学习哦~ https://edu.csdn.net/course/detail/39261 1、Cmake的基…...

Spring Boot程序的打包与运行:构建高效部署流程

引言 在现代应用开发中,高效的打包和部署流程对于项目的开发、测试和上线至关重要。Spring Boot作为一种快速开发框架,提供了方便的打包工具和内嵌式的Web服务器,使得打包和运行变得更加简单。本文将研究在Spring Boot应用中如何进行打包&am…...

【Linux取经路】初探进程地址空间

文章目录 一、历史问题回顾二、语言层面的地址空间2.1 验证 三、虚拟地址的引入3.1 初步解释这种现象——引入地址空间的概念3.2 再来粗粒度理解上面的现象 四、细节解释4.1 地址空间究竟是什么?4.2为什么要有地址空间4.3 页表4.3.1 CR3寄存器4.3.2 页表是由页表项组…...

.net core 6 使用注解自动注入实例,无需构造注入 autowrite4net

像java使用autowrite一样使用 1、前提先注册到ioc容器当中 builder.Services.AddScoped 2、nuget引入AutoWrite4Net 3、启用 //启用自动注入 app.UseAutoWrite(); 4、在类上使用注解 [StartAutoWrite] public class NacosController : ControllerBase 5、实例上使用注解 …...

LeetCode、2300. 咒语和药水的成功对数【中等,排序+二分】

文章目录 前言LeetCode、2300. 咒语和药水的成功对数【中等,排序二分】题目及类型思路及代码 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域…...

【MyBatis-Plus】逻辑删除

对于一些比较重要的数据,我们通常采用逻辑删除。(即用一个字段表示是否删除,实际上始终在数据库没有被删除) 当逻辑删除字段为 true,业务处理的时候会自动把该数据当做一个“不存在”的数据处理。(即不处理…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...