先编辑Traefik的Helm的values配置文件,新增如下的配置项,新增一个Traefik的entryPoint配置:

ports:
  mysql:
    port: 3306
    # 老版本的helm-chart配置expose: true
    # 下面是新版本的helm-chart配置
    expose: 
      default: true
    exposedPort: 3306

注意一定要加expose.default=true才会通过Service的方式进行暴露,接着使用如下的命令更新Traefik:

helm upgrade --install traefik traefik/traefik -n traefik -f values.yaml --create-namespace

到这里,我们就可以在Dashboard+Service当中进行确认,MySQL的entryPoint是否已经配置好:

image-7v2h.png

查看Service暴露的端口号,发现已经通过Loadbalancer去暴露3306端口:

kubectl get svc -n traefik

NAME                TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                                     AGE
traefik             LoadBalancer   10.43.81.246    192.168.11.200   3306:32142/TCP,80:30595/TCP,443:32650/TCP   5d19h

接着我们需要基于K8S的IngressRouteTCP资源,去配置我们的TCP规则,将3306端口绑定上具体的Service(其中mysql-external是我这里要去进行绑定的Service):

apiVersion: traefik.io/v1alpha1
kind: IngressRouteTCP
metadata:
  name: mysql-tcp
  namespace: mysql
spec:
  entryPoints:
    - mysql
  routes:
  - match: HostSNI(`*`)
    priority: 10
    services:
    - name: mysql-external
      port: 3306
      weight: 10

接着我们使用MySQL客户端基于Traefik代理的方式,去连接目标MySQL服务器,发现可以正常连接:

image-pono.png