confd项目地址

https://github.com/kelseyhightower/confd

  1. 下载confd

    wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64
    mv confd-0.16.0-linux-amd64 /usr/bin/confd
    chmod +x /usr/bin/confd
  2. 创建配置文件及模板目录:
    mkdir -p /etc/confd/{conf.d,templates}

  3. 创建总配置文件:
    vim /etc/confd/confd.toml

    backend = "etcdv3"
    confdir = "/etc/confd"
    log-level = "info"
    #interval = 5
    # etcd 节点地址
    nodes = ["http://127.0.0.1:2379"]
    scheme = "http"
    watch = true
  4. 创建单个服务的配置文件:
    vim /etc/confd/conf.d/my-server.toml

    [template]
    # 模板文件路径
    src = "my-server.tmpl"
    # 生成的配置文件路径
    dest = "/etc/nginx/conf.d/my-server.conf"
    # 监听的 key
    keys = [
     "/nginx/my-server/",
    ]
    # 生成文件后执行的命令
    check_cmd = "/sbin/nginx -t"
    reload_cmd = "/bin/systemctl restart nginx"
  5. 创建模板文件:
    vim /etc/confd/templates/my-server.tmpl

     upstream my_server {
         {{range getvs "/nginx/my-server/*"}}
             server {{.}};
         {{end}}
     }
     server {
         listen 80;
         server_name localhost;
         location / {
             proxy_pass http://my_server;
             proxy_redirect off;
             proxy_set_header Host $host:$server_port;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_read_timeout 90;
         }
     }
  6. 启动:

    # 生成一次并退出
    confd -onetime -backend etcd -node http://127.0.0.1:2379
    # 持续监听 key 的变化
    confd -watch -backend etcd -node http://127.0.0.1:2379
  7. 验证:

    etcdctl put /nginx/my-server/server1  10.0.0.11:8080
    etcdctl put /nginx/my-server/server2  10.0.0.12:8080
文档更新时间: 2024-04-20 10:57   作者:lee