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.mzph.cn/web/70387.shtml

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

相关文章

Java数据结构---栈

目录 一、栈的概念 二、栈的基本方法 三、栈的模拟实现 四、栈的练习 1、括号匹配 2、出栈入栈次序匹配 一、栈的概念 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底…

从CNN到Transformer:遥感影像目标检测的未来趋势

文章目录 前言专题一、深度卷积网络知识专题二、PyTorch应用与实践(遥感图像场景分类)专题三、卷积神经网络实践与遥感影像目标检测专题四、卷积神经网络的遥感影像目标检测任务案例【FasterRCNN】专题五、Transformer与遥感影像目标检测专题六、Transfo…

php-fpm

摘要 php-fpm(fastcgi process manager)是PHP 的FastCGI管理器,管理PHP的FastCGI进程,提升PHP应用的性能和稳定性 php-fpm是一个高性能的php FastCGI管理器,提供了更好的php进程管理方式,可以有效的控制内存和进程,支…

Python strip() 方法详解:用途、应用场景及示例解析(中英双语)

Python strip() 方法详解:用途、应用场景及示例解析 在 Python 处理字符串时,经常会遇到字符串前后存在多余的空格或特殊字符的问题。strip() 方法就是 Python 提供的一个强大工具,专门用于去除字符串两端的指定字符。本文将详细介绍 strip(…

open webui 部署 以及解决,首屏加载缓慢,nginx反向代理访问404,WebSocket后端服务器链接失败等问题

项目地址:GitHub - open-webui/open-webui: User-friendly AI Interface (Supports Ollama, OpenAI API, ...) 选择了docker部署 如果 Ollama 在您的计算机上,请使用以下命令 docker run -d -p 3000:8080 --add-hosthost.docker.internal:host-gatewa…

docker安装ros2 并在windows中显示docker内ubuntu系统窗口并且vscode编程

这里包括docker desktop安装ros2 humble hawkshill , 安装xserver(用来在windows中显示ubuntu中窗口), vscode安装插件连接docker并配置python的一系列方法 1.安装xserver 为了能方便的在windows中显示ubuntu内的窗口,比如rqt窗口 参考文章:https://www.cnblogs.com/larva-zhh…

VMware安装Centos 9虚拟机+设置共享文件夹+远程登录

一、安装背景 工作需要安装一台CentOS-Stream-9的机器环境,所以一开始的安装准备工作有: vmware版本:VMware Workstation 16 镜像版本:CentOS-Stream-9-latest-x86_64-dvd1.iso (kernel-5.14.0) …

C/C++ 中 volatile 关键字详解

volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊…

处理器架构、单片机、芯片、光刻机之间的关系

这些术语都涉及到半导体和电子设备的设计与制造,但它们的含义和作用有所不同。下面我会逐个解释,并描述它们之间的关系: 1. 处理器架构 (Processor Architecture) 处理器架构指的是处理器(CPU)的设计原理和结构。它定…

python之socket编程

Socket编程是计算机网络编程的基础,它允许两台计算机(或同一个计算机的不同进程)之间进行通信。Python 提供了 socket 模块,可以很方便地进行 Socket 编程。下面是一些基本的 Socket 编程示例,包括 TCP 和 UDP。 TCP …

Docker 的安全配置与优化(二)

Docker 安全优化策略 (一)多阶段构建优化镜像大小 多阶段构建是 Docker 17.05 版本引入的强大功能,它允许在一个 Dockerfile 中定义多个构建阶段,每个阶段都可以使用不同的基础镜像和依赖项,最终只将必要的文件和依赖…

欧洲跨境组网专线:企业出海的高效网络解决方案

在全球化的背景下,越来越多的企业将业务拓展至海外市场,并在欧洲等地设立分支机构。然而,跨境办公中常常面临公网网络延迟高、打开速度慢、丢包严重等问题,这不仅影响办公效率,还增加了IT维护的难度和成本。针对这一痛…

面阵工业相机提高餐饮业生产效率

餐饮行业是一个快节奏、高要求的领域,该领域对生产过程中每一个阶段的效率和准确性都有很高的要求。在食品加工、包装、质量控制和库存管理等不同生产阶段实现生产效率的优化是取得成功的关键步骤。面阵工业相机能够一次性捕捉对象的二维区域图像,并支持…

Renesas RH850 IAR编译时变量分配特定内存

文章目录 1. 核心作用2. 典型使用场景3. 示例代码4. 编译器与链接脚本协作5. 注意事项6. 调试验证在RH850系列微控制器的开发中,#pragma location = "FIRST_RAM" 是一条编译器指令,其核心含义是 将变量或函数分配到名为 FIRST_RAM 的特定内存段。以下是详细解释: …

C++面试题,进程和线程方面(1)

文章目录 前言进程和线程有什么不同进程,线程的通讯方式什么是锁为什么说锁可以使线程安全加锁有什么副作用总结 前言 这是个人总结进程和线程方面的面试题。如果有错,欢迎佬们前来指导!!! 进程和线程有什么不同 进程…

视频mp4垂直拼接 水平拼接

视频mp4垂直拼接 水平拼接 pinjie_v.py import imageio import numpy as np import os import cv2def pinjie_v(dir1,dir2,out_dir):os.makedirs(out_dir, exist_okTrue)# 获取目录下的所有视频文件video_files_1 [f for f in os.listdir(dir1) if f.endswith(.mp4)]video_fi…

Unity摄像机与灯光相关知识

一、Inspector窗口 Inspector窗口可以查看和编辑对象的属性以及设置 其中包含各种组件,例如用Cube对象来举例 1.Sphere(Mesh)组件: 用来决定对象的网格属性,例如球体网格为Sphere、立方体网格为Cube 2.Mesh Renderer组件: 用来设置…

C++(17):为optional类型构造对象

C++(17):optional,多了一个合理的选择_c++17 max-CSDN博客 介绍了optional做为函数返回值的一种方式 其实optional也可以作为对象来使用 #include &

探索关键领域的AI工具:机器学习、深度学习、计算机视觉与自然语言处理

引言 在人工智能(AI)迅猛发展的今天,机器学习(ML)、深度学习(DL)、计算机视觉(CV)和自然语言处理(NLP)已经成为解决复杂问题的关键技术。无论是自动驾驶车辆的视觉识别,还是智能助手的对话理解,这些技术都在改变着世界。本文将介绍在各个领域…

基于vue和微信小程序的校园自助打印系统(springboot论文源码调试讲解)

第3章 系统设计 3.1系统功能结构设计 本系统的结构分为管理员和用户、店长。本系统的功能结构图如下图3.1所示: 图3.1系统功能结构图 3.2数据库设计 本系统为小程序类的预约平台,所以对信息的安全和稳定要求非常高。为了解决本问题,采用前端…