您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

五分钟搞懂Ingress /IngressController/IngressClass的区别

时间:2023-09-17 14:07:44  来源:微信公众号  作者:不焦躁的程序员

先来个一句话总结:Ingress由Ingress规则、IngressController、IngressClass这3部分组成。Ingress资源只是一系列路由转发配置,必须使用IngressController才能让路由规则生效,而IngressClass是IngressController的具体实现。使用原则:先部署IngressController → 再部署Ingress资源。

1、理论

1.1、Ingress的概念

没有Ingress之前,可以通过Service的nodePort对外暴露服务,将容器端口与Service的nodePort端口做映射,这样访问集群中任意一台Node的IP:nodePort就能访问到集群内部。Service 的这种暴露服务的形式是工作在TCP/IP层。或者将Pod的端口与HostPort做映射。

但是这样做弊端较多,比如暴露了太多的Node端口、无法做域名转发等。

所以引入了Ingress的概念,Ingress是一个七层路由转发器,类似于Nginx。使用Ingress进行路由转发时,ingressController会基于ingress规则将客户端请求直接转发到Service对应的Pod上,这样会跳过 kube-proxy 设置的路由转发规则,可以提高网络转发效率。

1.2、Ingress的组成

Ingress资源是一种虚拟的资源和规则定义,需要配合ingressController才能生效。所以要让Ingress资源工作,集群必须有一个正在运行的ingressController。

Ingress由Ingress规则、IngressController、IngressClass这3部分组成。Ingress规则只是一系列的配置,必须使用IngressController才能使其生效,而IngressClass是IngressController的具体实现。关系如下图:

1.3、Ingress的功能和工作流程

ingressController的实现有多种,比如有Ingress-Nginx、Traefik、Kong Ingress等,所以需要在Yaml编排文件中指定ingressClass。

一旦Ingress资源成功部署创建,IngressController就会监控到其配置的路由策略,并更新到Nginx的配置文件中生效。

综上,IngressController 的功能如下:

  • 接受外部的流量,并将请求负载均衡到内部运行的 pod上
  • 部署Ingress路由转发规则
  • 监控Kube.NETes中运行的Pod,并在添加或删除Pod后自动更新负载均衡规则

Ingress的工作流程,如下图:

2、实践

2.1、安装IngressClass

本文实践使用的是ingress-nginx,其实方式你可以自行实践。

官网地址:https://kubernetes.Github.io/ingress-nginx/deploy/#quick-start

可以通过helm或kubectl安装,本文使用的是kubectl方式安装,yaml的文件内容较多,你可以自行下载查阅。执行以下命令安装:

kubectl Apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml

2.2、编排Yaml

IngressController部署完毕后,就是开始编排Yaml了。

Yaml中定义了一个容器镜像是Nginx的Pod,然后通过Service与Pod关联,再通过Ingress规则访问对应的Pod。

apiVersion: v1
kind: Pod
metadata:
  name: web-app
  namespace: demo
  labels:
    app: web-app
spec:
  contAIners:
    - name: web-app
      image: nginx
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: web-service
  namespace: demo
  labels:
    app: web-service
spec:
  selector:
    app: web-app
  # ClusterIP | LoadBalancer | NodePort,使用Ingress就没必要设置成NortPort
  type: ClusterIP
  clusterIP: None
  ports:
    - name: web-service-port
      protocol: TCP
      port: 80
      targetPort: 80
---
# 创建Ingress策略
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
  name: web-ingress
  namespace: demo
spec:
  # 指定ingressClass
  ingressClassName: nginx
  rules:
    - host: web-ingress.mangod.top
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web-service
                port:
                  number: 80

2.3、部署测试

Yaml编排完毕后,使用kubectl apply命令部署,部署完毕后,在本地/etc/hosts里配置域名和某个K8S-Node节点的映射关系(当然,生产环境的访问链路比这个长,后面有机会再介绍,文中为了快速测试,直接在本地配置DNS),类似这样点的映射关系:

10.20.1.23 web-ingress.mangod.top

然后,浏览器访问http://web-ingress.mangod.top/,界面如下,说明ingress使用成功。

此时我们使用如下命令,进入到ingressController对应的pod,继续验证,可以看到熟悉的nginx.conf,之前配置的ingress规则在配置里都可以看到,如下:

kubectl get pods -n ingress-nginx
kubectl exec ingress-nginx-controller-nginx-d864d97df-22ljk -it -n ingress-nginx /bin/bash

至此实践过程结束。

3、总结

一句话总结:Ingress由Ingress规则、IngressController、IngressClass这3部分组成。Ingress资源只是一系列路由转发配置,必须使用IngressController才能让路由规则生效,而IngressClass是IngressController的具体实现。使用原则:先部署IngressController → 再部署Ingress资源。



Tags:Ingress   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
五分钟搞懂Ingress /IngressController/IngressClass的区别
先来个一句话总结:Ingress由Ingress规则、IngressController、IngressClass这3部分组成。Ingress资源只是一系列路由转发配置,必须使用IngressController才能让路由规则生效,而...【详细内容】
2023-09-17  Search: Ingress  点击:(100)  评论:(0)  加入收藏
Ingress企业实战:URL重写与高级玩法
什么是URL重写URL重写(URL rewriting)是一种在Web服务器上修改或转换请求URL的过程。它通常涉及使用服务器配置或规则来更改传入的URL,以便在不改变实际请求资源的情况下,实现不...【详细内容】
2023-08-16  Search: Ingress  点击:(152)  评论:(0)  加入收藏
Nginx转发K8S、kubesphere的Ingress的WebSocket 请求时的不同配置
upstream websocket {#ip_hash;server ivcp-api.ttt.com;}#For WebSocket define serverserver {listen 9999;server_name localhost;location / {proxy_pass http://ivcp-a...【详细内容】
2022-03-18  Search: Ingress  点击:(801)  评论:(0)  加入收藏
kubernetes ingress配置转发端口
Ingress配置转发端口本质Ingress配置转发端口本质,还是利用service nodePort能力,通过暴露ingress的本地端口来转发。Ingress默认不支持TCP or UDP services。因此Ingress con...【详细内容】
2022-01-21  Search: Ingress  点击:(2109)  评论:(0)  加入收藏
Ingress-nginx自定义配置文件
k8s集群默认安装的ingress-nginx直接投入测试或生产使用,其不合适的配置参数可能会导致一些访问报错。 例如: “413 Request Entity Too Large” “503 Service Unavailable...【详细内容】
2020-08-31  Search: Ingress  点击:(1022)  评论:(0)  加入收藏
ingress-nginx 中 Rewrite 的使用
由于 nginx 的优秀性能表现,所以很多企业在 Kubernetes 中选择 Ingress Controller 的时候依然会选择基于 nginx 的 ingress-nginx,前面文章中我们更多的是介绍更加云原生配置...【详细内容】
2019-12-19  Search: Ingress  点击:(925)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条