#consul #proxy #service-discovery #tcp

bin+lib cotoxy

A TCP proxy using Consul for service discovery

1 unstable release

Uses old Rust 2015

0.1.0 Feb 7, 2018

#12 in #consul

MIT license

34KB
765 lines

cotoxy

Documentation License: MIT

A TCP proxy using Consul for service discovery.

This uses List Nodes for Service API for collecting candidate servers.

Install

Precompiled binaries

A precompiled binary for Linux environment is available in the [releases] page.

$ curl -L https://github.com/sile/cotoxy/releases/download/0.1.0/cotoxy-0.1.0.linux -o cotoxy
$ chmod +x cotoxy
$ ./cotoxy -h
cotoxy 0.1.0
A TCP proxy using Consul for service discovery

USAGE:
    cotoxy [OPTIONS] <SERVICE> [--] [THREADS]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
        --bind-addr <BIND_ADDR>                TCP address to which the proxy bind [default: 0.0.0.0:17382]
        --connect-timeout <CONNECT_TIMEOUT>    TCP connect timeout in milliseconds [default: 1000]
        --consul-addr <CONSUL_ADDR>            TCP address of the consul agent which the proxy queries [default:
                                               127.0.0.1:8500]
        --dc <DC>                              Datacenter to query [default: <Datacenter of the consul agent being
                                               queried>]
        --log-level <LOG_LEVEL>                 [default: info]  [values: debug, info, warning, error]
        --near <NEAR>                          Node name to sort the service node list in ascending order based on the
                                               estimated round trip time from that node. If `_agent` is specified, the
                                               node of the consul agent being queried will be used for the sort.
        --node-meta <NODE_META>...             Node metadata key/value pair of the form `key:value`. Service nodes will
                                               be filtered with the specified key/value pairs.
        --service-port <SERVICE_PORT>          Port number of the service [default: <Port number registered in Consul>]
        --tag <TAG>                            Tag to filter service nodes on

ARGS:
    <SERVICE>    Name of the service to which clients connect
    <THREADS>    Number of worker threads [default: 1]

Using Cargo

If you have already installed [Cargo][cargo], you can install cotoxy easily in the following command:

$ cargo install cotoxy

Examples

/// Run the consul agent in the background.
$ docker run -d --rm -p 8500:8500 consul

/// Start `cotoxy` which proxies "consul" service.
$ cotoxy consul --service-port 8500
Feb 07 13:23:13.028 INFO Proxy server started, service: consul, proxy: 0.0.0.0:17382

/// Call consul API via the proxy.
$ curl -s http://localhost:17382/v1/catalog/service/consul
[
    {
        "ID": "2db3224e-e9cb-fab4-edd7-6e98a2842f16",
        "Node": "e10993d941f1",
        "Address": "127.0.0.1",
        "Datacenter": "dc1",
        "TaggedAddresses": {
            "lan": "127.0.0.1",
            "wan": "127.0.0.1"
        },
        "NodeMeta": {
            "consul-network-segment": ""
        },
        "ServiceID": "consul",
        "ServiceName": "consul",
        "ServiceTags": [],
        "ServiceAddress": "",
        "ServicePort": 8300,
        "ServiceEnableTagOverride": false,
        "CreateIndex": 5,
        "ModifyIndex": 5
    }
]

Dependencies

~10–22MB
~316K SLoC