minikube使用traefik作为网关暴露到外部访问

使用 docker-compose 启动 traefik

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
version: '2'

services:

    traefik:

        image: traefik:v2.7

        container_name: traefik

        # 启用Web UI并监听docker

        command: --api.insecure=true --providers.docker

        networks:

            - minikube        

        ports:

            # HTTP 端口

            - "80:80"

            # Web UI 端口

            - "8080:8080"        

        labels:

            - "traefik.enable=false"

        volumes:

            # 这样Traefik可以监听Docker事件

            # - /var/run/docker.sock:/var/run/docker.sock

            # 启动配置文件

            - C:\Users\hxf16\traefik\traefik.toml:/etc/traefik/traefik.toml

            # 自定义routers、services

            - ~/traefik/conf:/etc/traefik/conf

        restart: always

networks:

  minikube:

    external: true

查看 minikube 使用的 docker 网络名称

使用命令

1
2
minikube profile
docker network ls

默认使用的网络名称为 minikube 注意需要在 traefik 目录下创建 conf 目录以及 traefik.toml 文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 全局配置
[global]
  checkNewVersion = false
  sendAnonymousUsage = false
# 入口
[entryPoints]
  # http
  [entryPoints.web]
    address = ":80"
  # https "websecure"这个名字是自己定义的
  [entryPoints.websecure]
    address = ":443"
  #  traefik web ui
  [entryPoints.traefik]
    address = ":8080"
# 免费Let's Encrypt 证书(注意:必须域名解析到的主机中才有效,traefik会把秘钥写入acme.json中)
[certificatesResolvers.bxtlschallenge.acme]
  # 自己的邮箱地址
  email = "123456@qq.com"
  # 秘钥写入地址,根据自己文件映射来配置
  storage = "/letsencrypt/acme.json"
  [certificatesResolvers.bxtlschallenge.acme.httpChallenge]
    entryPoint = "web"

# 自定义Router、Services(貌似必须定义在外部文件里面,坑了好久)
[providers.file]
  directory = "/etc/traefik/conf"
# traefik 需要开启的功能
[api]
  insecure = true
  dashboard = true
[ping]
[providers.docker]
  endpoint = "unix:///var/run/docker.sock"
  exposedByDefault = true
# 传输配置
[serversTransport]
  # 如果后端需要代理https自定义证书,可以使用这种方式就可以跳过验证,不然会报x509证书错误
  insecureSkipVerify = true

在 conf 目录下放入 minikube.toml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[http.services]
  [http.services.minikube.loadBalancer]
    [[http.services.minikube.loadBalancer.servers]]
      url = "http://192.168.49.2:80/"

[http.routers]
  [http.routers.example]
    entryPoints = ["web"]
    rule = "Host(`a.example.com`)"
    service = "minikube"

启动 traefik

命令如下:

1
docker-compose -f docker-compose-traefik.yaml up -d

查看 dashboard,查看服务是否正常 image.png

正常后,局域网添加 hosts 文件内容

1
192.168.3.55 a.example.com

然后浏览器访问  http://a.example.com/  image.png

Licensed under CC BY-NC-SA 4.0
最后更新于 Jan 06, 2025 05:52 UTC
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计
Caret Up