k8s-ingress一

news/2024/7/4 7:44:13 标签: kubernetes, 容器, 云原生

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.niftyadmin.cn/n/5337868.html

相关文章

ARM安装与项目结构

1. 安装环境 参考E:\peixunQianrushi\arm\ziliao\FS4412新版(学生资料)\环境相关资料 这边建议全部默认路径 安装注意事项: 1、在接下来的安装过程中,对于使用win10、win8的操作系统的用户,所有的安装请均以管理员身份…

第6章 继承与构造

继承是C类型演化的重要机制,在保留原有类的属性和行为的基础上,派生出的新类可以有某种程度的变异。 接受成员的新类称为派生类; 提供成员的类称为基类;基类是对若干个派生类的抽象,提取了派生类的公共特征&am…

光伏发电系统的MPPT控制策略研究

摘 要 面对全球日趋严重的能源危机问题,可再生能源的开发和利用得到了人们的高度重 视。其中辐射到地球太阳能资源是十分富饶的,绿色清洁的太阳能不会危害我们的生存 环境,因而受到了人们的广泛利用。光伏发电作为当前利用太阳能的主要方式…

『C++成长记』模板

🔥博客主页:小王又困了 📚系列专栏:C 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、泛型编程 二、函数模板 📒2.1函数模板概念 📒2.2函数…

网络逻辑示意图工具

现代网络容纳了来自不同供应商的大量设备,支持一系列新技术,并跨越了分布在多个位置的边界,随着网络变得越来越复杂,网络管理员发现越来越难以跟踪网络领域的所有当代进步和发展,这使得网络管理比以往任何时候都更具挑…

【Java】HttpServlet类简单方法和请求显示

1、HttpServlet类简介🍀 Servlet类中常见的三个类有:☑️HttpServlet类,☑️HttpServletRequest类,☑️HttpResponse类 🐬其中,HttpServlet首先必须读取Http请求的内容。Servlet容器负责创建HttpServlet对…

算法 - 二分法 / 双指针 / 三指针 / 滑动窗口

文章目录 🍺 二分法🍻 旋转数组🥂 33. 搜索旋转排序数组 [旋转数组] [目标值] (二分法) 🍻 元素边界🥂 34. 在排序数组中查找元素的第一个和最后一个位置 [有序数组] > [元素边界] > (二分法)🥂 81. …

ubuntu双屏扩展

nvidia 驱动安装 安装依赖 sudo apt-get update #更新软件列表 sudo apt-get install g gcc make build-essential libc6-dev禁用nouveau sudo vim /etc/modprobe.d/blacklist.conf #在最后添加如下两行:blacklist nouveauoptions nouveau modeset0 #然后更新…