k8s的对外服务ingress

news2024/10/1 9:41:52

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都会跳转到指定的页面

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

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

相关文章

经典目标检测YOLO系列(二)YOLOV2的复现(2)正样本的匹配、损失函数的实现及模型训练

经典目标检测YOLO系列(二)YOLOV2的复现(2)正样本的匹配、损失函数的实现及模型训练 我们在之前实现YOLOv1的基础上,加入了先验框机制,快速的实现了YOLOv2的网络架构,并且实现了前向推理过程。 经典目标检测YOLO系列(二)YOLOV2的复现(1)总体…

C#开源跨平台的多功能Steam工具箱GitHub加速神器

前言 作为一名程序员你是否会经常会遇到GitHub无法访问(如下无法访问图片),或者是访问和下载源码时十分缓慢就像乌龟爬行一般。今天分享一款C#开源的、跨平台的多功能Steam工具箱和GitHub加速神器:Watt Toolkit。 项目功能 网络加速、账号切换、库存游…

C++的命名空间域

一、域作用限定符 :: 即是域作用限定符,它的作用是指明一个标识符(变量、函数或类)来自哪一个作用域范围 二、编译器搜索变量、函数等的原则 1.先搜索局部变量,2.再搜索全局变量,3.最后搜索指定的命名空间域 三、…

uni-app小程序 uni.showToast字数超过两行自动省略显示不全问题

在实际开发过程中如果用户提交某些文件时,如果缺少某些条件我们要提醒用户缺少那些条件才能提交,但是如果我们用uni.showToast提醒的次数超过7个字的时候就会导致文字显示不全,达不到提醒的效果,这种时候我们就需要使用uni.showMo…

C++后端笔记

C后端笔记 资源整理一、高级语言程序设计1.1 进制1.2 程序结构基本知识1.3 数据类型ASCII码命名规则变量间的赋值浮点型变量的作用字符变量常变量 const运算符 二、高级语言程序设计(荣) 资源整理 C后端开发学习路线及推荐学习时间 C基础知识大全 C那…

聚类模型评估指标

聚类模型评估指标-轮廓系数 计算样本i到同簇其它样本到平均距离ai,ai越小,说明样本i越应该被聚类到该簇(将ai称为样本i到簇内不相似度);计算样本i到其它某簇Cj的所有样本的平均距离bij,称为样本i与簇Cj的…

SpiderFlow爬虫平台漏洞利用分析(CVE-2024-0195)

1. 漏洞介绍 SpiderFlow爬虫平台项目中spider-flow-web\src\main\java\org\spiderflow\controller\FunctionController.java文件的FunctionService.saveFunction函数调用了saveFunction函数,该调用了自定义函数validScript,该函数中用户能够控制 functi…

docker:Java通过nginx获取客户端的真实ip地址

问题现象 我们的平台使用Spring Cloud微服务架构,使用Spring Boot构建Java服务,使用google的jib插件打成docker镜像包我们使用docker虚拟化部署,使用docker-compose统一管理所有服务,包括Java服务和nginx等组件我们前后端分离&am…

【JVM】并发的可达性分析详细解释

​ 🍎个人博客:个人主页 🏆个人专栏:JVM ⛳️ 功不唐捐,玉汝于成 ​ 目录 前言 正文 可达性分析的基本原理: 根集合(Root Set): 对象引用关系: 标记…

el-tabs 切换之前进行拦截

tabs标签页在切换的时候进行提示,点击确定执行,点击取消不切换 element文档:before-leave切换标签之前的钩子,若返回 false 或者返回 Promise 且被 reject,则阻止切换。 这里有个坑就是直接return false 不生效&#…

网易云音乐 API

网易云音乐 API 网易云音乐 API灵感来自环境要求安装运行Vercel 部署操作方法 可以在Node.js调用支持 TypeScript使用文档功能特性更新日志单元测试SDK贡献者License 网易云音乐 API 网易云音乐 Node.js API service 灵感来自 disoul/electron-cloud-music darknessomi/musi…

Leetcode2182. 构造限制重复的字符串

Every day a Leetcode 题目来源:2182. 构造限制重复的字符串 解法1:贪心 双指针 我们先用一个长度为 26 的数组 cnt 统计字符串 s 中每个字符出现的次数,然后从大到小枚举字母表的第 i 个字母,每次取出最多 min⁡(cnt[i], re…

微信小程序(七)navigator点击效果

注释很详细&#xff0c;直接上代码 新增内容&#xff1a; 1.默认效果 2.无效果 3.激活效果 源码&#xff1a; index.wxml //如果 <navigator url"/pages/logs/logs">跳转到log页面&#xff08;默认&#xff09; </navigator><navigator url"/pa…

Spring WebSocket实现实时通信的详细教程

简介 WebSocket 是基于TCP/IP协议&#xff0c;独立于HTTP协议的通信协议。WebSocket 连接允许客户端和服务器之间的全双工通信&#xff0c;以便任何一方都可以通过已建立的连接将数据推送到另一方。 我们常用的HTTP是客户端通过「请求-响应」的方式与服务器建立通信的&#x…

Jmeter的文件参数化:CSV数据文件设置和_CSVRead函数

一、CSV数据文件设置 1、简介 CSV数据文件配置&#xff08;CSV Data Set Config&#xff09;可以将CSV文件中数据读入自定义变量中 Jmeter中CSV数据文件配置的界面如下图所示&#xff1a; 其中&#xff1a; &#xff08;1&#xff09;文件编码 文件的编码格式&#xff0c;与所…

Java网络编程——UDP通信原理

一、TCP和UDP概述 传输层通常以TCP和UDP协议来控制端点与端点的通信 TCPUDP协议名称传输控制协议用户数据包协议是否连接面向连接的协议。数据必须要建立连接无连接的协议&#xff0c;每个数据报中都给出完整的地址信息&#xff0c;因此不需要事先建立发送方和接受方的连接是…

200SMART作为智能控制器和智能设备使用

200SMART固件版本在V2.5以上的标准型CPU都支持PROFINET IO控制器和IO设备使用。 S7-200SMART作为智能设备仅支持1个IO控制器&#xff0c;可配置的输入输出存储区都为128个字节&#xff0c;地址范围分别为I(Q)1152.0到I(Q)1279.7;每个CPU支持最多8个PROFINET IO设备&#xff0c…

CentOS 6.10 安装图解

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

【Python】如何快速知道当前python所用库的路径

【背景】 项目一多&#xff0c;python环境就开始互相影响。有时需要快速知道当前的环境用的库&#xff0c;也就是site-pachage是哪个路径下的。 【方法】 打开相应的Python.exe&#xff0c;进入python命令行&#xff0c;输入&#xff1a; import sys print(sys.path)结果类…

canal server初始化源码分析

CanalLauncher类是canal server端启动的入口类&#xff0c;跟随代码进行深入。 在开始之前&#xff0c;我们可以先了解下&#xff0c; canal 配置方式 ManagerCanalInstanceGenerator&#xff1a; 基于manager管理的配置方式&#xff0c;实时感知配置并进行server重启Spring…