10、k8s对外服务之ingress

service和ingress的作用

service的作用

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

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

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

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

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

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

数据流向图

根据ingress-controller匹配到指定service,service再把访问ingress的基于域名的连接流量转发到service匹配的pod。

ingress的组成

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

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

  • ingress-nginx:主流的ingress-controller。
  • traefik:有图形化的ui,直观。

ingress-controller暴露方式

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

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

3、deployment+nodeport:deployment部署也会执行一个ingress-controller的pod,pod也会执行一个service,service的模式是nodeport,分别对应80(http)和443(https),对应节点的端口号范围是30000-32767。

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

转发方式:NAT

ingress部署实现的过程

daemonSet+hostnetwork+nodeSelector模式

1、先给node2定义标签

2、提前准备好nginx-ingress-controller脚本文件并运行,保证daemonSet

由下可见hostnetwork直接使用了宿主机node2的端口转发流量

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

3、接着编写yaml脚本,定义pvc、pod、service和ingress,使ingress请求转向service,service再转向pod,pvc给pod自动分配pv。

4、最后给node2节点做域名映射,运行脚本后显示成功。

deployment+nodeport模式

1、提前准备好nginx-ingress-controller脚本文件并运行,保证deployment

2、创建service的yaml文件如下

3、直接运行上面实验(包含pvc、pod、service和ingress)的yaml脚本

4、最后node1或者node2节点做域名映射,运行脚本后显示成功。

https

https概念

http的加密版就是https,默认端口是443。加密方式:SSL或者TSL协议实现加密和认证。SSL已经淘汰,TLS证书是主流。

TLS的组成:

  • 记录协议(record protocol):负责数据传输的可靠性
  • 握手协议(handshake Security):建立安全连接的过程

TSL的作用:

  1. 数据加密:使用对称密钥加密通信的内容。
  2. 认知:通过数字证书验证服务器(服务端和客户端都要)的身份。证书可以自定义,也可以在专门的数字证书网站获取。
  3. 完整性检查:防止第三方对数据进行篡改。

htttps数据流向:

1、客户端发起请求,如向百度发起请求(请求方式:https,请求方法:get),请求建立连接:三次握手。

2、TLS/SSL的握手过程:

  1. 客户端——>发送支持tls版本的加密套件列表(证书和私钥文件)
  2. 服务端——>服务器选择一个双方都支持的TLS的证书和私钥等等,生产一个数字证书。
  3. 客户端——>客户端收到服务端的证书之后,验证证书的有效性(签发证书人是否合法,过期时间等等)。
  4. 客户端生成预定的密钥(TLS),和服务器交换密钥;服务端验证密钥的有效性,以及密钥是否正确。
  5. TLS的握手过程完成

3、建立安全连接:使用协商好的加密算法和密钥对后续的数据进行加密传输。

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

https部署实现的过程

daemonSet+hostnetwork+nodeSelector

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的散列算法
  • -nodes:表示生成的私钥不加密
  • -days 365:证书有效期的时间365天
  • -newkey rsa:2048:表示生成密钥对是rsa加密的,长度是2048位。
  • -keyout tls.key:生成的密钥对保存到tls.key文件中
  • -out tls.crt:证书保存到tls.crt文件中
  • -subj "/CN=nginxsvc/O=nginxsvc:为证书添加一个主题,CN是证书的名称,O是组织关系。

2、将证书和密钥保存到secret中

3、根据上面http的配置文件修改ingress控制字段添加个加密即可。

4、最后在主节点上给node2节点做域名映射,运行脚本后显示成功。

deployment+nodeport模式实现https在上面http实操基础上添加加密字段即可。

容器内抓包

1、获取docker的container id

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

docker inspect --format '{{.State.Pid}}'  container id


 

3、进入这个容器的网络命令空间

nsenter -n -t pid号

4、抓包

tcpdump -i 容器的网卡名

ingress补充

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

这里我们使用上面deployment+nodeport模式实验的pod,当然也可以重新建一个pod。

apt -y install apache2

设置http的账号密码

  • auth是加密的文件的名称,必须是auth的名称。

2、创建secret,使用auth加密的文件。

3、配置yaml文件

页面跳转,重定向

配置yaml文件

做个地址映射即可实现url页面跳转

当我们访问re.xy104.com会跳转到www2.xy104.com:32271

traefik

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

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

nginx-ingress 需要不断的请求 k8s的api,获取终端的变化,traefik自动的实时更新,可以完全同步获取k8s的api的更新结果,和k8s的适配度更高。

nginx-ingree处理大并发环境更优秀

traefik:一般用于小的集群,并发量不是那么大的请求环境,。

traefik的部署方式

deployment+nodeport:适合面向内部服务

daemonset+hostnetwork+nodeselector:适合面向外部服务

loadbalancer+deployme

总结

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

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

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

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

相关文章

Linux-ubuntu系统移植之Uboot启动流程

Linux-ubuntu系统移植之Uboot启动流程 一,Uboot启动流程1.Uboot的两阶段1.1.第一阶段1.11.硬件初始化1.12.复制 U-Boot 到 RAM1.13.跳转到第二阶段 1.2.第二阶段1.21.C 语言环境初始化1.22. 硬件设备初始化1.23. 加载环境变量1.24. 显示启动信息1.25. 等待用户输入&…

H3C交换机路由器防火墙FTP/TFTP服务器搭建。

软件介绍。 3CDaemon 2.0 - Download 3CDaemon 是一款集成了多种网络服务功能的工具软件,主要用于网络管理和文件传输,支持TFTP、FTP、Syslog等多种协议,广泛应用于网络设备的配置和管理。 1. 主要功能 TFTP服务器:支持TFTP协议…

Docker Mysql 数据迁移

查看启动命令目录映射 查看容器名称 docker ps查看容器的启动命令 docker inspect mysql8.0 |grep CreateCommand -A 20如下图所示:我这边是把/var/lib/mysql 目录映射到我宿主机的/mnt/mysql/data目录下,而且我的数量比较大使用方法1的话时间比较久,所以我采用方法2 如果没…

[Windows] WPS 2024冬季更新版(版本号19770)

[Windows] WPS 2024冬季更新版 链接:https://pan.xunlei.com/s/VOJQrS4UCz5639Oan7pu1X84A1?pwdg8ad# WPS灵犀正式上线DeepSeek R1!告别服务器超时,办公效率飙升300%! 2025年2月14日,WPS官方宣布全面接入DeepSeek …

图解循环神经网络(RNN)

目录 1.循环神经网络介绍 2.网络结构 3.结构分类 4.模型工作原理 5.模型工作示例 6.总结 1.循环神经网络介绍 RNN(Recurrent Neural Network,循环神经网络)是一种专门用于处理序列数据的神经网络结构。与传统的神经网络不同&#xff0c…

【队列】循环队列(Circular Queue)详解

文章目录 一、循环队列简介二、循环队列的判空和判满三、循环队列的实现leetcode 622. 设计循环队列 一、循环队列简介 在实际开发中,队列是一种常用的数据结构,而循环队列(Circular Queue)则一般是一种基于数组实现的队列&#x…

vmware虚拟机Ubuntu Desktop系统怎么和我的电脑相互复制文件、内容

1、先安装vmware workstation 17 player,然后再安装Ubuntu Desktop虚拟机,然后再安装vmware tools,具体可以参考如下视频: VMware虚拟机与主机实现文件共享,其实一点也不难_哔哩哔哩_bilibili 2、本人亲自试过了&…

Netty入门详解

引言 Netty 是一个基于 Java 的高性能、异步事件驱动的网络应用框架,用于快速开发可维护的高性能网络服务器和客户端。它提供了一组丰富的 API,使得开发人员能够轻松地处理各种网络协议,如 TCP、UDP 等,并且支持多种编解码方式&a…

DeepSeek 助力 Vue 开发:打造丝滑的点击动画(Click Animations)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

Spring-GPT智谱清言AI项目(附源码)

一、项目介绍 本项目是Spring AI第三方调用整合智谱请言(官网是:https://open.bigmodel.cn)的案例,回答响应流式输出显示,这里使用的是免费模型,需要其他模型可以去 https://www.bigmodel.cn/pricing 切换…

DeepSeek智能测试知识库助手PRO版:多格式支持+性能优化

前言 测试工程师在管理测试资产时,需要面对多种文档格式、大量文件分类及知识库的构建任务。为了解决这些问题,我们升级了 DeepSeek智能测试知识库助手,不仅支持更多文档格式,还加入了 多线程并发处理 和 可扩展格式支持,大幅提升处理性能和灵活性。 主要功能亮点: 多格…

【Python游戏】双人简单对战游戏

以下是一个使用 Python 的 pygame 库实现的简单对战游戏示例,游戏中玩家可以控制两个角色进行对战,并且支持自定义图片(最好使用无底色的png图片)。完整源码以及实现思路: import pygame import os# 初始化 Pygame pygame.init()# 设置游戏窗…

邮件安全之发件人伪造

电子邮件工作原理 电子邮件传输过程中主要涉及到SMTP、IMAP、POP3三种协议,具体功能如下: SMTP:全称Simple Mail Transfer Protocol,即简单邮件传输协议,主要用于发送邮件,使用端口号25。 IMAP:全称Internet Mail Acce…

Ubuntu虚拟机NDK编译ffmpeg

目录 一、ffmpeg源码下载1、安装git(用于下载ffmpeg源码)2、创建源码目录,下载ffmpeg源码 二、下载ubuntu对应的NDK,并解压到opt下1、下载并解压2、配置 ~/.bashrc 三、源码编译、1、创建编译脚本2、脚本文件内容3、设置可执行权限并运行4、编译的结果在…

[展示]Webrtc NoiseSuppressor降噪模块嵌入式平台移植

最近在尝试把WebRtc的NoiseSuppressor模块移植到嵌入式平台,现在已经移植了,尝试了下效果,降噪效果很显著,噪声带被显著抑制了 降噪前: 降噪后:

适用于复杂背景的YOLOv8改进:基于DCN的特征提取能力提升研究

文章目录 1. YOLOv8的性能瓶颈与改进需求1.1 YOLOv8的优势与局限性1.2 可变形卷积(DCN)的优势 2. DCN在YOLOv8中的应用2.1 DCN的演变与YOLOv8的结合2.2 将DCN嵌入YOLOv8的结构中2.2.1 DCNv1在YOLOv8中的应用2.2.2 DCNv2与DCNv3的优化 2.3 实验与性能对比…

本地部署DeepSeek R1 + 界面可视化open-webui【ollama容器+open-webui容器】

本地部署DeepSeek R1 界面可视化open-webui 本文主要讲述如何用ollama镜像和open-webui镜像部署DeepSeek R1, 镜像比较方便我们在各个机器之间快速部署。 显卡推荐 模型版本CPU内存GPU显卡推荐1.5B4核8GB非必需4GBRTX1650、RTX20607B、8B8核16GB8GBRTX3070、RTX…

stm32单片机个人学习笔记15(I2C通信协议)

前言 本篇文章属于stm32单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。 STM32入门教程-2023版 细…

曙光服务器安装centos8

一、安装系统 服务器硬件配置如下: 操作步骤: 准备空U盘制作系统启动盘 使用工具:Ventoy (⏬下载地址:www.ventoy.net/cn/download.html) 教程: 【选择U盘进行安装,完成后将系统…

Qt5 C++ TcpSocket 如何判断是服务主动断开tcp socket连接?

文章目录 实现思路示例代码代码解释主要功能和用法注意事项 在 Qt 5.9.9 的 C 开发中,使用 QTcpSocket 时,要判断是服务端主动断开 TCP Socket 连接,可以通过处理 QTcpSocket 的 disconnected 信号,结合 QTcpSocket 的状态以及…