本指南介绍如何在 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
|
验证配置
完成配置后,可以通过以下方式验证:
- 检查 ConfigMap 是否正确创建:
1
|
kubectl get configmap tcp-services -n ingress-nginx -o yaml
|
- 确认 Ingress Controller 是否正常运行:
1
|
kubectl get pods -n ingress-nginx
|
- 验证端口是否正确开放:
1
|
kubectl get svc ingress-nginx-controller -n ingress-nginx
|
注意事项
- 确保目标服务(如 MySQL)已经在集群中正常运行
- 注意检查端口冲突
- 如果使用云服务提供商,可能需要额外配置安全组或防火墙规则