首页 > 其他分享 >Ingress:集群进出流量的总管

Ingress:集群进出流量的总管

时间:2023-07-18 23:01:37浏览次数:32  
标签:Ingress Kubernetes Service 进出 Controller 集群 规则 Class

Service 很有用,但也只能说是“基础设施”,它对网络流量的管理方案还是太简单,离复杂的现代应用架构需求还有很大的差距,所以 Kubernetes 就在 Service 之上又提出了一个新的概念:Ingress。

Service 还有一个缺点,它比较适合代理集群内部的服务。如果想要把服务暴露到集群外部,就只能使用 NodePort 或者 LoadBalancer 这两种方式,而它们都缺乏足够的灵活性,难以管控,这就导致了一种很无奈的局面:我们的服务空有一身本领,却没有合适的机会走出去大展拳脚。

Ingress:集群进出流量的总管_Ingress

Ingress:集群进出流量的总管_Ingress_02这个 API 对象就顺理成章地被命名为 Ingress,意思就是集群内外边界上的入口。

Service 本身是没有服务能力的,它只是一些 iptables 规则,真正配置、应用这些规则的实际上是节点里的 kube-proxy 组件。如果没有 kube-proxy,Service 定义得再完善也没有用。

Ingress 也只是一些 HTTP 路由规则的集合,相当于一份静态的描述文件,真正要把这些规则在集群里实施运行,还需要有另外一个东西,这就是 Ingress Controller,它的作用就相当于 Service 的 kube-proxy,能够读取、应用 Ingress 规则,处理、调度流量。

Kubernetes 应该把 Ingress Controller 内置实现,作为基础设施的一部分,就像 kube-proxy 一样。

随着 Ingress 在实践中的大量应用,很多用户发现这种用法会带来一些问题,比如:

  • 由于某些原因,项目组需要引入不同的 Ingress Controller,但 Kubernetes 不允许这样做;
  • Ingress 规则太多,都交给一个 Ingress Controller 处理会让它不堪重负;
  • 多个 Ingress 对象没有很好的逻辑分组方式,管理和维护成本很高;
  • 集群里有不同的租户,他们对 Ingress 的需求差异很大甚至有冲突,无法部署在同一个 Ingress Controller 上。

Kubernetes 就又提出了一个 Ingress Class 的概念,让它插在 Ingress 和 Ingress Controller 中间,作为流量规则和控制器的协调人,解除了 Ingress 和 Ingress Controller 的强绑定关系。

Kubernetes 用户可以转向管理 Ingress Class,用它来定义不同的业务逻辑分组,简化 Ingress 规则的复杂度。比如说,我们可以用 Class A 处理博客流量、Class B 处理短视频流量、Class C 处理购物流量。

Ingress 也是可以使用 kubectl create 来创建样板文件的,和 Service 类似,它也需要用两个附加参数:

  • --class,指定 Ingress 从属的 Ingress Class 对象。
  • --rule,指定路由规则,基本形式是“URI=Service”,也就是说是访问 HTTP 路径就转发到对应的 Service 对象,再由 Service 对象转发给后端的 Pod。

Ingress 和 Service、Ingress Class 的关系画成了一张图。

Ingress:集群进出流量的总管_Ingress_03

Ingress:集群进出流量的总管_Ingress_04部署 Ingress Controller 不需要我们自己从头编写 Deployment,Nginx 已经为我们提供了示例 YAML,但创建之前为了适配我们自己的应用还必须要做几处小改动:

  • metadata 里的 name 要改成自己的名字,比如 ngx-kic-dep。
  • spec.selector 和 template.metadata.labels 也要修改成自己的名字,比如还是用 ngx-kic-dep。
  • containers.image 可以改用 apline 版本,加快下载速度,比如 nginx/nginx-ingress:2.2-alpine。
  • 最下面的 args 要加上 -ingress-class=ngx-ink,也就是前面创建的 Ingress Class 的名字,这是让 Ingress Controller 管理 Ingress 的关键。



标签:Ingress,Kubernetes,Service,进出,Controller,集群,规则,Class
From: https://blog.51cto.com/key3feng/6769377

相关文章

  • shardingsphere配置读写分离集群(1主2从结构)
    第一章、shardingsphere的安装1、使用ftp将离线安装包放到/opt2、进入opt目录,解压,移动到/usr/local,重命名cd/opttar-xzvfmysql-5.7,29-linux-glibc2.12-x86_64.tar.gzmvapache-shardingsphere-4.1.1-sharding-proxy-bin/usr/localcd/usr/localmvapache-shardingsph......
  • Kafka 集群参数配置介绍
    目录Broker端存储信息相关参数ZooKeeper相关参数Topic相关参数数据存留相关参数Topic级别参数保存消息JVM参数操作系统参数文件描述符限制文件系统类型Swappiness提交时间Broker端Broker端参数也被称为静态参数(StaticConfigs),必须在Kafka的配置文件server.properties......
  • 第三章 Flink 集群搭建
    Flink集群搭建Flink可以选择的部署方式有:Local、Standalone(资源利用率低)、Yarn、Mesos、Docker、Kubernetes、AWS。我们主要对Standalone模式和Yarn模式下的Flink集群部署进行分析。我们对standalone模式的Flink集群进行安装,准备三台虚拟机,其中一台作为JobManager(hadoo......
  • 通过kubectl连接Kubernetes集群
    1、安装kubectl本地客户端安装kubectl添加kubernete阿里云yum源#cat>/etc/yum.repos.d/kubernetes.repo<<EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gp......
  • docker分布式存储之哈希槽3主3从redis集群配置+主从扩容缩容
    创建开启六台redis容器systemctlrestartdockerdockerpullredis:6.0.8根据需求下载redis的镜像版本配置3主3从开启六台redis容器分别用node-1~node-6来区分dockerrun-d--nameredis-node-1--nethost--privileged=true-v/tmp/redis/share/redis-node......
  • ES集群搭建和Kibana管理集群
    搭建实例先复制2份解压后的完整目录,将里面的data和log删除.elasticsearch-6.8.23-node2elasticsearch-6.8.23-node3修改3个实例的配置文件:(只列出一份,其他的改一下节点名和监听端口、节点内部通信端口就可以了)#同一个集群中每个节点的集群名要一样。#集群是由一个或者多......
  • Java 实现 WebSocket 集群转发:使用 Redis 发布订阅
    场景浏览器客户端client1连接到了服务端A的websocket节点。浏览器客户端通过弹性负载均衡,把请求分配到了服务端B,服务端B上没有client1的连接。需求服务端B把消息转发到服务端A上,找到客户端client1的连接,发送出去。画示意图......
  • redis-cli查看集群信息
    Redis-CLI查看集群信息Redis是一种高性能的内存数据库,广泛用于缓存、消息队列和数据存储等场景。Redis集群是Redis的一种分布式部署方式,能够提供高可用性和可扩展性。为了管理和监控Redis集群,我们可以使用Redis-CLI提供的命令来查看集群信息。Redis-CLI简介Redis-CLI是Redis自带......
  • redis spring boot 集群 配置
    RedisSpringBoot集群配置1.概述在使用SpringBoot开发应用程序时,我们可能会遇到需要使用Redis集群来存储和缓存数据的情况。Redis是一个高性能的键值存储数据库,而SpringBoot提供了与Redis集群进行集成的便捷方式。本文将介绍在SpringBoot应用程序中配置Redis集群的步骤,包......
  • 聊聊我认为的分布式、集群实现关键点
    基于常见的中间件(Mysql、ElasticSearch、Zookeeper、Kafka、Redis)等分布式集群设计的机制,自己总结了在在集群设计过程中需要考虑的通用问题。节点通信机制主节点的增加、删除、通信机制。路由算法即数据路由到哪个节点的策略机制。在集群内有多个节点,数据该路由到哪个节点存......