Kubernetes Ingress-Nginx TCP服务转发配置指南

本指南详细说明如何通过配置Ingress-Nginx控制器实现Kubernetes集群中的TCP服务暴露,以MySQL服务为例演示完整的端口映射配置流程。

这篇文章已发布 824 天,部分内容可能已过时。如有疑问,可在评论区留言。

本指南介绍如何在 Kubernetes 集群中配置 Ingress-Nginx 控制器以支持 TCP 服务转发。以 MySQL 服务为例进行说明。

前提条件

  • 已安装 Kubernetes 集群
  • 已部署 Ingress-Nginx 控制器
  • 已有需要暴露的 TCP 服务(本例中使用 MySQL)

配置步骤

配置 TCP 服务映射

创建 tcp-services.yaml 文件,定义 TCP 端口映射:

1
2
3
4
5
6
7
8
apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
data:
  # 格式:外部端口: "目标命名空间/服务名:目标端口"
  3306: "default/mysql-primary:3306"

应用配置:

1
kubectl create -f tcp-services.yaml

如果 ConfigMap 已存在,可以直接编辑:

1
2
kubectl edit configmap tcp-services -n ingress-nginx
# 在 data 部分添加新的映射: <外部端口>: "<命名空间>/<服务名>:<端口>"

更新 Ingress Controller 配置

编辑 Ingress-Nginx Controller Deployment:

1
kubectl edit deployment ingress-nginx-controller -n ingress-nginx

在 controller 的 args 部分添加以下配置:

1
2
3
args:
  # ... 其他现有参数 ...
  - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services

配置 Ingress Controller Service

编辑 Ingress-Nginx Controller Service:

1
kubectl edit service ingress-nginx-controller -n ingress-nginx

ports 部分添加 TCP 服务端口:

1
2
3
4
5
6
ports:
  # ... 其他现有端口配置 ...
  - name: mysql-primary
    port: 3306
    protocol: TCP
    targetPort: 3306

验证配置

完成配置后,可以通过以下方式验证:

  1. 检查 ConfigMap 是否正确创建:
1
kubectl get configmap tcp-services -n ingress-nginx -o yaml
  1. 确认 Ingress Controller 是否正常运行:
1
kubectl get pods -n ingress-nginx
  1. 验证端口是否正确开放:
1
kubectl get svc ingress-nginx-controller -n ingress-nginx

注意事项

  • 确保目标服务(如 MySQL)已经在集群中正常运行
  • 注意检查端口冲突
  • 如果使用云服务提供商,可能需要额外配置安全组或防火墙规则
面朝大海,春暖花开。
使用 Hugo 构建
主题 StackJimmy 设计