k8s-ingress一

Comfigmap:存储数据

Date:

Key:value

挂载的方式,把配置信息传给容器

生产当中的yml文件很长:

有deployment

容器的探针

资源限制

Configmap

存储卷

Service

Ingress

K8s的对外服务,ingress

Service作用体现在两个方面:

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

Service:

NodePort:容器端口---service端口----NodePort,设定了nodePort,每个节点都会有一个端口被打开,30000-32767

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

Loadbalancer:云平台上的一种service机制,云平台一个负载均衡IP地址

Extrenal:域名映射

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

Ingress只要一个或者少量的公网IP或者LB,可以把多个http请求暴露到网外,七层反向代理

Service的service。是一组基于域名和url路径,把一个或者多个请求转发到service的规则

先是七层代理---四层代理-----pod

Ingress        service      nginx

Ingress的组成:

Ingress是一个api对象,通过yaml文件来进行配置,ingress的作用是定义请求如何转发到service的规则,配置模板

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

Ingress-controller:具体的实现反向代理和负载均衡的程序,对ingress定义的规则进行解析,根据ingress的配置规则进行请求的转发,Ingress-controller不是k8s自带的组件功能,ingress-controller一个统称

例如nginx ingress controller,traefik都是Ingress-controller,他们都是开源的

Ingress资源的定义项:

  1. 定义外部流量的规则
  2. 定义服务的暴露方式,主机名,访问路径和其他的选择
  3. 负载均衡(ingress-controller)

ingress-controller的运行方式是pod方式运行在集群当中

Nginx-ingress-controller:

如何下载:

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

Ingress暴露服务的方式:

  1. 方式一:deployment+LoadBalance模式,ingress部署在公有云,ingress配置文件里面会有一个type,type:LoadBalancer. 公有云平台会为个Loadbalance的service创建一个负载均衡器,绑定一个公网地址。通过域名指向这个公网地址就可以实现集群对外暴露

  1. 方式二:daemonset+hostnetwork+nodeSelector模式:

解析:

Daemonset:在每个节点都会创建一个pod

Hostnework:pod共享节点主机的网络命名空间,容器内直接使用节点主机的IP+端口。Pod当中的容器可以直接访问网络资源

nodeSelector:根据标签来选择部署的节点,Nginx-ingress-controller部署的节点

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

核心图:

  1. 方式三:deployment+NodePort 方式

实验演示方式一实现:

1、下载nginx ingress contoller控制器

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

修改一下配置文件:

创建标签:

kubectl get pod -n ingress-nginx -o wide

上传控制器镜像,也就是nginx-ingress-controller的镜像:拖入每个节点

tar -xf ingree.contro-0.30.0.tar.gz

docker load -i ingree.contro-0.30.0.tar 

在controller控制器创建的pod的节点上查看端口

netstat -antp|grep nginx

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      27897/nginx: master

tcp        0      0 0.0.0.0:8181            0.0.0.0:*               LISTEN      27897/nginx: master

tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      27897/nginx: master

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

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

  1. 定义yml脚本,创建pvc、pod、service、ingress

kubectl get pod -o wide

映射

vim /etc/hosts

测试访问

负载均衡已经实现(分别查看三个容器的日志)

结论:endpointIP地址变化

如何实现第二种方式:

如何实现deployment+nodePort (常见模式)

将之前的全部删除

下载nginx ingress contoller控制器

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

将原来的基于daemonset删除ingress删除

下载service-nodeport控制器

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml

定义yml脚本,创建pvc、pod、service、ingress

做映射,端口可以随便写

结构图:

解析图:

三种模式:

Nginx-ingress-controller

Host--->ingress的配置找到pod----controller---请求发送到pod

NodePort----controller---ingress-----service----pod

NodePort暴露端口的方式是最简单的方法,NodePort多了一层NAT,(地址转换)

并发量大的对性能会有一定影响,内部会有NodePort

虚拟主机的方式实现http代理:

创建多个pod、service

pod1、service1

pod2、service2

配置ingress

做映射:

总结:

Ingress的核心组件----nginx-ingress-controller和traefik

他们都是开源的ingress--controller

三种方式:

Deployment+loadbalancer 需要云平台提供一个负载均衡的公网地址,公有云上做(需要钱)

Daemonset+hostnetwork+nodeselector指定节点部署controller,缺点就是和宿主机共享网络,只能是一个controller的pod

Deployment+NodePort最常见,最简单的方式,其中一个nodeport端口,所有的ingress的请求都会转发到NodePort,然后service把流量转发到pod,一个nginx的NodePort,实现访问多个虚拟主机

和nginx类型:

一个端口可以访问多个

例如:80端口,可以访问www.test1.com www.test2.com

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

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

相关文章

YOLOv8算法改进【NO.99】引入最新发布Deformable Convolution v4 (DCNv4)

前 言 YOLO算法改进系列出到这,很多朋友问改进如何选择是最佳的,下面我就根据个人多年的写作发文章以及指导发文章的经验来看,按照优先顺序进行排序讲解YOLO算法改进方法的顺序选择。具体有需求的同学可以私信我沟通: 第一…

C++ mapset

目录 相关知识介绍: 一、set 1、set的介绍 2、set的使用 1. set的模板参数列表 2. set的构造 3. set的迭代器 4. set的容量 5. set修改操作 6. 举例演示 二、multiset 1、multiset的介绍 2、multiset的使用 三、map 1、map的介绍 2、map的使用 1.…

基于SpringBoot Vue家政服务预约平台系统

大家好✌!我是Dwzun。很高兴你能来阅读我,我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结,还为大家分享优质的实战项目,本人在Java项目开发领域有多年的经验,陆续会更新更多优质的Java实战项目&#x…

UE5 C++ Slate独立程序的打包方法

在源码版安装目录内找到已编译通过的xxx.exe,(\Engine\Binaries\Win64\xxx.exe),在需要的位置新建文件夹,拷贝源码版Engine内的Binaries、Content、Shaders文件夹到目标文件夹内,将xxx.exe放入对应位置,删除…

【leetcode】回溯总结

本文内容来自于代码随想录https://www.programmercarl.com/ 思想 一棵树中的纵向遍历结束回到上一层的过程,比如: 这个过程通常回伴随恢复现场的过程。 模板 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集…

如何用H5+CSS+JS写一个简单的招聘网站

大家好,我是猿码叔叔,一个 Java 语言开发者。应网友要求,写一个简单的招聘页面。由于技术原因,页面相对简单,朋友们可以选择性的阅读,如果对您有帮助,也可直接拿去使用,因为接下来除…

AI写的代码比“手工代码”安全性差很多

类似Github Copilot这样的人工智能代码助手能大大提高开发人员的开发效率和生产力,并降低开发技术门槛(不熟悉语言或概念的程序员的进入)。然而,缺乏经验的开发人员可能会轻易相信人工智能助手的输出内容,从而引入安全…

国考省考行测:语句排序2刷题

国考省考行测:语句排序2刷题 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最重要的还是申论和行测,所以大家认真准备吧,我讲一起屡屡申论和行测的重要知识点…

2024/1/20 并查集

目录 并查集关键代码 亲戚 村村通 团伙(新知识) 并查集关键代码 返回祖宗节点路径压缩: int find(int x) {if(f[x]!x) f[x]find(f[x]);return f[x]; } 合并: void make(int x,int y) {int f1find(f[x]);int f2find(f[y]);…

spring boot shardingsphere mybatis-plus druid mysql 搭建mysql数据库读写分离架构

spring boot shardingsphere mybatis-plus druid mysql 搭建mysql数据库读写分离架构 ##关于window mysql主从搭建简单教程 传送门 window mysql5.7 搭建主从同步环境-CSDN博客 ##父pom.xml <?xml version"1.0" encoding"UTF-8"?> <project…

c++ mysql数据库编程(linux系统)

ubuntu下mysql数据库的安装 ubuntu安装mysql&#xff08;图文详解&#xff09;-CSDN博客https://blog.csdn.net/qq_58158950/article/details/135667062?spm1001.2014.3001.5501 项目目录结构 数据库及表结构 public.h //打印错误信息 #ifndef PUBLIC_h #define PUBLIC_H…

SetFitABSA: 基于 SetFit 的少样本、方面级情感分析

SetFitABSA 是一种可以有效从文本中检测特定方面情感的技术。 方面级情感分析 (Aspect-Based Sentiment Analysis&#xff0c;ABSA) 是一种检测文本中特定方面的情感的任务。例如&#xff0c;在“这款手机的屏幕很棒&#xff0c;但电池太小”一句中&#xff0c;分别有“屏幕”和…