Ingress

K8S之Ingress 和一个具体。 阅读详情

Ingress介绍

在前面课程中已经提到,Service对集群之外暴露服务的主要方式有两种:NotePort和LoadBalancer,但是这两种方式,都有一定的缺点:

  • NodePort方式的缺点是会占用很多集群机器的端口,那么当集群服务变多的时候,这个缺点就愈发明显
  • LB方式的缺点是每个service需要一个LB,浪费、麻烦,并且需要kubernetes之外设备的支持
    基于这种现状,kubernetes提供了Ingress资源对象,Ingress只需要一个NodePort或者一个LB就可以满足暴露多个Service的需求。工作机制大致如下图表示:

在这里插入图片描述

实际上,Ingress相当于一个7层的负载均衡器,是kubernetes对反向代理的一个抽象,它的工作原理类似于Nginx,可以理解成在Ingress里建立诸多映射规则,Ingress Controller通过监听这些配置规则并转化成Nginx的反向代理配置 , 然后对外部提供服务。在这里有两个核心概念:

  • ingress:kubernetes中的一个对象,作用是定义请求如何转发到service的规则
  • ingress controller:具体实现反向代理及负载均衡的程序,对ingress定义的规则进行解析,根据配置的规则来实现请求转发,实现方式有很多,比如Nginx, Contour, Haproxy等等

Ingress(以Nginx为例)的工作原理如下:

1.用户编写Ingress规则,说明哪个域名对应kubernetes集群中的哪个Service
2.Ingress控制器动态感知Ingress服务规则的变化,然后生成一段对应的Nginx反向代理配置
3.Ingress控制器会将生成的Nginx配置写入到一个运行着的Nginx服务中,并动态更新
4.到此为止,其实真正在工作的就是一个Nginx了,内部配置了用户定义的请求转发规则

在这里插入图片描述

环境准备 搭建ingress环境

[root@k8s-master ~]# mkdir ingress-controller
[root@k8s-master ~]# cd ingress-controller/

获取ingress-nginx,本次案例使用的是0.30版本

[root@k8s-master01 ingress-controller]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/mandatory.yaml
[root@k8s-master01 ingress-controller]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml

创建ingress-controller pod和service

[root@k8s-master01 ingress-controller]# kubectl apply -f ./

查看ingress-nginxPOD

[root@k8s-master01 ingress-controller]# kubectl get pod -n ingress-nginx
NAME                                           READY   STATUS    RESTARTS   AGE
pod/nginx-ingress-controller-fbf967dd5-4qpbp   1/1     Running   0          12h

查看service

[root@k8s-master01 ingress-controller]# kubectl get svc -n ingress-nginx
NAME            TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx   NodePort   10.98.75.163   <none>        80:32240/TCP,443:31335/TCP   11h

准备service和pod

在这里插入图片描述

创建tomcat-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1
        ports:
        - containerPort: 80

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: tomcat-pod
  template:
    metadata:
      labels:
        app: tomcat-pod
    spec:
      containers:
      - name: tomcat
        image: tomcat:8.5-jre10-slim
        ports:
        - containerPort: 8080

---

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: dev
spec:
  selector:
    app: nginx-pod
  clusterIP: None
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80

---

apiVersion: v1
kind: Service
metadata:
  name: tomcat-service
  namespace: dev
spec:
  selector:
    app: tomcat-pod
  clusterIP: None
  type: ClusterIP
  ports:
  - port: 8080
    targetPort: 8080

创建

[root@k8s-master01 ~]# kubectl create -f tomcat-nginx.yaml

查看

[root@k8s-master01 ~]# kubectl get svc -n dev
NAME             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
nginx-service    ClusterIP   None         <none>        80/TCP     48s
tomcat-service   ClusterIP   None         <none>        8080/TCP   48s

Http代理

ingress-http.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-http
  namespace: dev
spec:
  rules:
  - host: nginx.itheima.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-service
          servicePort: 80
  - host: tomcat.itheima.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-service
          servicePort: 8080

创建ingress-http

[root@k8s-master01 ~]# kubectl create -f ingress-http.yaml
ingress.extensions/ingress-http created

查看

[root@k8s-master01 ~]# kubectl get ing ingress-http -n dev
NAME           HOSTS                                  ADDRESS   PORTS   AGE
ingress-http   nginx.itheima.com,tomcat.itheima.com             80      22s

查看详情

[root@k8s-master01 ~]# kubectl describe ing ingress-http  -n dev
...
Rules:
Host                Path  Backends
----                ----  --------
nginx.itheima.com   / nginx-service:80 (10.244.1.96:80,10.244.1.97:80,10.244.2.112:80)
tomcat.itheima.com  / tomcat-service:8080(10.244.1.94:8080,10.244.1.95:8080,10.244.2.111:8080)
...

接下来,在本地电脑上配置host文件,解析上面的两个域名到192.168.109.100(master)上
然后,就可以分别访问tomcat.itheima.com:32240 和 nginx.itheima.com:32240 查看效果了
这里的端口号根据ingress-control的POD端口不同而不同

Https代理

# 生成证书
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/C=CN/ST=BJ/L=BJ/O=nginx/CN=itheima.com"

# 创建密钥
kubectl create secret tls tls-secret --key tls.key --cert tls.crt

创建ingress-https.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-https
  namespace: dev
spec:
  tls:
    - hosts:
      - nginx.itheima.com
      - tomcat.itheima.com
      secretName: tls-secret # 指定秘钥
  rules:
  - host: nginx.itheima.com
    http:
      paths:
      - path: /
        backend:
          serviceName: nginx-service
          servicePort: 80
  - host: tomcat.itheima.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-service
          servicePort: 8080

创建代理

[root@k8s-master01 ~]# kubectl create -f ingress-https.yaml
ingress.extensions/ingress-https created

查看

[root@k8s-master01 ~]# kubectl get ing ingress-https -n dev
NAME            HOSTS                                  ADDRESS         PORTS     AGE
ingress-https   nginx.itheima.com,tomcat.itheima.com   10.104.184.38   80, 443   2m42s
 
# 查看详情
[root@k8s-master01 ~]# kubectl describe ing ingress-https -n dev 
TLS:
  tls-secret terminates nginx.itheima.com,tomcat.itheima.com
Rules:
Host              Path Backends
----              ---- --------
nginx.itheima.com  /  nginx-service:80 (10.244.1.97:80,10.244.1.98:80,10.244.2.119:80)
tomcat.itheima.com /  tomcat-service:8080(10.244.1.99:8080,10.244.2.117:8080,10.244.2.120:8080)
...

下面可以通过浏览器访问https://nginx.itheima.com:31335 和 https://tomcat.itheima.com:31335来查看了

k8s学习--ingress详细解释与应用(nginx ingress controller)) Ingress 是 Kubernetes 中用于管理集群内服务暴露的 API 资源。它提供了 HTTP 和 HTTPS 路由功能,使外部流量能够访问集群内部的服务。通过定义 Ingress 资源,可以控制哪些外部请求能够访问集群中的哪些服务,以及如何路由这些请求。 阅读详情

相关推荐

K8S-INGRESS原理,部署及应用

Ingress解决的是新的服务加入后,域名和服务的对应问题,基本上是一个ingress的对象,通过yaml进行创建和更新进行加载。来保护 Ingress。的服务)配置成外网能够访问的URL,流量负载均衡,及SSL,并提供域名访问的虚拟主机等,客户通过访问URL(API资源服务的形式,例如:caas.one/kibana)进入和请求Service,一个Ingress控制器负责处理所有Ingress的请求流量,它通常是一个负载均衡器,它也可以设置在边界路由器上,或者由额外的前端来帮助处理HA方式的流量。

别来沾边儿 2009

部署ingress-nginx控制器

如果暴露的端口时非标准端口,对应k8s集群外部,还需要部署一个反向代理,例如nginx,haproxy,lvs等。创建的是ingress资源对象,实际上是ingress-controller起作用,ingress controller可以理解为一个监听器,通过不断监听kube-apiserver,实时感知后端service,pod当然也包括ingress的变化,然后ingress controller再结合ingress的配置,更新反向代理负载均衡器。然后部署后查看service,外部机子访问测试。

m0_54534480的博客 1881

二十、服务发布Ingress

类型匹配方式适用场景优缺点Exact完全匹配精确控制特定路径的路由控制严格,灵活性较差。Prefix匹配以指定路径为前缀的请求需要路由整个路径层级或子路径的请求常用,灵活,配置简单。Controller 决定匹配方式灵活的自定义场景或需要兼容旧版的场景依赖 Controller,兼容性差。通常情况下,Prefix是最常用的配置,可以满足绝大多数微服务和静态资源路由的需求。是定义 Ingress Controller 的资源,标识 Controller 的类型和行为。是Ingress。

Cyan_Jiang的博客 1074

Kubernetes Ingress配置HTTPS

简介 K8S的Ingress启用Https 准备: 1.一个https的证书,阿里云可以免费申请一个单域名证书,有效期一年 步骤: 1.创建 secret $unzip unzip 3937326_app.*****.com_nginx.zip #该文件就是阿里云上下载下来的证书 $mv 3937326_app.*****.com.pem tls.crt $mv 3937326_app.*****.com.key tls.key $kubectl -n prod create secr...

少说多做 7565

隐藏nginx-ingress版本信息的设置方法

首先,我们需要明确一点,nginx-ingress是一个基于Nginx的开源反向代理和负载均衡器。在默认情况下,nginx-ingress会将其版本信息包含在HTTP响应头中,这可能会暴露系统的一些敏感信息。通过修改nginx-ingress的配置文件并重启nginx-ingress,我们可以成功隐藏版本信息,增加系统的安全性。在Rancher中,当进行安全检查时,有时需要隐藏nginx-ingress的版本信息,以增加系统的安全性。首先,我们需要获取nginx-ingress的配置文件。

CodeByte的博客 644

Rancher安全检查:隐藏nginx-ingress版本信息的简单设置

Nginx Ingress Controller是一个基于Nginx的Kubernetes Ingress控制器,它负责将传入的请求路由到Kubernetes集群中的不同服务。因此,在使用Rancher进行容器编排时,请务必注意保护您的系统免受潜在的攻击。通过减少攻击者可以获得的信息,我们可以增加系统的安全性,降低遭受攻击的风险。然后,在Ingress列表中,找到相应的Ingress条目并复制外部访问地址。然后,在"应用和服务"页面中,选择对应的Ingress Controller。

PixelCoder的博客 382

K8S的ingress介绍和安装ingress

在没有ingress之前,只能基于svc的NodePort或者LoadBalancer实现内部的pod对外访问,如果遇到多个服务要监听80端口时。很明显无论哪种类型都无法实现,如果非要实现,就得在K8S集群外部部署一个LB设备,来代理到对应svc资源。而ingress就可以很好的解决这个问题。例如nginx的一个80端口可以给多个实例使用所谓的ingress指的是一种规则,基于用户访问的请求头路由到正确的svc。简单来说说就是7层代理。

qq_73797346的博客 2381

kubernetes的ingress实现同时支持http和https

kubernetes的ingress实现同时支持http和https

rendongxingzhe的博客 5572

K8s 之 Ingress 及 Ingress Controller

Ingress 简介与部署指南 本文介绍了 Kubernetes 中的 Ingress 概念及其部署方法。Ingress 是管理集群外部访问的 API 对象,负责 HTTP/HTTPS 路由,与 Service 的内部服务发现形成互补。 核心要点: Ingress 功能:提供外部访问入口、基于域名/路径的路由、SSL/TLS 终止和负载均衡 与 Service 暴露方式的对比:Ingress 工作在应用层(L7),支持域名访问,是最推荐的生产环境方案 Ingress 与 Controller 的关系:Ing

liu_chen_yang的博客 1143

从数据到特征:基于CAT12的MRI图像预处理实战指南

本文详细介绍了使用CAT12工具进行MRI图像预处理的完整实战流程。从数据获取、环境搭建到核心的AC-PC校正、组织分割、空间标准化与调制,逐步解析如何将原始脑影像数据转化为可用于机器学习的标准化特征图。重点阐述了预处理作为脑影像分析‘生命线’的重要性,并提供了避坑指南与自动化脚本建议,帮助研究者构建高质量的阿尔茨海默症分类模型输入特征。

weixin_29065959的博客 308

第三方系统(异构系统)基于token身份认证方式访问Ecology9的Restful接口Ecology9服务器配置部分

通过Token的认证方式调用Ecology9系统Restful业务接口服务器配置部分

svsou的专栏 2173

Ingress简单使用

Ingress 是 Kubernetes 中用于公开和管理集群内服务的一种 API 资源。它充当了集群入口的角色,可以将外部流量路由到集群内部的服务,同时提供了一些高级功能,如负载均衡、TLS 终止、虚拟主机路由等。下面是 Ingress 的一个简单示例,可将所有流量都发送到同一 Service:通过配置,Ingress 可为 Service 提供外部可访问的 URL、对其流量作负载均衡、 终止 SSL/TLS,以及基于名称的虚拟托管等能力。

小五 3696

LabVIEW vs Python:谁更适合你的ATE自动化测试系统?实测对比与选型建议

本文深入对比了LabVIEW和Python在ATE自动化测试系统中的性能表现、开发效率和应用场景,帮助工程师根据实时控制需求、数据处理复杂度及团队技能做出最优选型决策。通过实测数据和典型案例,分析两者在硬件集成、系统性能和维护成本等方面的差异,并提供混合架构实施建议。

weixin_29240711的博客 275

Kubernetes 之Ingress 从基础到实战全解析

Kubernetes Ingress是管理外部HTTP/HTTPS流量访问集群内服务的API资源对象,提供负载均衡、SSL终止和基于名称的虚拟主机等功能。与Service不同,Ingress工作在应用层(HTTP),支持基于域名和路径的路由。部署Ingress需要两个核心组件:Ingress资源(定义路由规则的YAML)和Ingress控制器(实际执行规则的Pod)。

小刘运维 1125

FME入门系列教程3-带你玩转GIS数据搬运与处理

FME(Feature Manipulation Engine)就像GIS界的"瑞士军刀",它能轻松解决90%的数据处理难题。我最初接触FME是因为要处理200多个不同格式的CAD地形图,传统方法需要1周时间,用FME只花了2小时!:支持300+数据格式(Shapefile、GeoJSON、CAD、Excel等)添加Reader(数据源):选择示例数据roads.shp。添加Writer(输出):设置输出为GeoJSON格式。:将常用流程保存为Template(.fmwt)

weixin_41234946的博客 1241

openlayers全面教程306+【目录】

vue+openlayers系列教程旨在为开发者提供简单快捷的示例。在每一个示例中,解释相应的API知识点。

大剑师兰特的GIS世界 2万+

K8s中配置使用ingress

前面也提到,Ingress资源要正常工作,集群必须有一个正在运行的 Ingress 控制器, Ingress 控制器不是随集群自动启动的,目前k8s项目中,支持和维护 AWS、 GCE 和 Nginx Ingress 控制器;当然也有一起其他三方的控制器可使用;注意:配置文件中除了镜像的地址改后,ingress-nginx-controller的Service默认的type、ingress-nginx-controller的Deployment的配置中的hostNetwork也按照需求改一下。

tonglei111的博客 1525

Android 系统低内存lowmemorykiller关于阈值修改 minfreeAbsKbytes优化

在系统rom定制化开发中,在对于运行内存ram 1G和2G的设备中,对于内存使用高峰期时,minfreeAbsKbytes优化很关键 调整合理的minfree,让内存合理的使用很关键,接下来分析相关功能的实现

安卓兼职framework和app工程师的博客 521

K8s: Ingress对象, 创建Ingress控制器, 创建Ingress资源并暴露服务

外部到 K8s work node 上的请求,所以,它就是类似于 nginx 的组件。简单来说 ingress controller 实际在系统里面创建一系列的pod。5 )基于 ingress 控制器创建 ingress 资源,并对外暴露服务。本质上就是运行在 K8s服务器上的一系列的 pod, 通过 pod 来接管。有了这样的一个组件在K8s平台运行起来之后,可以检查部署版本,粘贴如下。综上,ingress 的控制器已经搭建完毕。3 )最小 Ingress 资源示例。4 )Ingress 控制器。

Wang的专栏 1894

Android 车联网——CarAudioService介绍(六)

CarAudioService 是 Android Automotive OS 中的一个重要组件,用于管理车辆中的音频功能。它是 Android Auto 的一部分,负责处理车辆音频的播放、控制和路由。CarAudioService 使用标准的 Android 组件架构,基于 Binder 通信机制,提供了一组 API,用于管理车辆音频。它包括以下主要功能:音频路由管理:CarAudioService 可以让开发者控制音频的路由,即将音频发送到不同的输出设备,例如车辆的扬声器、耳机等。

小旭的专栏 3199

LLC型自驱动半桥谐振变换器:电压电流变化与自然换向解析

变换器的工作状态经历了多个阶段,从模态一的关断状态,到模态二和三的电流供电状态,每个阶段都得到了合理的设计和优化。的工作原理,尤其是在半个周期内的电压和电流变化。上图 展示了该变换器在工作时的电压和电流波形,它为我们揭示了变换器如何通过精确的电流和电压控制,优化性能并实现高效能转换。,并根据负载情况调整电流和电压的工作模式,能够极大提升变换器的效率,尤其是在零电压开通和自然换向的设计中,发挥着关键作用。这意味着,电流会随着时间周期的变化,呈现典型的振荡波形,从而达到良好的电流控制。是两个关键的电流变量。

weixin_43199439的博客 279

Ingress之Ingress与Ingress 控制器

摘要:Ingress是Kubernetes中定义外部流量路由规则的API对象,包含主机名、路径和TLS配置等信息,但本身不处理流量。Ingress控制器是实际运行的程序(如Nginx、Traefik等),负责监控Ingress规则并实现流量转发。两者关系密切:Ingress提供"去哪"的规则说明,控制器解决"怎么去"的实现问题,必须配合使用才能生效。典型部署中,一个集群会有多个Ingress资源,但通常只需少量控制器实例来处理所有规则。

mofeizhi的博客 685

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ingress

ingress:对外提供访问ingress——根据servicename选择sevic——service把请求根据匹配的标签转发到pod支持http 80 https 443。

m0_71178834的博客 961

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

92、K8s之ingress下集

ingress----根据servicename选择service-----service把服务把请求根据匹配的标签转发pod。支持http 80 https 443。

m0_74149099的博客 2469

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

kubernetes之Ingress

Ingress是k8s中实现7层负载的实现方式,是公开集群外部流量到集群内服务的HTTP和HTTPS路由。

匹夫之怒 1842

【云原生】k8s之Ingress

service的作用体现在两个方面,对集群内部,它不断跟踪pod的变化,更新endpoint中对应pod的对象,提供了ip不断变化的pod的服务发现机制;对集群外部,他类似负载均衡器,可以在集群内外部对pod进行访问。在Kubernetes中,Pod的IP地址和service的ClusterIP仅可以在集群网络内部使用,对于集群外的应用是不可见的。

qq_62462797的博客 5090
上一篇: K8S资源和操作
下一篇: 总结 AT、TCC、Saga、XA 模式分析
牧竹子
博客等级 码龄17年 572粉丝 233原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值