二十一、Ingress 进阶实践
架构参考



使用hostnetwork,推荐的方式,使用单独的物理服务器,不部署业务pod的主机。
一、Ingress Nginx Controller 安装
采用helm的安装方式,进行部署。
官网地址:
https://kubernetes.github.io/ingress-nginx/deploy/

github地址:
https://github.com/kubernetes/ingress-nginx
1. 首先安装 Helm(已安装)
# wget https://get.helm.sh/helm-v3.6.3-linux-amd64.tar.gz
# tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
# mv linux-amd64/helm /usr/local/bin/helm[root@k8s-master01 ingress-nginx]#helm version
version.BuildInfo{Version:"v3.15.1", GitCommit:"e211f2aa62992bd72586b395de50979e31231829", GitTreeState:"clean", GoVersion:"go1.22.3"}
下载 Ingress Nginx Controller 安装包
[root@k8s-master01 ingress-up]#helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
"ingress-nginx" has been added to your repositories[root@k8s-master01 ingress-up]#helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "ingress-nginx" chart repository
...Successfully got an update from the "bitnami" chart repository
...Successfully got an update from the "grafana" chart repository
Update Complete. ⎈Happy Helming!⎈[root@k8s-master01 ingress-up]#helm repo list
NAME URL
bitnami https://charts.bitnami.com/bitnami
grafana https://grafana.github.io/helm-charts
ingress-nginx https://kubernetes.github.io/ingress-nginx#查看现有包版本
[root@k8s-master01 ingress]#helm search repo ingress-nginx
NAME CHART VERSION APP VERSION DESCRIPTION
ingress-nginx/ingress-nginx 4.11.2 1.11.2 Ingress controller for Kubernetes using NGINX a...[root@k8s-master01 ingress-up]#helm pull ingress-nginx/ingress-nginx --version 4.0.1
[root@k8s-master01 ingress-up]#ls
helm-v3.6.3-linux-amd64.tar.gz ingress-nginx-4.0.1.tgz
更改对应的配置
[root@k8s-master01 ingress-up]#tar xf ingress-nginx-4.0.1.tgz
[root@k8s-master01 ingress-up]#cd ingress-nginx/
[root@k8s-master01 ingress-nginx]#ls
CHANGELOG.md Chart.yaml ci OWNERS README.md templates values.yaml
[root@k8s-master01 ingress-nginx]#vim values.yaml







需要修改的位置
- Controller 和 admissionWebhook 的镜像地址,需要将公网镜像同步至公司内网镜像仓库(需要自行同步 gcr 镜像,一样的版本可以直接用
registry.cn-beijing.aliyuncs.com/dotbalo/controller:v1.0.0和registry.cn-beijing.aliyuncs.com/dotbalo/kube-webhook-certgen:v1.0) - 镜像的 digest 值注释
# - hostNetwork 设置为
true - dnsPolicy 设置为
ClusterFirstWithHostNet,改了就能解析了 - NodeSelector 添加
ingress: "true"部署至指定节点 - 类型更改为
kind: DaemonSet - 将 ingress nginx 设置为默认的
default:true,如果有多个可以不用设置默认,不加需要再ingress配置文件上单独写指定。
# 部署 ingress,给需要部署 ingress 的节点上打标签
[root@k8s-master01 ingress-nginx]#kubectl label node k8s-node02 ingress=true
node/k8s-node02 labeled# 创建命名空间
[root@k8s-master01 ingress-nginx]#kubectl create ns ingress-nginx
Error from server (AlreadyExists): namespaces "ingress-nginx" already exists# 检查有没用helm装过
[root@k8s-master01 ingress-nginx]#helm list -n ingress-nginx
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION[root@k8s-master01 ingress-nginx]#helm install ingress-nginx -n ingress-nginx .# 注意有点.
# 其他命令,删除,更新
# helm delete
# helm upgrade# 检查
[root@k8s-master01 ingress]#kubectl get po -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-wmxnm 1/1 Running 0 8m22s
[root@k8s-master01 ingress]#ssh k8s-node02
Last login: Thu Jun 13 17:48:55 2024 from 10.1.3.92
[root@k8s-node02 ~]# netstat -lnpt |grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 15851/nginx: master
tcp6 0 0 :::80 :::* LISTEN 15851/nginx: master
[root@k8s-node02 ~]# ps aux | grep nginx
......
controller --publish-service=ingress-nginx/ingress-nginx-controller --election-id=ingress-controller-leader --controller-class=k8s.io/ingress-nginx --configmap=ingress-nginx/ingress-nginx-controller --validating-webhook=:8443 --validating-webhook-certificate=/usr/local/certificates/cert --validating-webhook-key=/usr/local/certificates/key
二、Ingress Nginx入门使用
创建一个用于学习 Ingress 的 Namespace,之后所有的操作都在此 Namespace 进行:
[root@k8s-master01 ingress]# kubectl create ns study-ingress
namespace/study-ingress created
创建一个简单的 Nginx 模拟 Web 服务:
[root@k8s-master01 ingress]#kubectl create deploy nginx --image=registry.cn-beijing.aliyuncs.com/dotbalo/nginx:1.15.12 -n study-ingress
deployment.apps/nginx created
然后创建该 Web 容器的 Service:
[root@k8s-master01 ingress]# kubectl expose deploy nginx --port 80 -n study-ingress
service/nginx exposed
[root@k8s-master01 ingress-up]#kubectl get svc -n study-ingress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx ClusterIP 10.96.226.26 <none> 80/TCP 132m#测试连接
[root@k8s-master01 ingress]#curl 10.96.226.26
.....
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;
.....
</body>
</html>
之后创建 Ingress 指向上面创建的 Service:
# vim web-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-ingressnamespace: study-ingress
spec:rules:- host: nginx.test.comhttp:paths:- backend:service:name: nginx # pod 的service 名称port:number: 80path: /pathType: ImplementationSpecific# 查看,ingress和service是同一个命名空间
[root@k8s-master01 ingress-up] # kubectl get ingress -n study-ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
nginx-ingress nginx nginx.test.com 80 6m28s
[root@k8s-master01 ingress-up] # kubectl get svc -n study-ingress
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx ClusterIP 10.96.226.26 <none> 80/TCP 136m# ingress-nginx-controller是全局的,能够自动识别ingress
[root@k8s-master01 ingress-up] # kubectl get po -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-controller-wmxnm 1/1 Running 0 15h[root@k8s-master01 ingress-up] # kubectl exec -it ingress-nginx-controller-wmxnm -n ingress-nginx -- bash
bash-5.1$ grep "nginx.test.com" nginx.conf## start server nginx.test.comserver_name nginx.test.com ;## end server nginx.test.com
# 可以看见已经有配置了。
创建该 Ingress:
[root@k8s-master01 ingress-up]# kubectl create -f web-ingress.yaml
ingress.networking.k8s.io/nginx-ingress created
注意:只能通过ingress-controller去访问,所以,在哪台上安装的controller就是访问哪台。此处安装在node02上
[root@k8s-master01 ingress-up]#kubectl get po -n ingress-nginx -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
ingress-nginx-controller-wmxnm 1/1 Running 0 15h 10.1.3.35 k8s-node02 <none> <none>
curl验证
[root@k8s-master01 ingress-up]#curl -H "Host:nginx.test.com" 10.1.3.35
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>body {width: 35em;margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif;}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p><p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p>
</body>
</html>
修改host验证


查看日志
[root@k8s-master01 ingress-up]#kubectl get po -n study-ingress
NAME READY STATUS RESTARTS AGE
nginx-745cfd564b-qlqr7 1/1 Running 0 155m
[root@k8s-master01 ingress-up]#kubectl logs -f nginx-745cfd564b-qlqr7 -n study-ingress
172.16.32.128 - - [07/Jul/2024:06:08:44 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
172.16.58.192 - - [07/Jul/2024:06:49:38 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" 相关文章:
二十一、Ingress 进阶实践
架构参考 使用hostnetwork,推荐的方式,使用单独的物理服务器,不部署业务pod的主机。 一、Ingress Nginx Controller 安装 采用helm的安装方式,进行部署。 官网地址: https://kubernetes.github.io/ingress-nginx/deploy/ github地址: https://github.com/kubernetes/in…...
ES学习Promise对象(九)
这里写目录标题 一、概念二、示例基本使用使用 Promise 对象封装Ajaxthen() 方法catch() 方法 一、概念 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。Promise 是一个对象,Promise 提供统一…...
寻找适合小户型的开源知识库open source knowledge base之路
寻找一个开源的知识库,为了把以前花很多时间收集的信息或是项目/课程资料放到一个容易归类和管理的私有自主系统中,以便更容易查阅,花更少时间收集、对比版本及分享等一系列管理工作,同时确保在需要时可以相对快速找到有用的资料&…...
Linux高级--2.6 网络面试问题
tcp 与 udp的区别 1.tcp 是基于连接的 UDP是基于数据包 2.处理并发的方式不通 a.tcp用epoll进行监听的 b. udp是模拟tcp的连接过程,服务端开放一个IP端口,收到连接后,服务端用另一个IP和端口发包给客户端。 3.tcp根据协议MTU黏包及…...
在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc
在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc 📖 前言 在 CentOS 7 上使用 NVM 安装 Node.js 后,可能会遇到如下问题: node: /lib64/libm.so.6: version GLIBC_2.27’ not found (required by node) node: /lib64/libc.so.6:…...
音视频入门基础:MPEG2-TS专题(20)——ES流简介
《T-REC-H.222.0-202106-S!!PDF-E.pdf》第27页对ES进行了定义。ES流是PES packets(PES包)中编码的视频、编码的音频或其他编码的比特流。一个ES流(elementary stream)在具有且只有一个stream_id的PES packets序列中携带࿱…...
五子棋小游戏设计(Matlab)
基于Matlab的五子棋小游戏设计 (完整源码运行呈现的GUI界面) (完整的设计说明报告) 需要请随时联系博主,博主基本都在线,能秒回! 随着计算机技术的发展,将传统棋类游戏与编程技术…...
基于Pycharm与数据库的新闻管理系统(3)MongoDB
pip3 install pymongo 1.连接到MongoDB数据库 文件地址:db/mongo_db.py 从 pymongo 模块中导入 MongoClient 类;创建 MongoClient 的一个实例,该实例尝试使用提供的MongoDB连接字符串连接到MongoDB服务器。 from pymongo import MongoClie…...
WebRtc webrtc-streamer部署
文章目录 本文档只是为了留档方便以后工作运维,或者给同事分享文档内容比较简陋命令也不是特别全,不适合小白观看,如有不懂可以私信,上班期间都是在得 WebRtc webrtc-streamer 部署 docker run -p 8000:8000 -it mpromonet/webrt…...
CVPR-2024 | 具身导航模型大一统!NaviLLM:学习迈向具身导航的通用模型
作者:Duo Zheng, Shijia Huang, Lin Zhao, Yiwu Zhong, Liwei Wang 单位:香港中文大学,上海人工智能实验室,感知与交互智能中心 论文链接:Towards Learning a Generalist Model for Embodied Navigation(…...
CAN201 Introduction to Networking(计算机网络)Pt.2 传输层
文章目录 3. Transport Layer(传输层)3.1 Multiplexing and demultiplexing(多路复用和多路分解)3.2 Connectionless transport:UDP3.3 Principles of reliable data transfer3.4 Pipelined communication3.5 TCP: con…...
git仓库多人协作新建分支 合并到主分支流程详解
在多人协作的 Git 仓库中,新建分支并最终将其合并到主分支的流程是为了实现团队协作、提高代码的可管理性、确保代码质量,并且避免多人同时修改同一部分代码导致冲突。以下是这个流程的目的和具体步骤。 目录 1. 在 master 上新建一个分支 2. 进行功能…...
Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码 【AI辅助开发系列】
🎀🎀🎀【AI辅助编程系列】🎀🎀🎀 Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码Visual Studio 安装和管理 GitHub CopilotVisual Studio 使用 GitHub Copilot 扩展Visual Studio 使用 GitHu…...
【时间之外】IT人求职和创业应知【74】-运维机器人
目录 OpenAI最强推理模型o3发布,AGI测试能力暴涨 英伟达宣布收购以色列AI初创企业Runai 汤姆猫首款AI机器人产品明日发售 心勿贪,贵知足。 感谢所有打开这个页面的朋友。人生不如意,开越野车去撒野,会害了自己,不如…...
高阶:基于Python paddleocr库 提取pdf 文档高亮显示的内容
预览 第1步:理解基本结构和导入必要的库 # 1. 首先导入需要的库 import os # 用于处理文件和路径 import cv2 # 用于图像处理 import numpy as np # 用于数值计算 from paddleocr import PaddleOCR # 用于文字识别 from pdf2image import convert_from_path #…...
STM32项目之环境空气质量检测系统软件设计
目录 前言一、软件需求概述二、需求实现思路1.软件开发工具准备2.温湿度实时监测功能3.空气质量实时监测功能(目前硬件没有买该模块,暂未实现)4.实时时间功能5.视觉、听觉报警功能6.WIFI云平台连接,远程查看数据功能(待…...
重温设计模式--原型模式
文章目录 原型模式定义原型模式UML图优点缺点使用场景C 代码示例深拷贝、浅拷贝 原型模式定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象; 核心中的核心就是 克隆clone ,后面讲 原型模式是一种创建型设计模式,它的主要…...
输变电资质分一级、二级,新办从二级开始,三级已取消
输变电工程专业承包资质分为一级.二级.三级。 一、输变电工程专业承包一级资质标准:1、企业资产净资产5000万元以上。2、企业主要人员(1)机电工程专业一级注册建设师不少于10人。(2)技术负责人…...
浏览器http缓存问题
一、什么是浏览器缓存 浏览器将请求过的资源(html、js、css、img)等,根据缓存机制,拷贝一份副本存储在浏览器的内存或者磁盘上。如果下一次请求的url相同时则根据缓存机制决定是读取内存或者磁盘上的数据还是去服务器请求资源文件…...
结构化Prompt:让大模型更智能的秘诀
一、结构化提示词 1. 什么是结构化? 结构化: 对信息进行组织,使其遵循特定的模式和规则,从而方便有效理解信息。结构化的思想在各类文本中都得到了广泛应用,例如文章、书籍中都使用了标题、子标题、段落等语法结构。结构化 Prompt 的思维方…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...
