You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Kubernetes Traefik Ingress中开放HTTP/HTTPS以外的端口

解决Traefik 1.7在K8s中转发TCP端口(如MySQL 3306)的问题

嗨,很高兴能帮你解决这个问题!你当前使用的Traefik 1.7版本,普通的Ingress资源仅支持HTTP/HTTPS协议,而MySQL这类TCP服务需要用Traefik的TCP路由能力来配置,具体步骤如下:

1. 更新Traefik的端口配置

首先要让Traefik监听3306端口,同时把这个端口暴露到集群外部:

修改Traefik Deployment

在Traefik的Pod模板里,添加3306的容器端口,同时更新启动参数添加对应的entrypoint:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: traefik
spec:
  replicas: 1
  selector:
    matchLabels:
      app: traefik
  template:
    metadata:
      labels:
        app: traefik
    spec:
      containers:
      - name: traefik
        image: traefik:v1.7
        args:
          - --api
          - --kubernetes
          - --logLevel=INFO
          # 添加mysql entrypoint
          - --entrypoints='Name:http Address::80'
          - --entrypoints='Name:https Address::443'
          - --entrypoints='Name:mysql Address::3306'
        ports:
          - name: http
            containerPort: 80
          - name: https
            containerPort: 443
          # 添加mysql端口
          - name: mysql
            containerPort: 3306

更新Traefik Service

把3306端口暴露到集群外部(根据你的集群环境选择NodePort或LoadBalancer类型):

apiVersion: v1
kind: Service
metadata:
  name: traefik
spec:
  type: NodePort # 或者 LoadBalancer
  ports:
    - name: http
      port: 80
      targetPort: 80
    - name: https
      port: 443
      targetPort: 443
    - name: mysql
      port: 3306
      targetPort: 3306
      nodePort: 30306 # 可选,指定固定NodePort
  selector:
    app: traefik

2. 创建TCP路由规则(用Traefik CRD)

Traefik 1.7提供了自定义CRD IngressRoute来支持TCP路由,你需要创建这个资源来把3306端口的流量转发到MySQL Service:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: mysql-ingressroute
  namespace: default # 替换成你的MySQL所在命名空间
spec:
  entryPoints:
    - mysql # 对应我们之前定义的entrypoint名称
  routes:
  - match: "HostSNI(`*`)" # TCP协议没有HTTP Host头,用HostSNI匹配所有请求
    services:
    - name: mysql-service # 替换成你的MySQL Service名称
      port: 3306

注意:如果你的集群还没安装Traefik的IngressRoute CRD,可以通过Traefik官方提供的CRD定义文件创建,或者检查你之前使用的部署仓库是否已经包含该CRD的安装步骤。

3. 验证配置

配置完成后,等待Traefik Pod重启和路由生效,然后用以下方式测试:

# 用telnet测试端口连通性
telnet <你的集群节点IP> 3306
# 或者用mysql客户端直接连接
mysql -h <集群节点IP> -P 3306 -u <mysql用户名> -p

如果能成功连接,说明配置生效了!

内容的提问来源于stack exchange,提问作者redxlus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 13:48:15