基于 Nginx Ingress Controller 的四层(TCP)转发配置

基于 Nginx Ingress Controller 的四层(TCP)转发配置

1. 简介

本指南将展示如何通过配置 ConfigMap 来实现 Nginx Ingress Controller 的四层转发(TCP),并通过配置测试应用程序验证配置的有效性。本文中使用的 Kubernetes 组件包括 ConfigMapServiceDeployment 以及 LoadBalancer 类型的 Service。还将演示如何热加载修改 ConfigMap,以使更改能够即时生效。 Nginx-Ingress-Controller 的安装文档可以参考此链接。

2. 配置 Ingress Controller 的 TCP 服务

2.1 创建 TCP 服务配置 ConfigMap

首先,创建一个 ConfigMap 来定义 Ingress Nginx 的 TCP 服务,将特定的端口转发到相应的服务。

apiVersion: v1
kind: ConfigMap
metadata:name: tcp-servicesnamespace: ingress-nginx
data:53: "kube-system/kube-dns:53"8080: "ingress-nginx/nginx-hello-world:8080"
  • 53: 用于将 DNS 请求转发到 kube-dns 服务。
  • 8080: 用于将请求转发到部署的 nginx-hello-world 服务。

2.2 创建 LoadBalancer 类型的 Ingress Nginx Service

为 Ingress Nginx 创建一个 LoadBalancer 类型的 Service,使其支持四层 TCP 负载均衡。(如果没有LoadBalancer 可以使用在启动一个有 telnet 和 curl 的容器通过 ClusterIP 访问)

apiVersion: v1
kind: Service
metadata:name: ingress-nginxnamespace: ingress-nginxlabels:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx
spec:type: LoadBalancerports:- name: httpport: 80targetPort: 80protocol: TCP- name: httpsport: 443targetPort: 443protocol: TCP- name: proxied-tcp-9000port: 53targetPort: 53protocol: TCP- name: tcp-8080port: 8080targetPort: 8080protocol: TCPselector:app.kubernetes.io/name: ingress-nginxapp.kubernetes.io/part-of: ingress-nginx

2.3 修改 ingress-nginx-controller 的启动命令

为了使 tcp-services ConfigMap 生效,需要将其添加到 Ingress Nginx Controller 的启动参数中,执行命令 kubectl edit deploy ingress-nginx-controller -n ingress-nginx添加参数如下:

 args:- /nginx-ingress-controller- --tcp-services-configmap=ingress-nginx/tcp-services

3. 部署测试应用

接下来,我们将部署一个测试应用(基于 Nginx 的 “Hello World”),并为其创建相应的 Service

3.1 创建 Nginx Index ConfigMap

使用 ConfigMap 来定义 Nginx 的默认页面内容:

apiVersion: v1
kind: ConfigMap
metadata:name: nginx-index
data:index.html: |<!DOCTYPE html><html><head><title>Hello World</title></head><body><h1>Hello, World!</h1></body></html>

3.2 部署 Nginx Hello World 应用

使用以下 Deployment 来部署 Nginx 容器,容器中挂载了自定义的 index.html 页面。

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-hello-worldlabels:app: nginx-hello-world
spec:replicas: 1selector:matchLabels:app: nginx-hello-worldtemplate:metadata:labels:app: nginx-hello-worldspec:containers:- name: nginximage: nginxports:- containerPort: 80volumeMounts:- name: nginx-configmountPath: /usr/share/nginx/html/index.htmlsubPath: index.htmlvolumes:- name: nginx-configconfigMap:name: nginx-index

3.3 创建服务以暴露 Nginx 应用

使用 ClusterIP 类型的服务来暴露 Nginx 应用。

apiVersion: v1
kind: Service
metadata:name: nginx-hello-world
spec:selector:app: nginx-hello-worldports:- protocol: TCPport: 8080targetPort: 80type: ClusterIP

4. 测试四层转发配置

4.1 验证应用访问

可以通过 Kubernetes 集群的 Service IP 地址访问 Nginx 测试应用,以下是测试的示例:

[root@nettools /]# curl 10.102.195.104:8080
<!DOCTYPE html>
<html>
<head><title>Hello World</title>
</head>
<body><h1>Hello, World!</h1>
</body>
</html>

这里,10.102.195.104ingress-nginx 服务的 Cluster IP,8080 是在配置中定义的端口。

4.2 获取服务信息

使用以下命令查看 ingress-nginx 服务的详细信息:

kubectl get svc -n ingress-nginx

输出示例:

NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                  AGE
ingress-nginx                        LoadBalancer   10.102.195.104   localhost     80:30170/TCP,443:30677/TCP,53:31825/TCP,8080:32284/TCP   23m
ingress-nginx-controller             LoadBalancer   10.100.242.98    localhost     80:30663/TCP,443:32345/TCP                               30m
ingress-nginx-controller-admission   ClusterIP      10.97.94.62      <none>        443/TCP                                                  30m
nginx-hello-world                    ClusterIP      10.97.223.28     <none>        8080/TCP                                                 113s

5. 热加载修改 ConfigMap

为了更新 TCP 服务的配置而不需要重启 Ingress 控制器,我们可以直接修改 ConfigMap,并应用变更:

5.1 更新 ConfigMap

例如,如果需要修改 TCP 服务端口配置,只需编辑 tcp-services ConfigMap:

kubectl edit configmap tcp-services -n ingress-nginx

编辑完成后保存即可,Ingress Nginx 控制器会自动加载新的配置。

5.2 验证修改是否生效

修改 ConfigMap 后,可以通过重新访问相应的服务端口来验证变更是否生效。使用 curl 或其他网络请求工具检查服务的可达性。

6. 结论

通过本文,我们成功配置了 Nginx Ingress Controller 的四层 TCP 转发,部署了一个测试应用。Ingress 可以通过 ConfigMap 的变更进行热加载。这样可以为 Kubernetes 集群中的不同服务提供灵活的四层负载均衡能力。

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

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

相关文章

生产Redis批量删除数据

生产Redis不能直接删除大量的Key&#xff0c;避免占用主线程阻塞正常业务&#xff0c;因此需要批量多次删除。一下代码经过生成磨炼&#xff0c;可以直接测试使用。 #!/bin/bash# Redis服务器地址 REDIS_HOST"127.0.0.1" # Redis端口 REDIS_PORT6379 # 匹配的键模式…

JDK的版本演化,JDK要收费吗?

Java版本演化历史 Java的版本历史可以追溯到1995年&#xff0c;以下是Java语言自诞生以来的主要版本及其关键特性&#xff1a; 一、早期版本 Java 1.0&#xff08;1996年1月发布&#xff09; 引入了Java虚拟机&#xff08;JVM&#xff09;和Java应用编程接口&#xff08;API&…

kafka+zookeeper集群搭建

kafkazookeeper集群搭建 规划 服务ip端口配置kafkazookeeper192.168.138.1512181/9092/2888/38882CPU、2G内存kafkazookeeper192.168.138.1522181/9092/2888/38882CPU、2G内存kafkazookeeper192.168.138.1532181/9092/2888/38882CPU、2G内存 开启端口,关闭selinux firewall…

书生大模型实训营第4期进阶岛第三关:LMDeploy 量化部署进阶实践

书生大模型实训营第4期进阶岛第三关&#xff1a;LMDeploy 量化部署进阶实践 1. 配置 LMDeploy 环境1.1 开发机的创建与环境搭建1.2 模型获取1.3 模型测试 2. InternLM2.5 的部署与量化2.1 LMDeploy API 部署 InternLM2.52.1.1 启动API服务器2.1.2 以命令行形式连接 API 服务器2…

visionpro官方示例分析(一) 模板匹配工具 缺陷检测工具

1.需求&#xff1a;找出图像中的这个图形。 2.步骤 使用CogPMAlignTool工具&#xff0c;该工具是模板匹配工具&#xff0c;见名知意&#xff0c;所谓模板匹配工具就是说先使用该工具对一张图像建立模板&#xff0c;然后用这个模板在其他图像上进行匹配&#xff0c;匹配上了就说…

Z2400027基于Java+SpringBoot+Mysql+thymeleaf引擎的图书馆管理系统的设计与实现 代码 论文

图书馆管理系统的设计与实现 一、项目背景与简介二、系统总体功能三、运行环境与技术选型四、系统架构与模块划分五、系统界面截图六、源码获取 一、项目背景与简介 项目背景&#xff1a; 随着信息技术的不断发展和图书资源的日益丰富&#xff0c;图书馆作为知识传播和学习的重…

GateWay使用手册

好的&#xff0c;下面是优化后的版本。为了提高可读性和规范性&#xff0c;我对内容进行了结构化、简化了部分代码&#xff0c;同时增加了注释说明&#xff0c;便于理解。 1. 引入依赖 在 pom.xml 中添加以下依赖&#xff1a; <dependencies><!-- Spring Cloud Gate…

详谈面试题:Vue、React为什么使用虚拟DOM

虚拟DOM是一种在前端框架中广泛使用的技术&#xff0c;它可以提升开发效率。那么国外流行的框架svelte没有使用虚拟DOM&#xff0c;而是直接操作真实DOM&#xff0c;效率依然很高。为什么Vue和React不采用这种方式呢&#xff1f; 目录 一、框架设计 二、解耦运行环境 三、总…

PHP md5函数 生成的字符串是多少位的

PHP md5() 函数生成的是一个32位的十六进制字符串。 MD5 散列值通常以十六进制数字形式表示&#xff0c;为了保证散列值的唯一性和不可预测性&#xff0c;它们通常由0-9以及a-f的16个字符组成&#xff0c;总共是32个字符。 以下是PHP代码示例&#xff1a; $str "Hello,…

Next.js-样式处理

#题引&#xff1a;我认为跟着官方文档学习不会走歪路 Next.js 支持多种为应用程序添加样式的方法&#xff0c;包括&#xff1a; CSS Modules&#xff1a;创建局部作用域的 CSS 类&#xff0c;避免命名冲突并提高可维护性。全局 CSS&#xff1a;使用简单&#xff0c;对于有传统…

神经网络中的损失函数(Loss Function)

损失函数&#xff08;Loss Function&#xff09;在机器学习和深度学习中扮演着至关重要的角色&#xff0c;它是衡量模型预测值与实际值之间差异程度的函数。通过最小化损失函数&#xff0c;我们可以优化模型的参数&#xff0c;使其预测结果更加准确。 一、损失函数的定义 损失函…

Kong API Gateway 深度解析与实战指南

1. 简介 1.1 什么是Kong API Gateway&#xff1f; Kong 是一款广泛使用的开源 API Gateway 和微服务管理工具&#xff0c;最初由 Mashape&#xff08;现为 Kong Inc.&#xff09;在 2015 年推出。它基于 Nginx 和 OpenResty 构建&#xff0c;旨在为现代应用程序提供高性能、可…

Three.js渲染较大的模型之解决方案

文章目录 Three.js渲染较大的模型 解决方案视锥体剔除实例 和 遮挡剔除 实例视锥体剔除&#xff08;Frustum Culling&#xff09;实例原理概述代码示例解释 遮挡剔除&#xff08;Occlusion Culling&#xff09;实例原理概述代码示例解释 three.js 模型压缩 Three.js渲染较大的模…

AWS账户是否支持区域划分?

在云计算的世界中&#xff0c;亚马逊网络服务&#xff08;AWS&#xff09;凭借其全球化的基础设施和丰富的服务选项受到许多企业和开发者的青睐。一个常见的问题是&#xff1a;AWS账户是否支持区域划分&#xff1f;为了回答这个问题&#xff0c;我们九河云一起深入了解AWS的区域…

鼠标前进后退键改双击,键盘映射(AutoHotkey)

初衷&#xff1a; 1.大部分鼠标为不可自定义按键&#xff0c;可以自定义的又很贵。 鼠标左键是双击是很频类很高的操作&#xff0c;鼠标前进/后退按键个人感觉使用频率很低&#xff0c;因此把鼠标前进/后退改为双击还是很合适的。 2.有些短款的键盘没有Home或End键&#xff0c;…

华为海思2025届校招笔试面试经验分享

目前如果秋招还没有offer的同学&#xff0c;可以赶紧投递下面这些公司&#xff0c;都在补招。争取大家年前就把后端offer拿下。如果大家在准备秋招补录取过程中有任何问题&#xff0c;都可以私信小编&#xff0c;免费提供帮助。如果还有部分准备备战春招的同学&#xff0c;也可…

C语言解决空瓶换水问题:高效算法与实现

标题&#xff1a;C语言解决空瓶换水问题&#xff1a;高效算法与实现 一、问题描述 在一个饮料促销活动中&#xff0c;你可以通过空瓶换水的方式免费获得更多的水&#xff1a;3个空瓶可以换1瓶水。喝完这瓶水后&#xff0c;空瓶会再次变为空瓶。假设你最初拥有一定数量的空瓶&a…

MySQL乐观锁

前言 乐观锁是一种并发控制机制&#xff0c;它假设在大多数情况下不会发生冲突&#xff0c;因此在事务执行过程中不加锁。只有在提交时才会检查数据是否被其他事务修改过。如果数据在此期间被修改了&#xff0c;则当前事务会被回滚或者需要重新执行。乐观锁的主要用途和优势包…

力扣hot100-->前缀和/前缀书/LRU缓存

前缀和 1. 560. 和为 K 的子数组 中等 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#…

Springboot项目搭建(7)-Layout界面布局

1.概要 初步搭建了Layout界面的布局&#xff0c;其中包括左侧导航栏及其路由功能&#xff0c;和右侧头、体、脚部分的大致排版。最后在头部分中的昵称与头像替换成动态数据。 2.Layout主页布局 文件地址&#xff1a;src\views\Layout.vue 2.1 script行为模块 从elementUI中…