traefik如何使用文件发现服务02

2023年5月15日 17:58

 

问题

 
traefik如何使用配置文件发现服务? 
 
使用docker启动traefik, traefik使用配置文件, 并且服务也使用配置文件
 
通过docker-compose.yaml引用traefik.yml, config.yml
 
 

docker-compose.yaml

 
version: "3"
services:
  reverse-proxy:
    #image: traefik:v2.10
    image: traefik:latest
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - ./traefik.yml:/etc/traefik/traefik.yml
      - ./config.yml:/etc/traefik/config.yml
  whoami:
    image: containous/whoami
    ports:
      - "5000:80"
 

traefik配置文件traefik.yml

 
api:
    insecure: true
...
providers:
    file:
        filename: /etc/traefik/config.yml
 

服务发现配置config.yml

 
 
http:
    routers:
      my-router:
        rule: "Path(`/whoami/`)"
        service: whoami
    services:
      whoami:
        loadBalancer:
          servers:
            - url: "http://xxxx:5000/"
 
 
 
 
 

Tags: traefik
评论(110) 阅读(1752)

traefik入门示例解析01

2023年5月15日 16:45

 

traefik是什么

 
微服务架构产生了大量的服务, 借助etcd之类的注册中心,找服务还需要接入etcd,还是比较麻烦,有没有统一的网关入口?
 
下面借助简单例子, 试用并理解traefik。
 

官方示例

 
官网提供了docker-compose示例, 我改了几个端口方便理解.
 
* docker-compose.yaml
 
version: "3"
services:
  reverse-proxy:
    #image: traefik:v2.10
    image: traefik:latest
    ports:
      # 提供http入口
      - "81:80"
      # web界面服务
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --api.insecure=true  --providers.docker
  whoami:
    image: containous/whoami
    ports:
      - "82:80"
    labels:
      - "traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`)"
      #- "traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`) || PathPrefix(`/whoami/`)"
      #- "traefik.http.routers.whoami.rule=PathPrefix(`/whoami/`)"
 
* reverse-proxy是traefik服务, 提供了两个接口 http://127.0.0.1:81, http://127.0.0.1:8080
 
* --api.insecure=true开启api
 
* --providers.docker表示traefik使用docker接口找服务
 
* lables属于容器标签, traefik找到容器后,会读取标签,进行路由配置
 
* whoami是一个http服务 http://127.0.0.1:82
 

访问whoami

 
# 方法1: 直接访问whoami服务(此处是82端口)
http://127.0.0.1:82

# 方法2: 通过traefik代理访问whoami的http服务(此处是82端口)
# -H设置http请求header中的Host
# http://127.0.0.1:81访问traefik端口
curl -H Host:whoami.docker.localhost  http://127.0.0.1:81

# 方法3: 通过http前缀访问(此处是82端口)
# 打开whoami容器labels的第二行, 支持Host和PathPrefix两种方式
http://127.0.0.1:81/whoami/
 

代理规则

 
* 代理规则: Host
 
Host(`whoami.docker.localhost`)   # 发送http请求的Header中的Host改为whoami.docker.localhost
 
* 代理规则: url前缀
 
http://ip:port/whoami/     # 类似nginx的location
 
 

问题列表

 
* 问题1: traefik如何找到服务whoami?
 
--providers.docker指定了服务来源于docker, traefix会调用docker接口找服务,并解析labels获取匹配规则
 
* 问题2: host规则如何使用
 
有两种方式, 第一种,发送请求前修改header中的host参数; 第二种,使用域名访问
 
 
 
 
 
 

Tags: traefik
评论(356) 阅读(3207)