consul下载地址: https://www.consul.io/downloads

traefik下载地址:https://github.com/traefik/traefik/releases

启动traefik的命令

traefik.exe --api.insecure=true  --configFile=traefik-sample.yml

配置文件 traefik-sample.yml

################################################################
#
# Configuration sample for Traefik v2.
#
# For Traefik v1: https://github.com/traefik/traefik/blob/v1.7/traefik.sample.toml
#
################################################################

################################################################
# Global configuration
################################################################
global:
  checkNewVersion: true
  sendAnonymousUsage: true

################################################################
# EntryPoints configuration
################################################################

# EntryPoints definition
#
# Optional
#
entryPoints:
  web:
    address: :80

  websecure:
    address: :443

################################################################
# Traefik logs configuration
################################################################

# Traefik logs
# Enabled by default and log to stdout
#
# Optional
#
log:
  # Log level
  #
  # Optional
  # Default: "ERROR"
  #
  level: DEBUG

  # Sets the filepath for the traefik log. If not specified, stdout will be used.
  # Intermediate directories are created if necessary.
  #
  # Optional
  # Default: os.Stdout
  #
#  filePath: log/traefik.log

  # Format is either "json" or "common".
  #
  # Optional
  # Default: "common"
  #
#  format: json

################################################################
# Access logs configuration
################################################################

# Enable access logs
# By default it will write to stdout and produce logs in the textual
# Common Log Format (CLF), extended with additional fields.
#
# Optional
#
#accessLog:
  # Sets the file path for the access log. If not specified, stdout will be used.
  # Intermediate directories are created if necessary.
  #
  # Optional
  # Default: os.Stdout
  #
#  filePath: /path/to/log/log.txt

  # Format is either "json" or "common".
  #
  # Optional
  # Default: "common"
  #
#  format: json

################################################################
# API and dashboard configuration
################################################################

# Enable API and dashboard
#
# Optional
#
api:
  # Enable the API in insecure mode
  #
  # Optional
  # Default: false
  #
  insecure: true

  # Enabled Dashboard
  #
  # Optional
  # Default: true
  #
#  dashboard: false

################################################################
# Ping configuration
################################################################

# Enable ping
#ping:
  # Name of the related entry point
  #
  # Optional
  # Default: "traefik"
  #
#  entryPoint: traefik

################################################################
# Docker configuration backend
################################################################

providers:

  consul:
    rootKey: "traefik"
    endpoints:
      - "127.0.0.1:8500"



  # Enable Docker configuration backend
#  docker:
    # Docker server endpoint. Can be a tcp or a unix socket endpoint.
    #
    # Required
    # Default: "unix:///var/run/docker.sock"
    #
#    endpoint: tcp://10.10.10.10:2375

    # Default host rule.
    #
    # Optional
    # Default: "Host(`{{ normalize .Name }}`)"
    #
#    defaultRule: Host(`{{ normalize .Name }}.docker.localhost`)

    # Expose containers by default in traefik
    #
    # Optional
    # Default: true
    #
#    exposedByDefault: false

后台服务

package main

import (
	"fmt"
	"net/http"
)

var HTTP_PRE = "/server_1"

func HelloHandle(w http.ResponseWriter, r *http.Request)  {
	_, _ = fmt.Fprint(w, " hello! this is go http server 1. port = 8888")
}


func main() {

	http.HandleFunc(HTTP_PRE + "/hello", HelloHandle)

	if e := http.ListenAndServe(":8888", nil); e!= nil{
		panic(e.Error())
	}
}

启动consul服务:

consul.exe agent -dev -ui 

向consul的kv存储中插入以下键值对:

consul kv put traefik/http/routers/myrouter-1/rule PathPrefix(`/server_1`)
consul kv put traefik/http/routers/myrouter-1/entrypoints/0	web
consul kv put traefik/http/routers/myrouter-1/service myservice-1
consul kv put traefik/http/services/myservice-1/loadbalancer/servers/0/url http://127.0.0.1:8888

启动两个go http服务

启动traefik服务,启动命令见文章开始处

启动时会看到这样的日志(为看的比较清晰,将一些\" 替换成了“)

level=debug msg="Configuration received from provider consul: {"http":{"routers":{"myrouter-1":{"entryPoints":["web"],"service":"myservice-1","rule":"PathPrefix(`/server_1`)"}},"services":{"myservice-1":{"loadBalancer":{"servers":[{"url":"http://127.0.0.1:8888"}],"passHostHeader":true}}}}}" providerName=consul

浏览器访问 http://127.0.0.1/server_1/hello 请求被转发到后端的服务

参考链接:

https://www.consul.io/commands/kv

https://doc.traefik.io/traefik/providers/consul/

https://doc.traefik.io/traefik/reference/dynamic-configuration/kv/

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐