K8S中Ingress的采用

news/2025/12/6 22:10:46/文章来源:https://www.cnblogs.com/gccbuaa/p/19316725

1. Ingress的介绍

1.1 Pod 的漂移

Kubernetes 具有强大的副本控制能力,能保证在任意副本(Pod)挂掉时自动从其他机器启动一个新 的,还可以动态扩容等,通俗地说,这个 Pod 可能在任何时刻出现在任何节点上,也可能在任何时刻死 在任何节点上;那么自然随着 Pod 的创建和销毁,Pod IP 肯定会动态变化;那么如何把这个动态的 Pod IP 暴露出去?这里借助于 Kubernetes 的 Service 机制,Service 可以以标签的形式选定一组带有指定标签的 Pod,并监控和自动负载他们的 Pod IP,那么我们向外暴露只暴露 Service IP 就行了;这就是 NodePort 模式:即在每个节点上开起一个端口,然后转发到内部 Pod IP 上。

客户端请求-->node 节点的 ip:端口--->service 的 ip:端口--->pod 的 ip:端口

1.2 Ingress 介绍

Ingress 官网定义:Ingress 可以把进入到集群内部的请求转发到集群中的一些服务上,从而可以把服务映射到集群外部。Ingress 能把集群内 Service 配置成外网能够访问的 URL,流量负载均衡,提供基于 域名访问的虚拟主机等。

1.3 Ingress Controller 介绍

Ingress Controller 是一个七层负载均衡调度器,客户端的请求先到达这个七层负载均衡调度器,由七层 负载均衡器在反向代理到后端 pod,常见的七层负载均衡器有 nginx、traefik,以我们熟悉的 nginx 为 例,假如请求到达 nginx,会通过 upstream 反向代理到后端 pod 应用,但是后端 pod 的 ip 地址是一 直在变化的,因此在后端 pod 前需要加一个 service,这个 service 只是起到分组的作用,那么我们 upstream 只需要填写 service 地址即可。

1.4 Ingress 和 Ingress Controller 总结

Ingress Controller 可以理解为控制器,它通过不断的跟 Kubernetes API 交互,实时获取后端 Service、Pod 的变化,比如新增、删除等,结合 Ingress 定义的规则生成配置,然后动态更新上边的 Nginx 或者 trafik 负载均衡器,并刷新使配置生效,来达到服务自动发现的作用。

Ingress 则是定义规则,通过它定义某个域名的请求过来之后转发到集群中指定的 Service。它可以通过 Yaml 文件定义,可以给一个或多个 Service 定义一个或多个 Ingress 规则。

2. Ingress 完整实战指南

2.1 获取官方部署文件

https://github.com/kubernetes/ingress-nginx/releases

## 获取文件 我这里的文件版本是 1.5.1
curl -O https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.5.1/deploy/static/provider/baremetal/deploy.yaml

2.2 部署前修改YAML文件

## 1. 这里我修改了nodePort的端口范围,在command的字段下面添加如下参数
[root@k8s-master /etc/kubernetes/manifests]# grep    service-node-port kube-apiserver.yaml- --service-node-port-range=80-32767
## 2. 重启kube-apiserver
## 下载的 deploy.yaml 包含完整的 RBAC、Deployment 等配置。默认使用 LoadBalancer 类型 Service,需要改为 NodePort.
...
---
apiVersion: v1
kind: Service
metadata:labels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/component: controllername: ingress-nginx-controllernamespace: ingress-nginx
spec:type: NodePortports:- name: httpport: 80protocol: TCPtargetPort: httpnodePort: 80- name: httpsport: 443protocol: TCPtargetPort: httpsnodePort: 443selector:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/instance: ingress-nginxapp.kubernetes.io/component: controller
...
---

2.3 部署controller

# 1. 直接应用部署后的yaml文件
[root@k8s-master /manifests/ingress]# kubectl  apply -f deployment.yaml
# 2. 查看pod状态
[root@k8s-master /manifests/ingress]# kubectl get pods -n ingress-nginx
NAME                                       READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-89769d8f9-kjcsg   1/1     Running   0          32m
# 3. 检查 service
[root@k8s-master /manifests/ingress]# kubectl get svc -n ingress-nginx
NAME                       TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)                 AGE
ingress-nginx-controller   NodePort   10.200.132.122           80:80/TCP,443:443/TCP   33m
# 4. 查看 controller 日志
[root@k8s-master /manifests/ingress]# kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx -f

3. 创建测试应用

3.1 部署应用v1

[root@k8s-master /manifests/ingress]# cat tomcat-demo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: ingress-tomcat
spec:replicas: 2selector:matchLabels:app: tomcattemplate:metadata:labels:app: tomcatspec:containers:- name: tomcatimage: 192.168.0.77:32237/library/tomcat:alpineports:- name: httpcontainerPort: 8080name: ajpcontainerPort: 8009
---
apiVersion: v1
kind: Service
metadata:name: service-tomcat
spec:selector:app: tomcatports:- name: httptargetPort: 8080port: 8080- name: ajptargetPort: 8009port: 8009
## 检查 pod 和 service
[root@k8s-master /manifests/ingress]# kubectl  get pod,svc

4. 核心ingress的配置

4.1 基础单路由配置

[root@k8s-master /manifests/ingress]# cat ingress-basic.yaml
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:name: tomcat
spec:controller: k8s.io/ingress-nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: basic-ingressnamespace: default
spec:## ingressClassName 要一直ingressClassName: tomcat## 定义后端转发的规则rules:## #通过域名进行转发- host: tomcat.lucky.comhttp:paths:- path: /pathType: Prefix## 配置后端服务backend:## service的名称要一直service:name: service-tomcatport:number: 8080
## 检查ingress
[root@k8s-master /manifests/ingress]# kubectl  get ingress
NAME            CLASS    HOSTS              ADDRESS         PORTS   AGE
basic-ingress   tomcat   tomcat.lucky.com   192.168.0.162   80      7m11s
[root@k8s-master /manifests/ingress]# kubectl  describe ingress basic-ingress

4.2 访问

--- 1. 在window的电脑上修改hosts文件:
C:\
Windows\System32\drivers\etc
--- 2. 管理员打开hosts 文件,增加一下内容
192.168.0.162 tomcat.lucky.com
--- 3. 浏览器域名访问

4.3 Ingress 的https代理配置

--- 1. 创建自签证书(测试用)
[root@k8s-master /manifests/ingress]# openssl req -x509 -nodes -days 365 -newkey rsa:2048   -keyout tls.key -out tls.crt   -subj "/CN=tomcat.lucky.com"
--- 2. 创建 Secret
[root@k8s-master /manifests/ingress]# kubectl create secret tls tomcat-ingress-secret    --cert=tls.crt --key=tls.key  --namespace=default
-- 3. 查看
[root@k8s-master /manifests/ingress]# kubectl  describe  secret tomcat-ingress-secret
--- 4. 修改yaml文件
[root@k8s-master /manifests/ingress]# cat ingress-basic-tls.yaml
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:name: tomcat
spec:controller: k8s.io/ingress-nginx
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: basic-ingressnamespace: default
spec:ingressClassName: tomcat## 添加tls信息tls:- hosts:- tomcat.lucky.com## secret 名称secretName: tomcat-ingress-secretrules:- host: tomcat.lucky.comhttp:paths:- path: /pathType: Prefixbackend:service:name: service-tomcatport:number: 8080
--- 4. 浏览器通过https的方式访问

如果想详细了解更多知识的小伙伴可以参考我的个人博客:

https://xingzhibang.top/

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

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

相关文章

『NAS』在群晖部署一款好看的白板工具-Excalidraw

点赞 + 关注 + 收藏 = 学会了整理了一个NAS小专栏,有兴趣的工友可以关注一下 👉 《NAS邪修》Excalidraw 是一款免费开源的手绘风格在线白板工具,支持实时协作和无限画布,无需注册即可直接使用,适合快速绘制草图、…

方差的迭代计算公式 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Ubuntu下,MySQL密码遗失时修改密码

问题背景 MySQL密码连接不上,需要重置密码 解决方案 由于修改密码本身需要连接到数据库,因此需要另一个系统账号来登录数据库。 下面是相关步骤: 1. 首先执行以下命令 sudo cat /etc/mysql/debian.cnf 获取到系统账…

支离破碎发言(七)

退役了,曾经的目标变为幻想,当然我其实也知道大概率最后就是幻想。 回想过来这一年多的 OI 生涯,也没什么可埋怨的,毕竟自己实力确实没到省队水准。 不过一年多 OI 生涯给我的最大感触就是,贵圈真乱。 因为竞赛本…

MD-FPN

MD-FPN 是一种优化的特征金字塔网络结构,旨在提高多尺度目标检测的性能。它通过引入多尺度预测融合和注意力机制,增强了特征提取能力 MD-FPN(Multi-Dilation Feature Pyramid Network)可以与 Faster R-CNN 结合使用…

2025最新贵州特产/伴手礼供应商TOP5推荐!贵州/贵阳/遵义/毕节/黔东南特产选购平台/渠道/供应商/采购渠道榜单发布,甄选贵州地道风物好礼

随着消费者对地域特色产品和健康生活方式的追求日益提升,贵州特产凭借独特的自然禀赋与文化底蕴备受青睐。本榜单基于品牌实力、产品特色、服务体系、文化传承四大维度,结合市场口碑与消费者反馈,权威解析2025年五大…

进程监控:通过 SSH 远程监测嵌入式设备进程重启

背景 dhcp频繁请求ip导致cpr反复重启。 为了量化这一问题,并精准捕捉重启发生的时间点(以便与网络日志对齐),我们需要一个外部监控工具。该工具需要满足以下需求:非侵入式:无需修改设备固件,通过 SSH 远程监控。…

街头徒手健身3硬核核心训练

3 硬核核心训练 “我们并非只是这副躯壳,别过分执着于皮囊表象。”—— 乔治・哈里森 作为一名痴迷功能性健身的爱好者,我一直渴望近距离观察人体内部的运转机制。所以几年前,当我的一位客户送给我《人体世界》展览…

我们的休闲娱乐区,会变成什么样子(哽咽)

本文同步发布于洛谷休闲娱乐区 我们的休闲娱乐区,会变成什么样子(哽咽) 或许我们要先追问,最初的休闲娱乐区,是什么样子的呢? 灌水区倒闭之后,审查力度加大,休闲娱乐区最初只是一片净土。 然而,很快,伴随着小…

【ZeroRange WebRTC】对称加密 vs 非对称加密(从原理到实践) - 详解

【ZeroRange WebRTC】对称加密 vs 非对称加密(从原理到实践) - 详解2025-12-06 21:43 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto…

Cloudflare成功抵御AISURU僵尸网络发起的破纪录29.7 Tbps DDoS攻击

Cloudflare在2025年第三季度成功抵御了AISURU僵尸网络发起的一场峰值达29.7 Tbps的破纪录DDoS攻击。报告揭示了DDoS攻击在规模、复杂性和目标行业上的显著演变,并对当前威胁态势下的防御策略提出建议。Cloudflare成功…

2025最新贵州伴手礼厂家/采购渠道/供应商/平台/卖场/超市TOP5推荐!地道风物+文化赋能权威榜单发布,甄选贵礼传递黔地心意

随着文旅消费升级和健康生活理念深入人心,兼具地域特色与文化内涵的伴手礼成为连接游客与目的地的重要纽带。本榜单基于产品地道性、健康属性、文化融合度、服务覆盖力四大核心维度,结合行业协会数据与消费者口碑调研…

从 Spring Boot 2.x 到 3.5.x + JDK21:一次完整的生产环境迁移实战 - Rainbow

从 Spring Boot 2.x 到 3.5.x + JDK21:一次完整的生产环境迁移实战 @目录从 Spring Boot 2.x 到 3.5.x + JDK21:一次完整的生产环境迁移实战升级背景升级目标与核心变化完整升级步骤第一阶段:准备工作(JDK 8 环境)…

2025.12.6日21:24-incapacity无能力

ai智能发布助手当前Windows 11已使用内存:MB是460 南京4℃ 霾Enjoy the beauty and joy of the moment; dont worry too much about the future. 享受当下的美好和快乐,不要过于担忧未来。今日热点如下挑战者杯,我的…

001.makdown快速入门

基础语法 1.标题:# 一级标题## 二级标题### 三级标题#### 四级标题##### 五级标题###### 六级标题// # 与 标题名 之间要加空格2.代码块://```cpp// ```//在两行```之间添加代码 //第一行```后的cpp表示代码使用的语…

Focal Loss

Focal Loss 是一种用于解决类别不平衡问题的损失函数,特别适用于目标检测任务。在目标检测中,背景类别通常远多于目标类别,这导致模型在训练过程中对背景类别过度拟合,而忽视了目标类别。Focal Loss 通过调整损失函…

2025最新贵州/贵阳手信/伴手礼厂家 TOP5 评测!地道风物+文化赋能权威榜单发布,甄选贵礼传递山水心意

随着文旅消费升级,兼具地域特色与文化内涵的手信成为游客出行必备。本榜单基于产品地道性、文化融合度、全渠道服务、品质保障四大维度,结合百万消费者真实反馈与行业专家评审,权威解析2025年五大贵州手信厂家综合实…

Oracel VirtualBox安装Windows11时无法找到ISO文件或不满足系统要求

如果在启动VirtualBox启动后,出现下面的情况 取消UEFI后,重新启动即可但取消UEFI又会导致下面的问题 这时按Shift+F10,输入 regedit 并按回车键启动注册表编辑器。在注册表编辑器左侧的树状结构中,导航到以下路径:…

百度统计、Google Analytics平替开源网站分析工具:Umami - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …