k8s之对外服务ingress

一、service

1、service作用

①集群内部:不断跟踪pod的变化,不断更新endpoint中的pod对象,基于pod的IP地址不断变化的一种服务发现机制(endpoint存储最终对外提供服务的IP地址和端口)

②集群外部:类似负载均衡器,不涉及转发url(不涉及http和https),把流量(IP地址+端口)转发到pod中

2service类型

(1)nodeport:容器端口和service端口做映射,设定nodeport后,每个节点都会有一个端口被打开(30000-32767),通过IP+端口实现负载均衡

(2)loadbalance:云平台上的service服务,由云平台提供负载均衡的IP地址

(3)extrenalname:基于域名映射

ingress基于域名进行映射,将url转发到service,再由service把请求转发到每一个pod

二、ingress

1、定义

ingress只要一个或少量的公网IP或者loadbalance,可以把多个http请求暴露到外网。ingress是七层反向代理,可以理解为service的service,是一组基于域名和URL路径把一个或多个请求转发到service的规则

七层代理ingress——四层代理service——pod

客户端发出请求,先由ingress七层代理转发到service,再由service四层代理转发到pod【面试】

2、ingress组成

(1)内部结构:ingress是一个api对象,通过yaml文件来进行配置。ingress的作用是定义请求如何转发到service的规则,相当于一个配置模板,ingress通过http和https暴露集群内部的service,给service提供一个外部的url、负载均衡、ssl/tls(https)功能,实现一个基于域名的负载均衡

(2)ingress-controller:由这个组件来具体实现反向代理和负载均衡,以及对ingress定义的规则进行解析,根据ingress配置来进行请求的转发。ingress-controller不是k8s自带的组件,只是一个统称,凡是能实现上述功能的都称为ingress-controller

1)实现ingress-controller功能的开源工具

①nginx ingress contoller

②traefik

2)ingress-controller资源定义项

①定义外部流量的路由规则

②定义服务的暴露方式、主机名、访问路径和其他选项

③负载均衡(由ingress-contrller实现)

3、下载nginx ingress contoller

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

nginx ingress contoller以pod方式运行在集群中

4、ingress暴露服务的方式

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

(2)DaemonSet+hostnetwork+nodeSelector模式:七层代理。DaemonSet每个节点都会创建一个pod,hostnetwork表示pod共享节点主机的网络命名空间,容器内直接使用节点主机的IP地址+端口,pod中的容器可以直接访问主机上的网络资源;nodeSelector根据标签选择nginx ingress contoller部署的节点

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

(3)deployment+NodePort模式:七层+四层代理

ingress标签匹配ingress-nodeport标签,ingress-nodeport匹配service标签,service匹配pod标签

ingress之DaemonSet+hostnetwork+nodeSelector模式暴露服务实验

1、下载nginx ingress contoller控制器

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

nginx ingress contoller以pod方式运行在集群中

2、设置节点标签3、每个节点上传控制器镜像并解压

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

netstat -antp|grep nginx

8181端口

nginx-controller默认配置的一个bachend,反向代理的端口,所有请求中,只要是不符合ingress配置的请求会转发到8181,相当于一个error页面

5、、创建pvc、pod、service、ingress

kubectl apply -f service-nginx.yaml

6、域名映射

7、测试访问

8、测试删除一个pod查看endpoind是否发生变化

结论:endpointIP地址变化

ingress之deployment+NodePort模式暴露服务实验

1、下载nginx ingress contoller控制器

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

nginx ingress contoller以pod方式运行在集群中

2、下载service-nodeport控制器

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

nodeport会在每个节点上创建一个端口

3、创建pv、pod、service、ingress4、域名映射

5、访问测试

基于deployment+NodePort模式的一个ingress可以访问多个主机实验

1、下载nginx ingress contoller控制器

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

nginx ingress contoller以pod方式运行在集群中

2、下载service-nodeport控制器

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

3、创建多个pod、service

pod1、service1

pod2、service2

4、创建多个ingress

5、主机映射

基于DaemonSet+hostnetwork+nodeSelector模式的一个ingress可以访问多个主机实验

1、下载nginx ingress contoller控制器

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

nginx ingress contoller以pod方式运行在集群中

2、设置节点标签

3、每个节点上传控制器镜像并解压

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

netstat -antp|grep nginx

8181端口

nginx-controller默认配置的一个bachend,反向代理的端口,所有请求中,只要是不符合ingress配置的请求会转发到8181,相当于一个error页面

5、创建多个pod、service

pod1、service1

pod2、service2

6、创建多个ingress

7、主机映射

8、测试

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

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

相关文章

【Java数据结构】03-二叉树,树和森林

4 二叉树、树和森林 重点章节,在选择,填空,综合中都有考察到。 4.1 掌握二叉树、树和森林的定义以及它们之间的异同点 1. 二叉树(Binary Tree) 定义: 二叉树是一种特殊的树结构,其中每个节点…

【Filament】材质系统

1 前言 本文主要介绍 Filament 的材质系统,官方介绍详见 → Filament Materials Guide。材质系统中会涉及到一些空间和变换的知识点,可以参考:【Unity3D】空间和变换、【Unity3D】Shader常量、变量、结构体、函数、【OpenGL ES】MVP矩阵变换、…

Java、C#、Python间的Battle

一、编译原理和开发效率 编译速度: C# (约大于等于) JAVA > Python python的编译原理 前提:python 3.6 python不会直接编译源码 而是把源码直接扔给解释器,这种方式 使得python非常灵活,让它的开发效…

Windows 下使用C#开启蓝牙(未解决的坑)

需求 当程序检测到蓝牙未打开时需要程序自动将W10的蓝牙开启。 资料 Turn on/off Bluetooth radio/adapter from cmd/powershell in Windows 10 - Super User 上的这个连接是通过powershell 开启蓝牙具体代码如下 [CmdletBinding()] Param ([Parameter(Mandatory$true)][V…

【MCAL】MCU模块详解

目录 前言 正文 1. MCU模块介绍 2. MCU依赖的模块 3. MCU模块提供服务 3.1 时钟的初始化 3.2 MCU模式的配置 3.3 MCU软件复位功能 3.4 RAM的初始化 4.MCU重要数据类型 4.1 Mcu_ResetType 4.2 Mcu_ModeType 5. MCU重要API 5.1 Mcu_Init 5.2 Mcu_InitClock 5.3 M…

Net Core Ocelot+Consul实现网关、服务注册、服务发现

什么是Ocelot? Ocelot是一个开源的ASP.NET Core微服务网关,它提供了API网关所需的所有功能,如路由、认证、限流、监控等。 Ocelot是一个简单、灵活且功能强大的API网关,它可以与现有的服务集成,并帮助您保护、监控和扩展您的微…

PyTorch项目源码学习(3)——Module类初步学习

torch.nn.Module Module类是用户使用torch来自定义网络模型的基础,Module的设计要求包括低耦合性,高模块化等等。一般来说,计算图上所有的子图都可以是Module的子类,包括卷积,激活函数,损失函数节点以及相…

【MySQL】管理用户

DCL-管理用户 查询用户 use mysql; select * from user;创建用户 create user 用户名主机名 identified by 密码;修改用户密码 alter user 用户名主机名 identidied with mysql_native_password by 新密码;删除用户 drop user 用户名主机名;创建用户test,只能够…

Demo: 实现PDF加水印以及自定义水印样式

实现PDF加水印以及自定义水印样式 <template><div><button click"previewHandle">预览</button><button click"downFileHandle">下载</button><el-input v-model"watermarkText" /><el-input v-mo…

blender 导入到 Marvelous Designer

1&#xff09; 将模型的所有部分合并为一个单独的mesh 2&#xff09; 先调整计量单位&#xff1a; 3&#xff09;等比缩放&#xff0c;身高调整到180cm左右 4&#xff09;应用当前scale 首先&#xff0c;选中你要修改的物体&#xff0c;然后按下Ctrl-A键&#xff0c;打开应用…

Ubuntu 在更新内核后 Virtual Box 不能为虚拟电脑打开一个新任务

前言 我也不知道啥时候自动给我更新了内核&#xff0c;重启电脑之后我的内核升级成6.5.0-14-generic&#xff0c;导致Virtual Box无法找到内核文件。 解决方法 方法1 sudo apt update sudo apt install linux-headers-generic build-essential dkms sudo apt remove virtua…

清华大学操作系统rCore实验-第零章-Lab环境搭建

清华大学操作系统实验—rCore环境搭建 零、前言一、VirtualBox二、Kali Linux三、C四、Rust五、QEMU 模拟器安装六、Hello,world测试 零、前言 一直想动手写一个操作系统&#xff0c;但是没有能力从零开始写&#xff0c;故跟着清华大学操作系统实验&#xff0c;完成这个目标&a…