kubernets基础-ingress详细介绍

news2024/10/4 6:18:53

文章目录

    • 什么是Ingress
      • Ingress详细说明
      • Ingress示例
    • Ingress控制器
      • Ingress控制器的工作原理
      • Ingress控制器的特点
      • 常见的Ingress控制器
    • Ingress关联Ingress控制器
      • 一、Ingress资源对象
      • 二、Ingress控制器
      • 三、Ingress与Ingress控制器的关联方式
      • 四、注意事项
    • 多实例部署
      • 一、Ingress多实例配置概述
      • 二、配置关键启动参数
      • 三、创建IngressClass资源
      • 四、创建Ingress资源并指定IngressClass
      • 五、验证配置
      • 六、注意事项
    • 集群外部访问Ingress
      • 一、部署Ingress控制器
      • 二、创建Ingress资源
      • 三、配置域名解析
      • 四、验证访问
      • 示例
    • Ingress访问service

什么是Ingress

Ingress是Kubernetes中一种对集群中服务的外部访问进行管理的API对象,它典型的访问方式是HTTP和HTTPS。Ingress可以提供负载均衡、SSL和基于名称的虚拟托管等功能。不过,要实现Ingress的功能,必须部署一个Ingress控制器(如ingress-nginx)来满足Ingress资源的要求,仅创建Ingress资源本身是无效的。

Ingress公开了从集群外部到集群内部服务的HTTP和HTTPS路由,这些路由由Ingress资源上定义的规则来控制。可以将Ingress配置为提供服务外部可访问的URL、负载均衡流量、SSL/TLS,以及基于名称的虚拟主机等功能。
Ingress概念图

以下是Ingress的详细说明及示例:

Ingress详细说明

  1. 工作原理
    Ingress控制器通常负责通过负载均衡器来实现Ingress,它也可以配置边缘路由器或其他前端来帮助处理流量。Ingress不会公开任意端口或协议,如果需要将HTTP和HTTPS以外的服务公开到Internet,通常使用Service.Type=NodePort或Service.Type=LoadBalancer类型的服务。

  2. 功能特点

    • 负载均衡:Ingress可以根据定义的规则将外部流量分发到集群内部的不同服务上。
    • SSL/TLS:Ingress可以配置SSL/TLS证书,为外部访问提供加密的HTTPS连接。
    • 基于名称的虚拟托管:Ingress支持将不同的域名或URL路径映射到集群内部的不同服务上,实现基于名称的虚拟托管。
  3. Ingress规则
    Ingress规则定义了如何将外部流量路由到集群内部的服务。规则可以基于域名、URL路径、请求头等信息进行匹配,并将匹配的流量转发到指定的后端服务。

Ingress示例

以下是一个使用Nginx Ingress控制器的Ingress资源示例:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: www.example.com
    http:
      paths:
      - path: /service1(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80
      - path: /service2(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: service2
            port:
              number: 80

在这个示例中,定义了一个名为my-ingress的Ingress资源,它有两个规则:

  1. 当访问www.example.com/service1时,流量将被转发到名为service1的后端服务上。
  2. 当访问www.example.com/service2时,流量将被转发到名为service2的后端服务上。

注意:nginx.ingress.kubernetes.io/rewrite-target注解用于重写目标URL,/$2表示将匹配到的第二个捕获组作为重写后的目标URL。在这个示例中,由于路径中使用了正则表达式捕获组,因此需要进行重写以确保请求能够正确转发到后端服务。

另外,pathType字段指定了路径的匹配类型,这里使用了Prefix类型,表示基于路径前缀进行匹配。

这个示例展示了如何使用Ingress资源来定义外部流量到集群内部服务的路由规则,并实现了基于域名的虚拟托管。

Ingress控制器

Ingress控制器是Kubernetes集群中的一个组件,它负责实现Ingress资源定义的路由规则Ingress资源本身只是定义了一系列规则,指明了外部流量如何被转发到集群内的服务上,但实际流量转发工作是由Ingress控制器来完成的。

Ingress控制器的工作原理

  1. 监听Ingress资源变化:Ingress控制器通过Kubernetes的API服务器监听集群中Ingress资源的变化。当Ingress资源被创建、更新或删除时,Ingress控制器会感知到这些变化。

  2. 解析Ingress规则:Ingress控制器读取Ingress资源中定义的规则,这些规则通常包括域名、路径和后端服务等信息。Ingress控制器会根据这些规则生成相应的配置。

  3. 生成配置并应用:Ingress控制器根据解析后的规则生成配置,这些配置可能是Nginx、HAProxy或其他反向代理软件的配置文件。然后,Ingress控制器将这些配置应用到其管理的反向代理实例上。

  4. 流量转发:当外部流量到达Ingress控制器时,它会根据生成的配置将流量转发到相应的后端服务上。这通常涉及HTTP或HTTPS协议的解析、路由决策和负载均衡等过程。

Ingress控制器的特点

  • 可扩展性:Ingress控制器可以支持多种反向代理软件,如Nginx、HAProxy等,从而提供了灵活的配置选项和性能优化空间。

  • 动态更新:由于Ingress控制器通过Kubernetes的API服务器监听Ingress资源的变化,因此它可以动态地更新配置而无需重启服务。

  • 安全性:Ingress控制器可以配置SSL/TLS证书,为外部流量提供加密传输。此外,它还可以实现身份认证和授权等功能,增强集群的安全性。

  • 高可用性:Ingress控制器通常部署为多个副本,以确保在单个节点故障时仍能继续提供服务。

常见的Ingress控制器

  • Nginx Ingress Controller:这是最常用的Ingress控制器之一,它基于Nginx反向代理软件构建,提供了高性能和丰富的配置选项。

  • Traefik Ingress Controller:Traefik是一个易于使用的Ingress控制器,它支持多种反向代理后端,并提供了丰富的监控和日志功能。

  • HAProxy Ingress Controller:基于HAProxy构建的Ingress控制器,提供了高性能和可靠性。

  • Istio Ingress Gateway:Istio是一个服务网格解决方案,它提供了自己的Ingress Gateway组件,用于处理外部流量并将其转发到集群内的服务上。

总的来说,Ingress控制器是Kubernetes集群中处理外部流量访问的关键组件之一。通过配置Ingress资源和Ingress控制器,可以轻松地实现复杂的路由规则和流量管理策略。

Ingress关联Ingress控制器

在Kubernetes集群中,Ingress与Ingress控制器的关联是通过Ingress资源对象与Ingress控制器之间的协作实现的。以下详细解释Ingress如何关联Ingress控制器:

一、Ingress资源对象

Ingress资源对象是Kubernetes中的一个API对象,它定义了外部用户如何访问集群内部运行的服务。Ingress资源对象通常包含以下关键信息:

  • 规则(Rules):指定了哪些域名和路径应该被转发到哪些后端服务上。
  • 后端服务(Backend Services):定义了Ingress规则所指向的具体服务,通常包括服务名称和端口号。

二、Ingress控制器

Ingress控制器是一个运行在Kubernetes集群中的组件,它负责监听Ingress资源对象的变化,并根据这些变化动态地更新其内部的配置,以实现流量的路由和转发。Ingress控制器通常具备以下功能:

  • 监听Ingress资源变化:通过Kubernetes的API服务器实时感知Ingress资源对象的变化。
  • 解析Ingress规则:读取Ingress资源对象中定义的规则,并解析为可执行的配置。
  • 流量转发:根据解析后的规则,将外部流量转发到相应的后端服务上。

三、Ingress与Ingress控制器的关联方式

  1. 定义Ingress资源对象
    • 在Kubernetes集群中,首先需要定义一个Ingress资源对象,该对象包含了外部访问集群内部服务的规则。
    • 可以通过YAML文件或其他方式定义Ingress资源对象,并使用kubectl apply命令将其应用到集群中。
  2. 部署Ingress控制器
    • 在Kubernetes集群中部署Ingress控制器,这通常是通过部署一个Pod或DaemonSet来实现的。
    • Ingress控制器会监听集群中Ingress资源对象的变化,并根据这些变化动态地更新其配置。
  3. 自动关联
    • 一旦Ingress资源对象和Ingress控制器都被正确部署到Kubernetes集群中,它们之间就会自动建立关联。
    • Ingress控制器会根据Ingress资源对象中定义的规则,将外部流量转发到相应的后端服务上。
  4. 验证配置
    • 为了确保Ingress和Ingress控制器之间的关联正确无误,可以通过查看Ingress控制器的日志或使用kubectl get ingress命令来验证Ingress资源对象的状态和配置。

四、注意事项

  • Ingress控制器的实现和功能可能会因所使用的具体控制器(如Nginx Ingress Controller、Traefik Ingress Controller等)而有所不同。因此,在部署和使用Ingress时,需要参考相应控制器的文档和配置指南。
  • Ingress控制器通常需要配置为使用NodePort、LoadBalancer或IngressClass等类型的服务来暴露外部访问的入口点。这取决于集群的部署环境和网络配置。

综上所述,Ingress与Ingress控制器的关联是通过在Kubernetes集群中定义Ingress资源对象并部署Ingress控制器来实现的。它们之间的协作使得外部用户可以通过定义的规则和路径访问集群内部的服务。

多实例部署

在Kubernetes(K8s)集群中配置Ingress多实例,通常是为了实现更复杂的路由规则、负载均衡或提供不同的服务访问入口。以下是在K8s中配置Ingress多实例的详细步骤:

一、Ingress多实例配置概述

Ingress是K8s中用于管理外部访问集群内部服务的资源对象。通过Ingress,可以配置基于主机名和路径的路由规则,将外部请求定向到集群内部的服务。为了实现Ingress多实例,需要为每个实例配置唯一的标识,并确保它们不会相互干扰。

二、配置关键启动参数

  1. 不同命名空间下的多实例

    • 如果要在不同的命名空间下部署多个Ingress实例,可以通过设置controller-classingress-class参数来区分它们。这些参数在Ingress控制器的启动参数中指定,并确保它们的唯一性。
    • 示例配置(YAML格式):
    args:
      - /nginx-ingress-controller
      - --controller-class=k8s.io/prod-internal # 控制器类,必须唯一
      - --ingress-class=prod-internal # ingress类,必须唯一
    
  2. 相同命名空间下的多实例

    • 如果需要在同一个命名空间下部署多个Ingress实例,除了设置controller-classingress-class参数外,还需要设置election-id参数来确保选举的唯一性。
    • 示例配置(YAML格式):
    args:
      - /nginx-ingress-controller
      - --election-id=ingress-controller-leader-prod-internal # 选举ID,必须唯一
      - --controller-class=k8s.io/prod-internal # 控制器类,必须唯一
      - --ingress-class=prod-internal # ingress类,必须唯一
    

三、创建IngressClass资源

为每个Ingress实例创建一个唯一的IngressClass资源。IngressClass资源定义了Ingress控制器的相关信息,包括控制器名称和参数等。

示例配置(YAML格式):

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: prod-internal
spec:
  controller: k8s.io/prod-internal

四、创建Ingress资源并指定IngressClass

在创建Ingress资源时,通过ingressClassName字段指定要使用的IngressClass。这样,Ingress资源就会由对应的Ingress控制器管理。

示例配置(YAML格式):

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test
  namespace: prod
spec:
  ingressClassName: prod-internal
  rules:
  - host: "foo.bar.com"
    http:
      paths:
      - path: /test
        pathType: Prefix
        backend:
          service:
            name: xwd-social
            port:
              number: 80

五、验证配置

  1. 检查Ingress和IngressClass

    • 使用kubectl get ingresskubectl get ingressclass命令检查Ingress和IngressClass资源是否已正确创建。
  2. 访问测试

    • 根据配置的域名和路径访问Ingress服务,验证请求是否正确路由到后端服务。

六、注意事项

  1. 唯一性:确保每个Ingress实例的controller-classingress-class和(在相同命名空间下)election-id参数是唯一的,以避免冲突。
  2. 资源隔离:如果可能的话,将不同的Ingress实例部署在不同的命名空间中,以减少配置上的复杂性。
  3. 监控和日志:为Ingress控制器配置监控和日志记录,以便及时发现和解决问题。

通过以上步骤,您可以在K8s集群中成功配置多个Ingress实例,实现更复杂的路由规则和负载均衡策略。

集群外部访问Ingress

在Kubernetes集群中,Ingress提供了一种管理外部访问流量的方式,允许将外部HTTP和HTTPS流量路由到集群内部的服务。要使集群外部能够访问Ingress,通常需要按照以下步骤进行配置:

一、部署Ingress控制器

Ingress控制器实际实现Ingress资源定义的组件,它负责监听Ingress资源的变化,并根据定义更新负载均衡器或反向代理服务器的配置。常见的Ingress控制器包括Nginx Ingress Controller、Traefik等。

  1. 选择Ingress控制器:根据集群环境和需求选择合适的Ingress控制器。
  2. 安装Ingress控制器:按照Ingress控制器的官方文档进行安装。通常,这包括下载相应的YAML文件并应用到Kubernetes集群中。

二、创建Ingress资源

Ingress资源定义了从集群外部到内部服务的路由规则。

  1. 定义Ingress规则:在Ingress资源中指定想要暴露的服务、路由规则、TLS配置等。
  2. 应用Ingress资源:将定义好的Ingress资源应用到Kubernetes集群中。

三、配置域名解析

为了使外部用户能够通过域名访问Ingress,需要在域名解析服务商配置解析记录,将域名指向集群的Ingress IP地址。这通常涉及以下步骤:

  1. 获取Ingress IP地址:在Kubernetes集群中,Ingress控制器通常会创建一个负载均衡器,并分配一个IP地址。需要获取这个IP地址。
  2. 配置域名解析:在域名解析服务商的网站上,为域名添加一条A记录或CNAME记录,将域名指向Ingress IP地址。

四、验证访问

完成以上步骤后,可以通过访问配置的域名来验证Ingress是否按预期工作。如果一切正常,应该能够访问到集群内部的服务。

示例

以下是一个使用Nginx Ingress控制器和Ingress资源的示例:

  1. 部署Nginx Ingress控制器

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-x.y.z/deploy/static/provider/cloud/deploy.yaml
    

    其中x.y.z是Nginx Ingress控制器的版本号,需要根据实际情况进行替换。

  2. 创建Ingress资源

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress
    spec:
      rules:
      - host: myapp.example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80
    

    在这个示例中,定义了一个名为my-ingress的Ingress资源,它将myapp.example.com域名的流量路由到名为my-service的后端服务上。

  3. 配置域名解析:在域名解析服务商处,为myapp.example.com添加一条A记录,将域名指向Ingress控制器的IP地址。

  4. 验证访问:在浏览器中访问myapp.example.com,应该能够访问到my-service服务提供的内容。
    通过以上步骤,集群外部的用户就可以通过域名访问到Kubernetes集群内部的服务了。

Ingress访问service

Ingress访问Service的流程
当外部用户通过域名访问Ingress时,Ingress控制器的工作流程如下:

  • 接收请求:Ingress控制器监听在指定的端口(通常是80和443)上,接收来自外部的HTTP和HTTPS请求。
  • 匹配规则:Ingress控制器根据Ingress资源中定义的规则,匹配请求的域名和路径。
  • 转发请求:一旦匹配到规则,Ingress控制器会将请求转发到对应的后端Service上。这通常涉及将请求转发到Service的ClusterIP,然后由Service将请求进一步分发到其背后的Pod上。
  • 处理响应:Pod处理请求并生成响应,响应通过Service、Ingress控制器返回给外部用户。

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

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

相关文章

《数据结构(刘大有)》学习(6)

系列文章目录 一、绪论 二、顺序表、链表 三、堆栈、队列 四、数组 五、字符串 六、树 目录 树的基本概念树的定义树的特点树的相关术语度层数高度路径二叉树定义特点定理满二叉树定义特点完全二叉树定义特点二叉树的存储结构顺序存储结点结构优点缺点 链式存储 结点结构…

带你深入浅出设计模式:四、原型模式:编程中的克隆技术

此为设计模式第四谈! 用总-分-总的结构和生活化的例子给你讲解设计模式! 码农不易,各位学者学到东西请点赞收藏支持支持! 开始部分: 总:原型模式的核心逻辑在于通过克隆现有实例来创建新对象&#xff0c…

(12)MATLAB莱斯(Rician)衰落信道仿真2补充:莱斯衰落信道与莱斯随机变量

文章目录 前言1.关于莱斯衰落信道仿真的两个公式2.由式(1)推出式(2) 前言 本文给出关于莱斯衰落信道仿真的两个公式之间的推导。 1.关于莱斯衰落信道仿真的两个公式 在上一篇《(11)MATLAB莱斯&#xff08…

不只是前端,后端、产品和测试也需要了解的浏览器知识(一)

目录标题 一、我们为什么要了解浏览器?1. 对于前端开发者2. 对于后端开发者 二、浏览器发展概述1. 宏观发展2. 微观发展 三、浏览器核心部件1. 浏览器界面介绍2. 目前浏览器的使用的渲染引擎和解释器总结3. 浏览器的解释器 四、各家浏览器目前的市场占比五、整体总结…

深度学习笔记18_TensorFlow实现猫狗识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 一、我的环境 1.语言环境:Python 3.9 2.编译器:Pycharm 3.深度学习环境:TensorFlow 2.10.0 二、GPU设置…

wpf加载带材料的3D模型(下载的3D预览一样有纹理)

背景:最近真的是忙啊,累出汁水了 整体效果: 放大可以看清砖头: 1、需要自己准备好3D模型,比如我这里是下载的这里的3D Warehouse,下载Collada File格式文件 2、解压可以看到一个model.dae和材料的文件夹&…

SAP HCM 抓取模拟工资核算日志RT表数据

一:故事背景 SAP的核算其实比较麻烦的就是没地方可以导出核算成功的人员编号,即使能导出也是树形的结构,需要反复加工多次才能整理好员工,所以非常麻烦,今天就想能不能抓取模拟工资的rt表数据. 二:解决办法…

【项目记录】llama-7B基于llama.cpp在Qemu-riscv64向量扩展指令下的部署

概述 参考博客链接: Accelerating llama.cpp with RISC-V Vector Extension 基于RVV的llama.cpp在Qemu上的演示 Github相关链接: Llama.cpp中利用GGML中对RVV的支持1 Llama.cpp中利用GGML中对RVV的支持2 llama.cpp工程 2024/10/02: 工具准备OK&#…

Log4j的配置与使用详解

Log4j的配置与使用详解 Log4j介绍 Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,我们可以控制每条日志的输出格式;只需要通过一个配置文件就可以灵活的配置&#xff0c…

Android SystemUI组件(11)SystemUIVisibility解读

该系列文章总纲链接:专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明: 说明:本章节持续迭代之前章节思维导图,主要关注左侧最上方SystemUiVisibility解读部分即可。 本章节主要讲解SystemUiVisibility的概念及其相…

【EXCEL数据处理】000015案例 EXCEL公式与基础函数

前言:哈喽,大家好,今天给大家分享一篇文章!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【EXCEL数据处理】000015案例 EXCEL公式与基础函数。使用的软件&#x…

基础岛第3关:浦语提示词工程实践

模型部署 使用下面脚本测试模型 from huggingface_hub import login, snapshot_download import osos.environ[HF_ENDPOINT] https://hf-mirror.comlogin(token“your_access_token")models ["internlm/internlm2-chat-1_8b"]for model in models:try:snapsh…

Java--IO基本流

IO流 概述 生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrls ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘…

昇思MindSpore进阶教程--二阶优化器THOR

大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧 正文介绍 深度学习训练过程可以看成损失…

Neo4j CQL语句 使用教程

CREATE命令 : CREATE (<node-name>:<label-name>{ <Property1-name>:<Property1-Value>........<Propertyn-name>:<Propertyn-Value>} )字段说明 CREATE (dept:Dept { deptno:10,dname:“Accounting”,location:“Hyderabad” })&#…

ATLAS/ICESat-2 L3B 每 3 个月网格动态海洋地形图 V001

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 ATLAS/ICESat-2 L3B Monthly 3-Month Gridded Dynamic Ocean Topography V001 ATLAS/ICESat-2 L3B 每月 3 个月网格动态海洋地形图 V001 简介 该数据集包含中纬度、北极和南极网格上动态海洋地形&…

[Offsec Lab] ICMP Monitorr-RCE+hping3权限提升

信息收集 IP AddressOpening Ports192.168.52.218TCP:22,80 $ nmap -p- 192.168.52.218 --min-rate 1000 -sC -sV -Pn PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.9p1 Debian 10deb10u2 (protocol 2.0) | ssh-hostkey: | 2048 de:b5:23:89:bb:9f:d4:1…

Kubernetes-Kind篇-01-kind搭建测试集群

1、Kind 介绍 官方文档地址&#xff1a;https://kind.sigs.k8s.io/ github仓库地址&#xff1a;https://github.com/kubernetes-sigs/kind 国内镜像仓库地址&#xff1a;https://gitcode.com/gh_mirrors/ki/kind/overview kind 是一种使用 Docker 容器 nodes 运行本地 Kubern…

算法日记-链表翻转

文章目录 场景&#xff1a;解法一&#xff1a;迭代步骤完整代码 解法二&#xff1a;递归步骤完整代码 重温力扣常规算法&#xff0c;记录算法的演变&#xff0c;今天介绍的是链表翻转 场景&#xff1a; 现在有一条单项链表&#xff0c;链表节点存在一个数据和指向下一个节点的…

MySQL--三大范式(超详解)

目录 一、前言二、三大范式2.1概念2.2第一范式&#xff08;1NF&#xff09;2.3第二范式&#xff08;2NF&#xff09;2.3第三范式&#xff08;3NF&#xff09; 一、前言 欢迎大家来到权权的博客~欢迎大家对我的博客进行指导&#xff0c;有什么不对的地方&#xff0c;我会及时改进…