基于 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
    
### Nginx Ingress Controller概述 Nginx Ingress Controller是一种用于Kubernetes集群中的入口控制器,其主要功能是在集群外部流量进入集群内部时提供路由管理。通过定义Ingress资源对象来描述HTTP(S)负载均衡器的行为模式以及如何将请求转发给后端服务[^1]。 ### 部署Nginx Ingress Controller #### 下载YAML文件 为了安装Nginx Ingress Controller,在官方文档或其他可靠源处获取最新的部署清单(manifests)。通常这些文件会打包成`.yaml`格式并命名为类似`nginx-ingress-controller.yaml`或`mandatory.yaml`的形式。 #### 修改Mandatory.Yaml文件 下载完成后可能需要根据实际环境调整部分参数设置,比如更改默认的Service Type为NodePort或者LoadBalancer;指定特定版本镜像等操作均在此阶段完成。 #### 给节点打标签 如果希望某些Pod仅调度到具有特殊硬件特性的机器上,则可以通过kubectl命令为那些目标主机添加相应的key-value对形式的label标记。 ```bash kubectl label nodes <node-name> ingress=true ``` #### 执行部署过程 当一切准备就绪之后就可以利用kubectl apply指令提交修改后的配置文件至API Server从而触发整个应用层面上的变化生效流程了: ```bash kubectl apply -f mandatory.yaml ``` ### 示例验证 #### 使用以下YAML文件部署Tomcat 创建一个新的命名空间以便更好地隔离测试项目,并引入一个简单的Web应用程序作为演示用途——这里选用Apache Tomcat为例说明具体步骤如下所示: ```yaml apiVersion: v1 kind: Namespace metadata: name: demo-space --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: tomcat-sample-app name: tomcat-deployment namespace: demo-space spec: replicas: 2 selector: matchLabels: app: tomcat-sample-app template: metadata: labels: app: tomcat-sample-app spec: containers: - image: harbor.com/library/tomcat:latest name: tomcat-container ports: - containerPort: 8080 protocol: TCP --- apiVersion: v1 kind: Service metadata: labels: app: tomcat-sample-service name: tomcat-cluster-ip-svc namespace: demo-space spec: type: ClusterIP selector: app: tomcat-sample-app ports: - port: 8080 targetPort: 8080 protocol: TCP ``` #### 创建访问Tomcat服务的Ingress 接下来编写一段新的资源配置用来声明对外暴露路径规则及关联的服务名称/端口号信息等内容: ```yaml apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: annotations: nginx.ingress.kubernetes.io/rewrite-target: / name: example-ingress-tomcat namespace: demo-space spec: rules: - host: "tomcat.example.com" http: paths: - backend: serviceName: tomcat-cluster-ip-svc servicePort: 8080 path: /webapp ``` #### 访问Tomcat服务 最后一步就是确认所有组件都正常运行并且能够成功响应来自客户端发起的网络请求了。确保本地hosts文件已正确映射域名指向任一worker node IP地址即可尝试打开浏览器输入URL `http://tomcat.example.com/webapp` 进行浏览体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

启明真纳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值