上一篇文章提到了minikube使用ingress,但是仍然只能本机访问,这一篇加上traefik做为网关,能外网访问
1.安装docker-compose
下载和安装
curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
加权限
chmod +x /usr/local/bin/docker-compose
验证
docker-compose version
2.查看mimikube使用的docker网络名称
使用命令
minikube profile
docker network ls
默认使用的网络名为minikube
3.编辑docker-compose文件
创建docker-compose.yaml文件,内容如下
version: '2'
services:
traefik:
image: traefik:v2.1
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
# 启动配置文件
- ~/traefik/traefik.toml:/etc/traefik/traefik.toml
# 自定义routers、services
- ~/traefik/conf:/etc/traefik/conf
restart: always
networks:
minikube:
external: true
其中networks指定网络名为minikube使用的网络名
4.创建traefik配置文件
全局配置文件traefik.toml,内容如下
# 全局配置
[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
minikube配置文件minikube.toml,内容如下
[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"
5.启动traefik和测试访问
这里使用docker-compose的启动,命令如下
docker-compose up -d
启动后先看traefik的dashboard查看router,service定义是否正常
正常后,局域网添加hosts文件内容
192.168.3.55 a.example.com
然后浏览器访问
结果如下