目录

序言

1.Ingress基本介绍

1.1 暴露服务问题

1.2 什么是Ingress

1.2 Ingress的核心组件

1.2.1 ingress

1.2.2 ingress-controller

1.2.3 反向代理负载均衡器

2.安装

2.1 下载/修改配置文件

2.2 安装资源

2.3 结果

2.4 项目示例

2.4.1 创建service及deployment

2.4.2创建Ingress规则

2.4.3 完整文件

3.投票


序言

这个世界从来都需要你独当一面,一定要优秀,才能堵住悠悠之口

三言两语,不如细心探索

今天学习整理了一下Ingress相关内容,希望此文,能帮助读者对Ingress 有一个初步的了解

文章标记颜色说明:

  • 黄色:重要标题
  • 红色:用来标记结论
  • 绿色:用来标记一级论点
  • 蓝色:用来标记二级论点

1.Ingress基本介绍

1.1 暴露服务问题

k8s 集群对外暴露服务的方式有三种:

  • NotePort
  • LoadBalance
  • Ingress
  1. NodePort方式:最大的缺点是会占用很多集群机器的端口,而且需要在外部搭建额外的负载均衡;
  2. LB方式:最大的缺点则是每个service一个LB,有点浪费,并且需要k8s之外的支持,【eg:cloud provider】;
  3. ingress: Ingress就是为了解决1,2两种方式的限制,只需要一个NodePort或者一个LB就可以满足所有service对外服务的需求。

1.2 什么是Ingress

官网地址:GitHub - kubernetes/ingress-nginx: Ingress-NGINX Controller for Kubernetes

Ingress 是 k8s 官方提供的用于对外暴露服务的方式,也是在生产环境用的比较多的方式,一般情况是 LB + Ingress Ctroller 方式对外提供服务,这样就可以在一个 LB 的情况下根据域名路由到对应后端的 Service,

类似于 Nginx 反向代理,只不过在 k8s 集群中,这个反向代理是集群外部流量的统一入口。

Ingress 公开了从集群外部到集群内 services 的访问路由。

流量路由,由 Ingress 资源上定义的规则控制。

特点:

  1. Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP和HTTPS。
  2. Ingress 提供负载均衡、SSL 和基于名称的虚拟托管。
  3. 必须具有 ingress 控制器【例如 ingress-nginx】才能满足 Ingress 的要求。仅创建 Ingress 资源无效。

可以理解为:

Ingress 是一个规则的集合,它允许集群外的流量通过一定的规则到达集群内的 Service

1.2 Ingress的核心组件

Ingress由三个组件组成:

  • ingress
  • ingress-controller
  • 反向代理负载均衡器

1.2.1 ingress

可以理解为:是一个类型为Ingress的k8s api对象

一般用yaml配置,作用是定义请求如何转发到service的规则,可以理解为配置模板。

  • 是规则集合
  • 定义了域名与Kubernetes的service的对应关系
  • 规则与 Ingress Controller 结合, Ingress Controller 将其动态写入到负载均衡器配置中,从而实现整体的服务发现和负载均衡。

1.2.2 ingress-controller

kubernetes API 进行交互,实时的感知后端 service、pod 等变化

Ingress Controller 再结合下文的 Ingress 生成配置,然后更新反向代理负载均衡器,并刷新其配置,实现动态服务发现与更新

其核心是一个deployment,实现方式有很多如:

  • nginx
  • Contour
  • Haproxy
  • trafik
  • Istio

需要编写的yaml有:Deployment, Service, ConfigMap, ServiceAccount(Auth)

其中service的类型可以是NodePort或者LoadBalancer。

实现反向代理及负载均衡的程序,对ingress定义的规则进行解析,根据配置的规则来实现请求转发

总结一下:

Ingress-controller才是负责转发的组件,通过各种方式将他暴露在集群入口,外部对集群的请求流量会先到Ingress-controller,

而Ingress对象是用来告诉Ingress-controller该如何转发请求,比如那些域名那些path要转发到那些服务

1.2.3 反向代理负载均衡器

即常见的负载均衡软件,如 nginx、Haproxy 等

2.安装

2.1 下载/修改配置文件

下载整合配置文件,获取配置文件地址:

ingress-nginx/deploy/static at nginx-0.30.0 · kubernetes/ingress-nginx · GitHub

主要是这两个文件:

mandatory.yaml

service-nodeport.yaml

service-nodeport.yaml为ingress通过nodeport对外提供服务,注意默认nodeport暴露端口为随机,可以编辑该文件自定义端口。

wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml

具体位置截图

2.2 安装资源

应用yml文件创建ingress资源:,执行下面两个命令:

kubectl apply -f  mandatory.yaml
kubectl apply -f service-nodeport.yaml 

2.3 结果

执行以下命令,查看结果:

kubectl get all -n ingress-nginx -o wide

可以看到,结果如下:

总结一下

Ingress Contronler 通过与 Kubernetes API 交互,动态感知集群中 Ingress 规则变化,然后读取它,按照自定义的规则,规则就是写明了哪个域名对应哪个service,生成一段 Nginx 配置,再写到 Nginx-ingress-control的 Pod 里,

这个 Ingress Contronler 的pod里面运行着一个nginx服务,控制器会把生成的nginx配置写入/etc/nginx.conf文件中,然后 reload 一下 使用配置生效。进而达到域名分配置及动态更新的问题。

2.4 项目示例

2.4.1 创建service及deployment

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: test-nginxname: test-nginx
spec:replicas: 3 #3个副本minReadySeconds: 5          #等待5秒后升级selector:matchLabels:app: test-nginxtemplate:metadata:labels:app: test-nginxspec:containers:- image: nginxname: test-nginx---
apiVersion: v1
kind: Service
metadata:name: test-nginxlabels:app: test-nginx
spec:ports:- port: 80targetPort: 80selector:app: test-nginx

2.4.2创建Ingress规则

# ingress规则中,要指定需要绑定暴露的svc名称
apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: ingress-test-nginxannotations: kubernetes.io/ingress.class: "nginx"    # 指定 Ingress Controller 的类型nginx.ingress.kubernetes.io/use-regex: "true"    # 指定我们的 rules 的 path 可以使用正则表达式nginx.ingress.kubernetes.io/proxy-connect-timeout: "600"    # 连接超时时间,默认为 5snginx.ingress.kubernetes.io/proxy-send-timeout: "600"      # 后端服务器回转数据超时时间,默认为 60snginx.ingress.kubernetes.io/proxy-send-timeout: "600"      # 后端服务器响应超时时间,默认为 60snginx.ingress.kubernetes.io/proxy-body-size: "10m"         # 客户端上传文件,最大大小,默认为 20m
spec:rules:         #定义路由规则- host: www.testnginx.com      # 主机名,只能是域名,修改为项目域名http:paths:- path: /backend:serviceName: test-nginx          # 后台部署的 Service NameservicePort: 80                  # 后台部署的 Service Port

2.4.3 完整文件

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: test-nginxname: test-nginxnamespace: test
spec:replicas: 3 #3个副本minReadySeconds: 5          #等待5秒后升级selector:matchLabels:app: test-nginxtemplate:metadata:labels:app: test-nginxspec:containers:- image: nginxname: test-nginx---
apiVersion: v1
kind: Service
metadata:name: test-nginxnamespace: test labels:app: test-nginx
spec:ports:- port: 80targetPort: 80selector:app: test-nginx---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: ingress-test-nginxnamespace: test annotations: kubernetes.io/ingress.class: "nginx"    # 指定 Ingress Controller 的类型nginx.ingress.kubernetes.io/use-regex: "true"    # 指定我们的 rules 的 path 可以使用正则表达式nginx.ingress.kubernetes.io/proxy-connect-timeout: "600"    # 连接超时时间,默认为 5snginx.ingress.kubernetes.io/proxy-send-timeout: "600"      # 后端服务器回转数据超时时间,默认为 60snginx.ingress.kubernetes.io/proxy-send-timeout: "600"      # 后端服务器响应超时时间,默认为 60snginx.ingress.kubernetes.io/proxy-body-size: "10m"         # 客户端上传文件,最大大小,默认为 20m
spec:rules:         #定义路由规则- host: www.testnginx.com      # 主机名,只能是域名,修改为项目域名http:paths:- path: /backend:serviceName: test-nginx          # 后台部署的 Service NameservicePort: 80                  # 后台部署的 Service Port

应用yaml文件:

kubectl apply -f test-nginx-ingress.yaml

执行命令,查看结果,会看到已经生成了对应的ingress-test-nginx 已经生成:

kubectl get ingress -n test

3.投票

【K8S系列】第十三讲:Ingress详解相关推荐

  1. K8S系列(四)Deployment 详解

    背景 如果我们直接管理集群中所有的 Pod,应用 A.B.C 的 Pod,其实是散乱地分布在集群中.,现在有以下的问题: 首先,如何保证集群内可用 Pod 的数量?也就是说我们应用 A 四个 Pod ...

  2. 《Python进阶系列》十六:详解Python中的正则表达式

    正则表达式 概述 正则表达式为高级的文本模式匹配.抽取.与/或文本形式的搜索和替换功能提供了基础.简单地说,正则表达式是一些由字符和特殊符号组成的字符串,它们描述了模式的重复或者表述多个字符,于是正则 ...

  3. K8S系列(六)DaemonSet详解

    需求来源 DaemonSet 背景问题 下面介绍第二个控制器:**DaemonSet.**同样的问题:如果我们没有 DaemonSet 会怎么样?下面有几个需求: 首先如果希望每个节点都运行同样一个 ...

  4. 十二、详解计算网络中的流量控制和差错控制、HDLC

    十二.详解计算网络中的流量控制和差错控制 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动 ...

  5. 深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)

    上篇文章<深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)> 介绍了properties与environments, ...

  6. flutter图片点击跳转_Flutter系列之Platform Channel使用详解

    PS:逐渐体会到关键少数原则的重要性,接下来就是付诸实践了,另外科创50ETF明天开始限额销售,可以适当关注或入手一点. 前面几篇文章介绍了 Navigator 组件.Flex 布局.图片加载.Wid ...

  7. kubernetes系列11—PV和PVC详解

    kubernetes系列11-PV和PVC详解 原文:kubernetes系列11-PV和PVC详解 本文收录在容器技术学习系列文章总目录 1.认识PV/PVC/StorageClass 1.1 介绍 ...

  8. kubernetes(k8s)之rbac权限管理详解

    kubernetes(k8s)之rbac权限管理详解 RBAC简介 RBAC(Role-Based Access Control) [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 ...

  9. 32.深度解密三十二:详解影响QQ群整体排名的那些秘密

    网络营销推广技术.技巧深度解密(三十二)指南: 1.本文档适合零基础以及互联网营销推广人员,主要讲解营销QQ群排名的一些问题. 2.原创版权文档,任何抄袭或者全部.部分模仿都是侵权行为. 3.敬畏法律 ...

  10. 红米3 android 版本,红米3四款手机有什么不同?红米3系列手机各版本区别详解

    近日,红米手机3的指纹识别升级版本通过工信部认证正式亮相.今天红米3系列产品再次亮相工信部.加上此前亮相的红米3指纹识别升级 版,如今工信部认证中共有4款红米3系列的手机.分别是2015810/201 ...

最新文章

  1. gdb调试报错:Missing separate debuginfos, use: debuginfo-install glibc-XXX
  2. POJ1042 Gone Fishing
  3. 【译】混沌工程与区块链
  4. 四位共阳极数码管显示函数_新手求助四位共阳数码管显示函数
  5. 系统安全及应用(账户安全控制,系统引导和登录,弱口令检测和登录控制,PAM认证,端口扫描,用户切换和提权)
  6. centos卸载linux里面mysql,熟悉linux-mysql的安装与卸载(centos)
  7. mysql索引使增删变慢_mysql优化之索引篇
  8. Leetcode每日一题:3.无重复字符的最长子串
  9. 查看从库mysql同步错误日志_常见MySQL同步错误恢复方法
  10. tomcat-maven-plugin 2.0版本发布
  11. java中==与equals的区别及理解_Java开发中常量池的理解与归纳
  12. C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件
  13. idea安装插件及java开发插件推荐
  14. Python 语言创建 ANSYS APDL 命令流
  15. 或是独体字吗_独体字结构 独体结构的字有哪些字?
  16. 微信红包业务,为什么采用轮询算法?
  17. Springboot旅游网的设计与实现xb29f计算机毕业设计-课程设计-期末作业-毕设程序代做
  18. 企业年会直播该怎么玩
  19. 小型水库雨水情测报和大坝安全监测
  20. Java使用itext生成PDF 然后将多个PDF打包zip下载

热门文章

  1. 不想打工了,有什么低门槛的小生意可以做?
  2. 关于个人开发者上线Android-App步骤浅谈
  3. python做手机应用宝下载_Python代码爬取下载应用宝所有APP软件
  4. Azure云服务反向DNS
  5. android开发笔记之联系人中添加手机铃声功能的实现
  6. 《趣谈Linux》总结三:进程/线程
  7. Office 2010 excel在打开两个表格的时候,仅能在一个窗口显示,怎么分开来看?【亲测win10】
  8. flex弹性布局详解
  9. 铠侠推出全新BG6系列消费级固态硬盘,引领PCIe®4.0高性价比主流
  10. 项目中遇到 “It is indirectly referenced from required .class files”的问题(开发笔记)