基于 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-services
  namespace: 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-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  type: LoadBalancer
  ports:
    - name: http
      port: 80
      targetPort: 80
      protocol: TCP
    - name: https
      port: 443
      targetPort: 443
      protocol: TCP
    - name: proxied-tcp-9000
      port: 53
      targetPort: 53
      protocol: TCP
    - name: tcp-8080
      port: 8080
      targetPort: 8080
      protocol: TCP
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.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-world
  labels:
    app: nginx-hello-world
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-hello-world
  template:
    metadata:
      labels:
        app: nginx-hello-world
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
        volumeMounts:
        - name: nginx-config
          mountPath: /usr/share/nginx/html/index.html
          subPath: index.html
      volumes:
      - name: nginx-config
        configMap:
          name: nginx-index

3.3 创建服务以暴露 Nginx 应用

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

apiVersion: v1
kind: Service
metadata:
  name: nginx-hello-world
spec:
  selector:
    app: nginx-hello-world
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 80
  type: 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 集群中的不同服务提供灵活的四层负载均衡能力。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

老北京香酥芝麻饼

宝安石岩上屋大道有一家老北京香酥芝麻饼&#xff0c;不仅很好吃&#xff0c;还分量特别厚实。应该这家老店&#xff0c;在上屋大道很多人知道和吃过。我每周末都会去买回去给家人一起吃。工作日由于上下班&#xff0c;想买也买不了&#xff0c;因为太晚去老板就收摊了。就像早…

对于相对速度的重新理解 - 2

回到先前说的&#xff0c;先令真空光速为标准光速&#xff0c; 光子的绝对速度 范围&#xff0c; 物质粒子的 范围&#xff0c; 这样的话&#xff0c;我们就可以根据 和 &#xff0c;把速度分成3个段&#xff0c; 这样就可以出现速度和它的负值&#xff0c;也就是速度的矢量具…

GWO-SVMD分解 | Matlab实现GWO-SVMD灰狼算法优化逐次变分模态分解

GWO-SVMD分解 | Matlab实现GWO-SVMD灰狼算法优化逐次变分模态分解 目录 GWO-SVMD分解 | Matlab实现GWO-SVMD灰狼算法优化逐次变分模态分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GWO-SVMD灰狼算法优化逐次变分模态分解 内有15种用以优化svmd的适应度函数&#…

初识Linux—— 基本指令(下)

前言&#xff1a; 本篇继续来学习Linux的基础指令&#xff0c;继续加油&#xff01;&#xff01;&#xff01; 本篇文章对于图片即内容详解&#xff0c;已同步到本人gitee&#xff1a;Linux学习: Linux学习与知识讲解 Linux指令 1、查看文件内容的指令 cat ​ cat 查看文件…

在SQLyog中导入和导出数据库

导入 假如我要导入一个xxx.sql&#xff0c;我就先创建一个叫做xxx的数据库。 然后右键点击导入、执行SQL脚本 选择要导入的数据库文件的位置&#xff0c;点击执行即可 注意&#xff1a; 导入之后记得刷新一下导出 选择你要导出的数据库 右键选择&#xff1a;备份/导出、…

如何进行高级红队测试:OpenAI的实践与方法

随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;AI模型的安全性和可靠性已经成为业界关注的核心问题之一。为了确保AI系统在实际应用中的安全性&#xff0c;红队测试作为一种有效的安全评估方法&#xff0c;得到了广泛应用。近日&#xff0c;OpenAI发布了两…

ES 基本使用与二次封装

概述 基本了解 Elasticsearch 是一个开源的分布式搜索和分析引擎&#xff0c;基于 Apache Lucene 构建。它提供了对海量数据的快速全文搜索、结构化搜索和分析功能&#xff0c;是目前流行的大数据处理工具之一。主要特点即高效搜索、分布式存储、拓展性强 核心功能 全文搜索:…

Java项目实战II基于SPringBoot的玩具销售商城管理系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着儿童娱乐与教育需求的…

Python安装出现严重错误的解决方法_0x80070643-安装时发生严重错误

使用这个软件MicrosoftProgram_Install_and_Uninstall.meta.diagcab把关于Python一个个组件全部删除&#xff0c;然后就能够重新安装Python了 修复阻止程序安装或删除的问题 - Microsoft 支持 这里下载

Java语言编程,通过阿里云mongo数据库监控实现数据库的连接池优化

一、背景 线上程序连接mongos超时&#xff0c;mongo监控显示连接数已使用100%。 java程序报错信息&#xff1a; org.mongodb.driver.connection: Closed connection [connectionId{localValue:1480}] to 192.168.10.16:3717 because there was a socket exception raised by…

微信小程序全局配置:导航栏、下拉刷新与上拉触底设置教程

微信小程序全局配置:导航栏、下拉刷新与上拉触底设置教程 引言 微信小程序作为一种新兴的轻量级应用,凭借其便捷性和丰富的功能受到了广泛的欢迎。在开发小程序的过程中,合理配置全局属性是提升用户体验的关键。本文将深入探讨小程序的全局配置中的window选项,重点介绍导…

YOLOv11融合[ECCV 2018]RCAN中的RCAB模块及相关改进思路

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 YOLOv11改进汇总贴&#xff1a;YOLOv11及自研模型更新汇总 《Image Super-Resolution Using Very Deep Residual Channel Attention Networks》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/1807…

linux ubuntu的脚本知

目录 一、变量的引用 二、判断指定的文件是否存在 三、判断目录是否存在 四、判断最近一次命令执行是否成功 五、一些比较符号 六、"文件"的读取和写入 七、echo打印输出 八、ubuntu切换到root用户 N、其它可以参考的网址 脚本功能强大&#xff0c;用起来也…

前端:JavaScript (学习笔记)【2】

目录 一&#xff0c;数组的使用 1&#xff0c;数组的创建 [ ] 2&#xff0c;数组的元素和长度 3&#xff0c;数组的遍历方式 4&#xff0c;数组的常用方法 二&#xff0c;JavaScript中的对象 1&#xff0c;常用对象 &#xff08;1&#xff09;String和java中的Stri…

【Git】工作区、暂存区和版本库

目录 一、基本概念&#xff1a; 关系图&#xff1a; 1. 工作区&#xff08;Working Directory&#xff09; $ 1.1 工作区功能 $ 1.2 工作区特点 2. 暂存区&#xff08;Staging Area&#xff09; $ 2.1 暂存区功能 $ 2.2 暂存区特点 $ 2.3 常用命令 3. 版本库&#xff08…

【Linux | 计网】TCP协议详解:从定义到连接管理机制

目录 1.TCP协议的定义&#xff1a; 2.TCP 协议段格式 3.TCP两种通信方式 4.确认应答(ACK)机制 解决“后发先至”问题 5.超时重传机制 那么, 超时的时间如何确定? 6.连接管理机制&#xff1a; 6.1.三次握手&#xff1a; 为什么需要3次握手&#xff0c;一次两次不行吗…

Springboot系列之:创建Springboot项目,Springboot整合MyBatis-plus

Springboot系列之&#xff1a;创建Springboot项目&#xff0c;Springboot整合MyBatis-plus 一、快速创建Spring boot项目二、项目完整目录三、pom.xml四、application.yaml五、实体类六、mapper七、IService接口八、Service实现类九、配置类十、枚举十一、增删改查测试类十二、…

java基础面试题笔记(基础篇)

网上始终找不到令自己满意的面试题&#xff0c;所以我打算自己整理面试题&#xff0c;从简单的到难的&#xff0c;尽量简单准确描述回答降低大家理解和背的难度&#xff0c;有错误或者有更好的回答请在评论回复我&#xff0c;感谢大家。 什么是java&#xff1f; 回答&#xff…

编译 LLVM 源码,使用 Clion 调试 clang

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 1. LLVM 简介 LLVM 是一个开源的编译器基础架构&#xff0c;最初由 Chris Lattner 于 2000 年在伊利诺伊大学开发&#xff0c;后来成为一个广泛应用于编译器和…

[代码随想录打卡Day22] 理论基础 77. 组合 216.组合总和III 17.电话号码的字母组合

理论基础 有递归就有回溯。回溯搜索是一种纯暴力搜索算法。我们一层一层递归到最底层收获结果&#xff0c;比如下面我们最后一层1操作之后&#xff0c;我们只有撤销这个操作回退到上一个节点才能遍历该层的其他节点&#xff0c;这个回退撤销操作就是回溯。 回溯法&#xff0…