九、k8s:ingress

news/2025/2/25 10:39:18

k8s对外服务之ingress:

service的作用:

NodePort:会在每个节点开放一个端口,端口号30000-32767。

也是只能用于内网访问,四层转发。实现负载均衡。不能基于域名进行访问。

clusterip:service的默认类型,只能在集群内部访问

loadBalancer:基于云平台的实现的,需要有loadBalancer的地址,仅限于云平台

externallPS:service允许分配外部ip,把外部ip路由集中到集群的一个或者多个node节点

ingress:只需要一个或者少量的公网ip地址或者是loadBalancer的地址,就可以实现将多个http的服务,暴露到外网,七层代理,service的service,基于域名和URL路径,把用户的请求转发到一个或者多个service的规则。

ingress的组成:

ingress只能通过yaml文件配置,其实ingress是一种规则,根据ingress的配置匹配到指定service,service再把访问ingress的基于域名的连接流量转发到service匹配的pod。

ingress-controller:不是k8s自带的组件,第三方的软件,不管是哪一种ingress-controller机制都一样的,没有任何区别,都是以pod的形式运行在集群当中。

ingress-nginx-------------主流的方式

traefik------------->图形化的ui,直观。

ingress-controller暴露服务的方式:

ingress-nginx

traefik

第一种:

deployment+loabBalancer

你把ingress部署在公有云,可以采用这种方式,loadBalancer会为service自动创建一个负载均衡器,只要域名解析指向到loadBalancer的地址,就可以实现集群的对外访问

第二种: 

daemonSET+hostNetworkrk+nodeSelector:

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

第三种:

deployment+Nodeport部署

deployment部署也会执行一个ingress-controller的pod,pod也会对应一个service,service的模式是NodePort,分别对应80和443

80----------》http--------------30000-32767

443---------》https-----------30000-32767

还需要再额外部署一个service,转发到pod。这种方式又会多了一层转发的请求,请求量极大,性能会有一定影响。

转发方式:NAT(地址转发)

daemonSET+hostNetworkrk+nodeSelector部署

做个标签

8181:nginx-controller默认配置的后台转发的端口,ingree没有匹配到规则时,使用的默认端口。

允许

pvc

deployment+Nodeport部署

https是什么:

就是http的加密版就是https,默认端口是443

加密方式:SSL/TLS协议实现加密认证

SSL已经淘汰,TLS证书是主流

TLS的组成:

记录协议(record protocol):负责数据传输的可靠性

握手协议(handshake Security):建立安全连接的过程

TSL的作用:

1、数据加密:使用对称密钥加密通信的内容

2、认证:通过数字证书验证服务器的身份

服务端和客户端之间都要认证。证书可以自定义,也可以在专门的数字证书网站获取

3、完整性检查:防止第三方对数据进行篡改

https数据流向:

1、客户端发起请求------>百度

请求的方式是https,请求的方法get

请求建立连接:三次握手

2、TLS/SSL的握手过程:

客户端-------->发送支持tls版本的加密套件列表(证书和私钥文件)

服务端-------->服务端选择一个双方都支持的TLS的证书和私钥等等,生成一个数字证书

客户端-------->客户端收到服务端的证书之后,验证证书的有效性(签发证书人是否合法,过期时间等等)

客户端生成预定的密钥(TLS),和服务器交换密钥,服务端验证密钥的有效性,已经密钥是否正确

TLS的握手过程完成

3、建立安全连接:

使用协商好的加密算法和密钥对后续的数据进行加密传输

4、关闭TLS连接,释放资源然后四次挥手断开连接

https部署实现的过程:

1、先在集群内生成证书

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

openssl:签发ssl证书

req:执行证书的请求已经生产相关的文件

-x509:生成自签名的x.509格式的证书

-sha256:使用sha-256的散列算法

-node:表示生成的私钥不加密

-days 365:证书的有效期时间365天

-newkey rsa:2048 :表示生成密钥对是RSA加密的,长度是2048位

-keyout tls.key -out tls.crt:生成的密钥对,保存到tls.crt文件中

                         -out tls.crt:证书保存到tls.crt文件中

-subj "/CN=nginxsvc/O=nginxsvc":为证书添加一个主题cn证书的名称 O:组织关系

证书:用于加密和认证网络通信的数字证书,证明服务器的身份。确保客户端连接到的服务器是合法的。协商加密的密钥,保证通信过程中数据的安全。

公钥,组织信息,数字签名等等,证书颁发机构签发的。
私钥:对服务器的证书进行数字签名,同时用于解密客户端发送的加密数据,私钥只有服务端才能够访问与证书匹配的私钥文件。

容器内抓包

1、获取docker的container id
2、根据containerid获取docker的进程号

docker inspect --format '{{.State.Pid}}' a9af52be75d17d7a97e0453ff5a721ff1bc4c5ecaf27519772b2d270320c49f6

3、进入这个容器的网络命令空间
nsenter-n-t pid号
4、tcpdump -i容器的网卡名

ingress:

1、基于用户名和密码实现登录的认证

已创建的要先删除再创建

2、页面跳转,重定向。

traefik

ingress-controller的另一种插件,和nginx-ingress大同小异

也是部署微服务更快捷的http反向代理和负载均衡,以及7层代理。

nginx-ingress需要不断的请求k8s的api,获取终端的变化,

traefik自动的实时更新,可以完全同步获取k8s的api的更新结果,和k8s的适配度更高

nginx-ingree:处理大并发环境更优秀
traefik:一般用于小的集群,并发量不是那么大的请求环境。

traefik的部署方式:

deployment+nodeport----------->内部服务

loadbalancer+deployment--------------->公有云支持

daemonset+hostnetwork+nodeselector------------>面向外部服务

4按照顺序部署


总结:

ingress是外部进入k8s集群的入口,可以理解为service的service,ingress使用的时候,域名,匹配到可用的service。

ingress是做7层转发,可以对http/https的请求进行处理


http://www.niftyadmin.cn/n/5865394.html

相关文章

Apache Doris:一款高性能的实时数据仓库

Apache Doris 是一款基于 MPP 架构的高性能、实时分析型数据库。它以高效、简单和统一的特性著称,能够在亚秒级的时间内返回海量数据的查询结果。Doris 既能支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。 Apache Doris 最初是百度广告报表业务…

数字IC后端设计实现OCC(On-chip Clock Controller)电路介绍及时钟树综合案例

数字IC后端时钟树综合专题(OCC电路案例分享) 复杂时钟设计时钟树综合(clock tree synthesis)常见20个典型案例 1、什么是OCC? 片上时钟控制器(On-chip Clock Controllers ,OCC),也称为扫描时钟控制器(Scan Clock Con…

我与Linux的爱恋:了解信号量+共享内存+消息队列的应用

​ ​ 🔥个人主页:guoguoqiang. 🔥专栏:Linux的学习 文章目录 信号量共享内存应用---Server&Client通信client.ccserver.ccnamepipe.hppShm.hpp 消息队列——实现Client&ServerCom.hppClient.ccServer.cc 信号量 信号量…

用Deepseek直接在word中完成论文的润色(中-中,中-英, 英-中)

最近,各行各业仿佛掀起了一场“Deepseek接入大赛”——从大公司到小微企业,从手机助手到扫地机器人,似乎不接入Deepseek都不好意思说自己是“智能体”了。就连我家楼下的自动售货机都开始“思考”该给我推荐什么零食了(虽然它最后…

MybatisPlus-扩展功能-枚举处理器

在Mybatis里有一个叫TypeHandler的类型处理器,我们常见的PO当中的这些成员变量的数据类型,它都有对应的处理器,因此它就能自动实现这些Java数据类型与数据库类型的相互转换。 它里面还有一个叫EnumOrdinalTypeHandler的枚举处理器&#xff0…

项目——仿RabbitMQ实现消息队列

1.项目介绍 曾经在学习Linux的过程中,我们学习过阻塞队列 (BlockingQueue) 。 当时我们说阻塞队列最大的用途, 就是用来实现生产者消费者模型。 生产者消费者模型是后端开发的常用编程方式, 它存在诸多好处: 解耦合支持并发支持忙闲不均削峰…

ArcGIS Pro中创建最低成本路径的详尽教程

一、引言 在地理信息系统(GIS)的应用场景中,路径分析扮演着至关重要的角色。而最低成本路径分析,则是路径分析中的一种高级应用,它综合考虑了地形、植被、土地利用类型等多种因素,通过加权计算得出一条从起…

rust笔记9-引用与原始指针

Rust 中的指针类型和引用类型是理解其内存管理机制的关键部分。& 引用和 * 原始指针在底层原理上确实都可以认为是指针,它们都存储了某个内存地址,并指向该地址处的数据。然而,它们在安全性、使用方式和编译器支持上有显著的区别。下面我会详细解释它们的异同点,帮助你…