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

k8s的对外服务ingress

1、service的作用体现在两个方面

(1)集群内部:不断跟踪pod的变化,更新deployment中的pod对象,基于pod的ip地址不断变化的一种服务发现机制
(2)集群外部:类似于负载均衡器,把流量ip+端口,不涉及转发url(http/https),把请求转发到pod当中

2、service

nodeport

容器端口——service端口——nodeport

设定了nodeport,每个节点都会有一个端口被打开(30000-32767)

ip+端口:节点ip+30000-32767,实现负载均衡

loadbalancer

云平台上的一种service服务,云平台提供负载均衡ip地址

extrenal

域名映射

3、ingress:基于域名进行映射,把url(http/https)请求转发到service,再由service把请求转发到每个pod

①ingress:只要一个或者少量的公网ip/LB,可以把多个http请求暴露到外网,七层反向代理
②ingress:是service的service,是一组基于域名和url路径,把一个或者多个请求转发到service的规则
④先是七层代理(ingress)——再是四层代理(server)——pod(nginx)

4、ingress的组成

(1)ingress是一个api对象,通过yaml文件来进行配置

(2)ingress的作用:定义请求如何转发到service的规则,配置模版

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

ingress-controller

具体的实现反向代理和负载均衡的程序,对ingress定义的规则进行解析,根据ingress的配置规则进行请求的转发

ingress-controller不是k8s自带的组件功能,ingress-controller是一个统称

③ingress-controller:nginx ingress controller、traefik(开源)

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

5、ingress资源的定义项

(1)定义外部流量的路由规则
(2)定义服务的暴露方式:主机名、访问的路径(url)和其他的选项
(3)负载均衡(ingress-controller实现)

6、下载nginx ingress controller

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

7、ingress暴露服务的方式

(1)deployment+LoadBalance模式,ingress部署在公有云
①ingress的配置文件里面会有一个type,type键值对形式type:LoadBalance
②公有云平台会为LoadBalance的service创建一个负载均衡器,绑定一个公网地址,通过域名指向这个公网地址,就可以实现集群对外暴露
(2)daemonSet+hostnetwork+nodeselector(七层代理upstream)
①daemonset:在每个节点都会创建一个pod
②hostnetwork:pod共享节点主机的网络命名空间,pod中的容器直接使用节点主机的ip+端口,pod中的容器可以直接访问主机上的网络资源
③nodeselector:根据标签选择部署的节点,nginx-ingress-controller部署的节点

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

优点:性能最好

(3)deployment+NodePort(七层+四层)

8、部署daemonSet+hostnetwork+nodeselector

(1)修改配置文件mandatory.yaml

(2)每个节点上传控制器的镜像
tar -xf ingree.contro-0.30.0.tar.gz
docker load -i ingree.contro-0.30.0.tar

(3)节点设置标签
kubectl label nodes node2 ingress=true

netstat -antp | grep nginx

8181端口:nginx-controller默认配置的一个bachend,反向代理的端口

所有的请求当中,只要是不符合ingress配置的请求会转发到8181,相当于一个error的页面

(4)创建PVC、pod、service、ingress规则

(5)配置映射

(6)测试访问

8、deployment+NodePort(七层+四层)

(1)修改配置文件vim mandatory.yaml

(2)下载nodeport模版文件:
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml

①nodeport在每一节点上都暴露32110和32336的端口

3创建PVC、pod、service、ingress规则

(4)配置映射

(5)访问测试

(6)deployment+NodePort总结
①nodeport由ingress的service创建的,不是deployment的service创建的
②nodeport适用于小集群
③ingress根据标签匹配ingress-nodeport,ingress-nodeport再根据标签匹配service,service再匹配deployment
④每个节点都有一个controller,controller接收到解析后的请求ip和端口
(7)ingress暴露服务的方式:核心的控制组件nginx-ingress-controller
①host——ingress的配置找到pod——controller转发请求到pod
②nodeport——controller——ingress——service转发请求到pod
③nodeport暴露端口的方式是最简单的方法,但是nodeport多了一层nat地址转换
并发量大的对性能会有一定的影响,内部都会用nodeport

9、通过虚拟主机的方式实现http代理

(1)通过ingress方式实现:一个ingress可以访问不同的主机
(2)创建pod和service

3创建ingress

4配置映射

10、总结:
(1)ingress的核心组件:nginx-ingress-controller、traefik,都是开源的ingress-controller
(2)ingress的三种工作方式(重点)

deployment+loadbalancer:

需要云平台提供一个负载均衡的公网地址,公有云上配置

daemonset+hostnetwork+nodeselector:指定节点部署controller

①缺点:和宿主机共享网络,只能是一个controller的pod,多个端口会造成冲突

②hostnetwork会和宿主机共享网络

deployment+nodeport:最常见、最常用、最简单的方式

①集中一个nodeport端口,所有的ingress的请求都会转发到nodeport,再由service把流量转发到pod

(3)一个ingress的nodeport可以实现访问多个虚拟主机(和nginx一样)

11、基于ingress实现https代理访问(证书、密钥)

(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

表示使用sha-256的散列算法

-nodes

表示生成的密钥不加密

-day 365

证书有效期是265天

-newkey rsa:2048

RSA的密钥对,长度2048位

-keyout tls.key -out tls.crt

密钥文件key、证书文件crt

-subj"/CN=nginxsvc/O=nginxsvc"

主题CN(common name)O:表示organization组织

(2)创建secret,保存证书和密钥
kubectl create secret tls tls-secret --key tls.key --cert tls.crt

(3)创建pod、service、ingress

(4)设置映射

(5)测试访问

①虚拟机测试访问

②负载均衡

内部实现ingress访问https:DNS域名解析
外部实现ingress访问https:购买域名

12、ngixn的登录账户认证

(1)htpasswd生成一个认证文件,认证文件只能是auth
yum -y install httpd
htpasswd -c auth hyde

2创建secret保存auth认证文件
ubectl create secret generic basic-auth --from-file=auth

(3)创建ingress

(4)配置映射

(5)测试访问

13、nginx的重写rewrite(nginx的重定向)

(1)创建ingress

(2)设置映射

3测试访问

nginx-ingress-controller全部完成
14、traefik ingress controller(和nginx ingress controller的原理一样)

(1)traefik是一个为了让部署微服务更加快捷而诞生的一个http反向代理、负载均衡
①traefik设计时就能够实时的和k8s的api进行交互,可以感知后端service以及pod的变化,可以自动更新配置和重载
(2)traefik的部署方式
①daemonset
②deployment
(3)daemonset部署的特点
①每个节点都会部署一个traefik
②节点感知,可以自动发现、更新容器的配置,不需要手动重载
③缺点:资源占用,在大型集群中,daemonset可能会运行多个traefik的实例,尤其是在不需要大量容器运行的情况下(资源利用率不是很好,没有办法扩缩容)
④应用于部署对外集群(对外的业务会经常变更,使用daemonset可以更好的、自动的发现服务配置变更)
⑤设定标签:traffic-type:internal(对内服务)
(4)deployment部署的特点
①优点:集中办公控制,可以使用少量的实例来运行处理整个集群的流量,更容易升级和维护
②缺点:deployment的负载均衡不会均分到每个节点;无法感知容器内部的配置变化,需要手动更新
③应用于部署对内集群(内部的业务相对稳定,更新和变化也比较少,更适合deployment)
④设定标签:traffic-type:iexternal(对外服务)
(5)traefix-ingress和nginx-ingress的区别
①工作原理都一样,都是七层代理,都可以动态的更新配置,都可以自动发现服务
②traefix自动更新的重载速度更快,更方便
③traefix适用于小集群,traefix处理并发的能力只有nginx-ingress的60%
(6)traefik的实例之deployment+nodeport模式
①生成模版文件
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

②运行配置文件

③访问:20.0.0.71:31800

* 删除ingress

④创建pod、service、ingress

⑤测试访问

⑥设置映射

⑦配置自动发现
* 缩容

* 扩容

15、总结

(1)ingress的组件(开源):nginx-ingresscontroller、traefik-ingress-controller
(2) nginx-ingress的部署方式
①deployment+loadbalancer:公有云提供负载均衡的公网地址
②daemonset+hostnetwork+nodeselector:和节点服务器共享网络,一个节点只能部署一个controller pod,使用宿主机的端口,性能最好,适合大并发
③deployment+nodeport:最常见、最常用、最简单的方法,但是性能不太好,多了一层nat的地址转发,不太适合大并发
(3)traefik-ingress的部署方式
①对外:daemonset,可以自动更新容器的配置(host,使用节点的网络)
②对内:deployment,无法自动更新容器的配置(nodeport)
(4)基于ingress实现https代理访问(证书、密钥)
①先生成密钥、证书
②创建secret,保存证书和密钥
③创建ingress的时候把secret导入进去
(5)nginx登录加密认证
①htpasswd生成一个认证文件,认证文件只能是auth
②创建ingress的两个代码
第一条:声明认证类型
第二条:导入认证的密钥文件(以secret的方式存储在集群中)

(6)nginx的rewrite重定向
①在指定的ingress文件当中声明的url都会跳转到指定的页面

相关文章:

k8s的对外服务ingress

1、service的作用体现在两个方面 (1)集群内部:不断跟踪pod的变化,更新deployment中的pod对象,基于pod的ip地址不断变化的一种服务发现机制 (2)集群外部:类似于负载均衡器&#xff…...

[足式机器人]Part2 Dr. CAN学习笔记- Kalman Filter卡尔曼滤波器Ch05-3+4

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记 - Kalman Filter卡尔曼滤波器 Ch05-34 3. Step by step : Deriation of Kalmen Gain 卡尔曼增益/因数 详细推导4. Priori/Posterrori error Covariance Martix 误差协方差矩阵 3. Step by step :…...

关于前端面试中forEach方法的灵魂7问?

目录 前言 一、forEach方法支持处理异步函数吗? 二、forEach方法在循环过程中能中断吗? 三、forEach 在删除自己的元素后能重置索引吗? 四、forEach 的性能相比for循环哪个好? 五、使用 forEach 会不会改变原来的数组&#…...

AI小程序添加深度合成类目解决办法

基于文言一心和gpt等大模型做了一个ai助理小程序,在提交“一点AI助理”小程序时,审核如下: 失败原因1 审核失败原因 你好,你的小程序涉及提供提供文本深度合成技术 (如: AI问答) 等相关服务,请补充选择:深度…...

C/C++ BM6判断链表中是否有环

文章目录 前言题目解决方案一1.1 思路阐述1.2 源码 解决方案二2.1 思路阐述2.2 源码 总结 前言 做了一堆单链表单指针的题目,这次是个双指针题,这里双指针的作用非常明显。 题目 判断给定的链表中是否有环。如果有环则返回true,否则返回fal…...

【Java 设计模式】结构型之适配器模式

文章目录 1. 定义2. 应用场景3. 代码实现结语 适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成客户端期望的另一个接口。这种模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。在本文中,我…...

使用函数计算,数禾如何实现高效的数据处理?

作者:邱鑫鑫,王彬,牟柏旭 公司背景和业务 数禾科技以大数据和技术为驱动,为金融机构提供高效的智能零售金融解决方案,服务银行、信托、消费金融公司、保险、小贷公司等持牌金融机构,业务涵盖消费信贷、小…...

卷积和滤波对图像操作的区别

目录 问题引入 解释 卷积 滤波 问题引入 卷积和滤波是很相似的,都是利用了卷积核进行操作 那么他们之间有什么区别呢? 卷积:会影响原图大小 滤波:不会影响原图大小 解释 卷积 我们用这样一段代码来看 import torch.nn as …...

李沐深度学习-线性回归从零开始

# 核心Tensor,autograd import torch from IPython import display import numpy as np import random from matplotlib import pyplot as pltimport syssys.path.append(路径) from d2lzh_pytorch import * backward()函数:一次小批量执行完在进行反向传播 线性回归…...

CentOS 8.5 安装图解

特特特别的说明 CentOS发行版已经不再适合应用于生产环境,客观条件不得不用的话,优选7.9版本,8.5版本次之,最次6.10版本(比如说Oracle 11GR2就建议在6版本上部署)! 引导和开始安装 选择倒计时结…...

好用的流程图工具

分享工作中常用的装逼工具 目前市面上的流程图或者思维导图工具挺多的,但是有的会限制使用数量或者收费,典型的有processon、Xmind,推荐今天Mermaid(官网)。 快速上手 中文教程:Mermaid 初学者用户指南 | Mermaid 中文网。我们选择…...

数据结构:链式栈

stack.h /* * 文件名称&#xff1a;stack.h * 创 建 者&#xff1a;cxy * 创建日期&#xff1a;2024年01月18日 * 描 述&#xff1a; */ #ifndef _STACK_H #define _STACK_H#include <stdio.h> #include <stdlib.h>typedef struct stack{int data…...

openssl3.2 - 官方demo学习 - mac - gmac.c

文章目录 openssl3.2 - 官方demo学习 - mac - gmac.c概述笔记END openssl3.2 - 官方demo学习 - mac - gmac.c 概述 使用GMAC算法, 设置参数(指定加密算法 e.g. AES-128-GCM, 设置iv) 用key执行初始化, 然后对明文生成MAC数据 官方注释给出建议, key, iv最好不要硬编码出现在程…...

HugggingFace 推理 API、推理端点和推理空间相关模型部署和使用以及介绍

HugggingFace 推理 API、推理端点和推理空间相关模型部署和使用以及介绍。 Hugging Face是一家开源模型库公司。 2023年5月10日&#xff0c;Hugging Face宣布C轮1亿美元融资&#xff0c;由Lux Capital领投&#xff0c;红杉资本、Coatue、Betaworks、NBA球星Kevin Durant等跟投…...

python的tabulate包在命令行下输出表格不对齐

用tabulate可以在命令行下输出表格。 from tabulate import tabulate# 定义表头 headers [列1, 列2, 列3]# 每行的内容 rows [] rows.append((张三,数学,英语)) rows.append((李四,信息科技,数学))# 使用 tabulate 函数生成表格 output tabulate(rows, headersheaders, tab…...

LLM之幻觉(二):大语言模型LLM幻觉缓减技术综述

LLM幻觉缓减技术分为两大主流&#xff0c;梯度方法和非梯度方法。梯度方法是指对基本LLM进行微调&#xff1b;而非梯度方法主要是在推理时使用Prompt工程技术。LLM幻觉缓减技术&#xff0c;如下图所示&#xff1a; LLM幻觉缓减技术值得注意的是&#xff1a; 检索增强生成&…...

C# 使用多线程,关闭窗体时,退出所有线程

this.Close(); 只是关闭当前窗口&#xff0c;若不是主窗体的话&#xff0c;是无法退出程序的&#xff0c;另外若有托管线程&#xff08;非主线程&#xff09;&#xff0c;也无法干净地退出&#xff1b;Application.Exit(); 强制所有消息中止&#xff0c;退出所有的窗体&…...

数据结构实验6:图的应用

目录 一、实验目的 1. 邻接矩阵 2. 邻接矩阵表示图的结构定义 3. 图的初始化 4. 边的添加 5. 边的删除 6. Dijkstra算法 三、实验内容 实验内容 代码 截图 分析 一、实验目的 1&#xff0e;掌握图的邻接矩阵的存储定义&#xff1b; 2&#xff0e;掌握图的最短路径…...

Spring Boot整合JUnit

引言 测试是软件开发过程中不可或缺的一环&#xff0c;而JUnit作为Java生态中最流行的测试框架之一&#xff0c;与Spring Boot的整合为开发者提供了一套强大的测试工具。本文将讨论Spring Boot整合JUnit的技术细节、最佳实践以及测试驱动开发&#xff08;TDD&#xff09;的优雅…...

uniapp写小程序实现清除缓存(存储/获取/移除/清空)

在uni-app中&#xff0c;可以使用uni.setStorageSync和uni.getStorageSync来进行数据的存储和获取。而移除缓存数据可以使用uni.removeStorageSync&#xff0c;清空缓存数据可以使用uni.clearStorageSync。 以下是使用示例&#xff1a; 存储数据&#xff1a; uni.setStorage…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...