Ingress 实战:从零到一构建高可用服务

Ingress 是 Kubernetes 中一种用于控制流量进入集群的资源。它可以为集群内的服务提供统一的访问入口,并提供一些额外的功能,例如:

  • 路由流量到不同的服务

  • 提供基于路径的路由

  • 提供基于主机的路由

  • 提供 TLS 加密

  • 使用身份验证和授权

Ingress 的基本概念

Ingress 由以下几个部分组成:

  • Ingress 规则: 定义如何将流量路由到不同的服务。

  • Backend: 代表一个或多个 Pod 的服务。

  • TLS 配置: 用于配置 Ingress 的 TLS 加密。

  • 身份验证和授权: 用于控制哪些用户可以访问哪些服务。

Ingress 的作用

Ingress 可以提供以下作用:

  • 简化服务访问: Ingress 可以为集群内的服务提供统一的访问入口,无需为每个服务都配置单独的域名和端口号。

  • 提高安全性: Ingress 可以提供 TLS 加密和身份验证和授权,提高服务安全性。

  • 提供负载均衡: Ingress 可以将流量分散到多个服务实例上,实现负载均衡。

使用 Ingress 进行服务发现

可以使用 Ingress 进行服务发现。

示例:将 www.example.com 域名下的所有流量路由到名为 my-service 的服务上的 80 端口,将 api.example.com 域名下的所有流量路由到名为 my-api 的服务上的 8080 端口。

apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  name: my-ingressspec:  rules:  - host: www.example.com    http:      paths:      - path: /        backend:          serviceName: my-service          servicePort: 80  - host: api.example.com    http:      paths:      - path: /        backend:          serviceName: my-api          servicePort: 8080

使用 Ingress 进行负载均衡

可以使用 Ingress 进行负载均衡。

示例:将 www.example.com 域名下的所有流量路由到名为 my-service 的服务上的 80 端口和 8081 端口。​​​​​​​

apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  name: my-ingressspec:  rules:  - host: www.example.com    http:      paths:      - path: /        backend:          serviceName: my-service          servicePort: 80          servicePort: 8081

Ingress 类型

根据 Ingress Spec 配置的不同,Ingress 可以分为以下几种类型:

1. 单服务

单服务类型的 Ingress 仅用于暴露单个服务。

示例:将 https://www.example.com 域名下的所有流量路由到名为 my-service 的服务上的 80 端口。​​​​​​​

apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  name: my-ingressspec:  rules:  - host: www.example.com    http:      paths:      - path: /        backend:          serviceName: my-service          servicePort: 80

2. 多服务

多服务类型的 Ingress 可以用于暴露多个服务。

示例:将 https://www.example.com 域名下的所有流量路由到名为 my-service 的服务上的 80 端口,将 api.example.com 域名下的所有流量路由到名为 my-api 的服务上的 8080 端口。​​​​​​​

apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  name: my-ingressspec:  rules:  - host: www.example.com    http:      paths:      - path: /        backend:          serviceName: my-service          servicePort: 80  - host: api.example.com    http:      paths:      - path: /        backend:          serviceName: my-api          servicePort: 8080

3.虚拟主机

虚拟主机类型的 Ingress 可以用于为不同的域名或路径提供不同的服务。

示例:将 https://www.example.com 域名下的所有流量路由到名为 my-service 的服务上的 80 端口,将 api.example.com 域名下的所有流量路由到名为 my-api 的服务上的 8080 端口,将 blog.example.com 域名下的所有流量路由到名为 my-blog 的服务上的 8081 端口。​​​​​​​

apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  name: my-ingressspec:  rules:  - host: www.example.com    http:      paths:      - path: /        backend:          serviceName: my-service          servicePort: 80  - host: api.example.com    http:      paths:      - path: /        backend:          serviceName: my-api          servicePort: 8080  - host: blog.example.com    http:      paths:      - path: /        backend:          serviceName: my-blog          servicePort: 8081

Ingress 工作原理详解

1. 请求处理流程

  1. 外部客户端向 Ingress 发送请求,请求包含域名、路径、主机头等信息。

  2. Ingress Controller 监听来自外部的请求。

  3. Ingress Controller 根据请求的域名、路径、主机头等信息,匹配相应的 Ingress 规则。

  4. Ingress Controller 将请求转发到匹配的 Backend 服务。

  5. Backend 服务处理请求并返回响应。

  6. Ingress Controller 将 Backend 服务的响应返回给外部客户端。

2. 匹配规则

Ingress 规则用于匹配请求,并将其路由到相应的 Backend 服务。Ingress 规则可以根据以下条件进行匹配:

  • 域名: 请求的域名必须与 Ingress 规则中的域名匹配。

  • 路径: 请求的路径必须与 Ingress 规则中的路径匹配。

  • 主机头: 请求的主机头必须与 Ingress 规则中的主机头匹配。

3. 路由策略

Ingress 可以使用以下路由策略:

  • 基于路径的路由: 根据请求的路径将流量路由到不同的 Backend 服务。

  • 基于主机的路由: 根据请求的主机头将流量路由到不同的 Backend 服务。

  • 负载均衡: 将流量分散到多个 Backend 服务实例上。

4. TLS 加密

Ingress 可以配置 TLS 加密,为 Ingress 和 Backend 服务之间的通信提供安全性。

    • Ingress TLS 加密配置

    可以使用 kubectl 命令配置 Ingress 的 TLS 加密。

    示例:将为 https://www.example.com 域名下的所有流量启用 TLS 加密。​​​​​​​

apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  name: my-ingressspec:  tls:  - hosts:    - www.example.com    secretName: my-tls-secret
    • Ingress TLS 加密工作原理

      1. 外部客户端向 Ingress 发送请求。

      2. Ingress Controller 监听来自外部的请求。

      3. Ingress Controller 使用 TLS 加密与外部客户端进行通信。

      4. Ingress Controller 将请求转发到 Backend 服务。

      5. Backend 服务使用 TLS 加密与 Ingress Controller 进行通信。

      6. Backend 服务处理请求并返回响应。

      7. Ingress Controller 使用 TLS 加密将 Backend 服务的响应返回给外部客户端。

    • Ingress TLS 加密注意事项

      • 需要为 Ingress 配置 TLS 证书和密钥。

      • 需要为 Backend 服务配置 TLS 证书和密钥。

      • 需要确保 Ingress Controller 和 Backend 服务都支持 TLS 加密。

5. Ingress 身份验证和授权

Ingress 可以使用身份验证和授权来控制哪些用户可以访问哪些服务。

  • 身份验证

    身份验证用于确定用户身份。常用的身份验证方法有:

    • 基本身份验证: 使用用户名和密码进行身份验证。

    • OIDC: 使用 OpenID Connect 进行身份验证。

    • LDAP: 使用 LDAP 进行身份验证。

  • 授权

    授权用于确定用户可以访问哪些资源。常用的授权方法有:

    • RBAC: 使用 Kubernetes RBAC 进行授权。

    • ABAC: 使用 Attribute-Based Access Control 进行授权。

  • Ingress 身份验证和授权配置

可以使用 kubectl 命令配置 Ingress 的身份验证和授权。

示例:将使用基本身份验证来控制对服务的访问。

apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  name: my-ingressspec:  auth:    - type: basic      basic:        realm: my-realm        secretName: my-auth-secret
    • Ingress 身份验证和授权工作原理

      1. 外部客户端向 Ingress 发送请求。

      2. Ingress Controller 根据 Ingress 规则中的配置,对请求进行身份验证和授权。

      3. 如果身份验证和授权成功,Ingress Controller 将请求转发到 Backend 服务。

      4. 如果身份验证或授权失败,Ingress Controller 将返回错误响应。

    • Ingress 身份验证和授权注意事项

      • 需要为 Ingress 配置身份验证和授权策略。

      • 需要为 Backend 服务配置身份验证和授权策略。

      • 需要确保 Ingress Controller 和 Backend 服务都支持身份验证和授权。

6.Ingress Controller 实现原理

Ingress Controller 是负责处理 Ingress 规则并将其付诸实践的组件。常用的 Ingress Controller 有 Nginx Ingress Controller、HAProxy Ingress Controller 等。

  • Nginx Ingress Controller 实现原理

Nginx Ingress Controller 是使用 Nginx 作为 Ingress Controller 的实现。

  • Nginx Ingress Controller 工作原理

  1. Nginx Ingress Controller 监听来自外部的请求。

  2. Nginx Ingress Controller 根据 Ingress 规则中的配置,将请求路由到相应的 Backend 服务。

  3. Nginx Ingress Controller 可以提供以下功能:

    • 基于路径的路由

    • 基于主机的路由

    • 负载均衡

    • TLS 加密

    • 身份验证和授权

  • HAProxy Ingress Controller 实现原理

HAProxy Ingress Controller 是使用 HAProxy 作为 Ingress Controller 的实现。

  • HAProxy Ingress Controller 工作原理

  1. HAProxy Ingress Controller 监听来自外部的请求。

  2. HAProxy Ingress Controller 根据 Ingress 规则中的配置,将请求路由到相应的 Backend 服务。

  3. HAProxy Ingress Controller 可以提供以下功能:

    • 基于路径的路由

    • 基于主机的路由

    • 负载均衡

    • TLS 加密

    • 身份验证和授权

7. Ingress 的优势

  • 简化服务访问: Ingress 可以为集群内的服务提供统一的访问入口,无需为每个服务都配置单独的域名和端口号。

  • 提高安全性: Ingress 可以提供 TLS 加密和身份验证和授权,提高服务安全性。

  • 提供负载均衡: Ingress 可以将流量分散到多个服务实例上,实现负载均衡。

  • 提高灵活性: Ingress 可以根据需要进行灵活配置,满足不同的需求。

8. Ingress 的局限性

  • Ingress 只能路由 HTTP 和 HTTPS 流量。

  • Ingress 无法控制服务之间的流量。

  • Ingress 可能增加服务的复杂性。

欢迎关注公众号:职谷智享,获取更多 Kubernetes 相关技术文章和资讯。

希望本文能够帮助您深入理解 Ingress,并将其应用到您的实际工作中。

相信通过您的学习和实践,您一定能够成为 Kubernetes 的高手!

关注我,我们一起学习更多知识,带你了解更多职场信息内容.

想要了解更多技术文章请关注公众号“职谷智享”,关注后回复关键字【秒杀】可以领取秒杀系统学习资料

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL: 触发器/存储过程/游标的操作

目录 触发器存储过程创建存储过程修改存储过程删除存储过程执行存储过程 游标待续、更新中 触发器 待更新存储过程 定义 是一组TSQL语句的预编译集合,能实现特定的功能 是一种独立的数据库对象,在服务器上创建和运行 类似于编程语言中的过程或函数分类…

SublimeText4 安装

Sublime Text 可以编写html,css,js,php等等,是一个轻量、简洁、高效、跨平台的编辑器。 图1:SublimeText官网 Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件&#…

Java学习记录(十九)多线程(一)

线程 线程是操作系统能进行调度的最小单位,他是被包含在进程中的,一个运行的软件可以看作为一个进程,而在该软件中执行的各种功能自身可以理解为一个线程,可以理解为在软件中互相独立又可以同时进行的功能,他是进程中…

js视频上传的方法

一、视频上传于图片上传类似他们的上传方法一样。路径不同标签不同; 二、直接上效果 三、直接上代码 // // 上传图片 let urls "https://wwz.jingyi.icu/"; let a $("form img") // console.log(a);function fl() {let read document.getE…

计算机网络面经八股-解释一下HTTP长连接和短连接?

在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图…

探索制氮机在农产品保鲜中的应用方式

在现代生活中,农产品保鲜成为老生常谈的话题,水果数次厂商总是在为如何使水果蔬菜能够保存时间长一点而发愁,而制氮机的出现则解决了这一难题,为农产品保鲜技术带来了革命性的变革。本期恒业通小编和您一起了解制氮机在水果,蔬菜保…

k8s+wordpress+zabbix+elastic+filebeat+kibana服务搭建以及测试

一,环境:docker,k8s,zabbix,以及搭建worpdress,elasticsearch,filebeat,kibana 二,主机分配: 名称host详述个人博客3192.168.142.133 搭配mysql8.0.36的数据…

ubuntu安装并使用Anaconda

0、说明 对应着 Python 有 2.x 版本和 3.x 版本,Anaconda 也有 Anaconda2 以及 Anaconda 3 两个版本,考虑其流行度,一般谈及 Anaconda 时,默认为 Anaconda3。本人使用的ubuntu20.04。 1、Anaconda 简介 Anaconda 是一个用于科学…

【大模型API调用初尝试二】星火认知大模型 百度千帆大模型

大模型API调用初尝试二 科大讯飞—星火认知大模型单论会话调用多轮会话调用 百度—千帆大模型获取access_token单轮会话多轮会话 科大讯飞—星火认知大模型 星火认知大模型是科大讯飞开发的,直接使用可以点击星火认知大模型,要调用API的话在讯飞开发平台…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的交通信号灯识别系统(深度学习+UI界面+训练数据集+Python代码)

摘要:本研究详细介绍了一种采用深度学习技术的交通信号灯识别系统,该系统集成了最新的YOLOv8算法,并与YOLOv7、YOLOv6、YOLOv5等早期算法进行了性能评估对比。该系统能够在各种媒介——包括图像、视频文件、实时视频流及批量文件中——准确地…

Xilinx 7系列FPGA的配置流程

目录 1.4配置流程 1.4.1 设备上电 ​编辑1.4.2 清除配置寄存器 1.4.3 采样模式引脚 1.4.4 同步 ​编辑1.4.5 检测设备ID ​编辑1.4.6 加载配置数据 1.4.7 CRC校验 1.4.8 启动序列 1.4配置流程 对于所有配置模式,7系列的基本配置流程都是相同的&…

算法练习:二分查找

目录 1. 朴素二分查找2. 在排序数组中查找元素的第一个和最后一个位置3. 搜索插入位置4. x的平方根5. 山脉数组的峰值索引6. 寻找峰值7. 寻找旋转排序数组中的最小值8. 点名 1. 朴素二分查找 题目信息: 题目链接: 二分查找二分查找的使用前提为数据具有&…

leetcode精选算法刷题训练篇 之 链表OJ(包含题目链接以及详细讲解)

好好学习,giao哥给你补🥚 1、移除链表元素 难度等级:⭐ 题目链接:移除链表元素 2、链表的中间节点 难度等级:⭐⭐ 题目链接:链表的中间节点 3、反转链表 难度等级:⭐⭐⭐ 题目链接&#x…

C#版开源免费的Bouncy Castle密码库

前言 今天大姚给大家分享一款C#版开源、免费的Bouncy Castle密码库:BouncyCastle。 项目介绍 BouncyCastle是一款C#版开源、免费的Bouncy Castle密码库,开发人员可以通过该项目在他们的 C# 应用程序中使用 Bouncy Castle 提供的各种密码学功能&#x…

git提交代码描述时如何换行(更新时间24/3/12)

问题复现(信心满满使用转义字符换行) 解决方法: 写多个-m字符串的结构可以实现自动换行 注意空格 git commit -m"第一行描述" -m"第二行描述" 效果演示:(强迫症福利)

近700所高校,2024年预算出炉!

办学经费,是高校发展的核心与基石。学校人才培养、科学研究等各项事业的开展,都有赖于教育经费的支持。 近日,全国已有北京、上海、江苏、浙江等20多个省(市、自治区)的高校对外公布了2024年预算经费,小编…

L2-035 完全二叉树的层序遍历(Python)

L2-035 完全二叉树的层序遍历 分数 25 全屏浏览 切换布局 作者 陈越 单位 浙江大学 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度…

深入联合文件系统

Union File System(联合文件系统,UnionFS)是一种轻量级的高性能分层文件系统,它支持将文件系统中的修改信息作为一次提交,并层层叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,应用看到的…

C# 8.0+版本项目 string不可为空

1.在某一次新建项目的时候发现,新建的项目,写的测试接口,接口的入参有string的参数, 但是调用接口的时候string的参数没有传报了400,很奇怪,也没有语法错误之类的。 2.解决办法 在项目上右键->属性->…

计算机毕业设计-springboot+vue前后端分离电竞社交平台管理系统部分成果分享

4.5系统结构设计 本系统使用的角色主要有系统管理员、顾客、接单员,本系统为后台管理系统,游客用户可以经过账号注册,管理员审核通过后,用账号密码登录系统,查看后台首页,模块管理(顾客信息&am…