etcd gateway

    etcd gateway is a simple TCP proxy that forwards network data to the etcd cluster. The gateway is stateless and transparent; it neither inspects client requests nor interferes with cluster responses. It does not terminate TLS connections, do TLS handshakes on behalf of its clients, or verify if the connection is secured.

    The gateway supports multiple etcd server endpoints and works on a simple round-robin policy. It only routes to available endpoints and hides failures from its clients. Other retry policies, such as weighted round-robin, may be supported in the future.

    Every application that accesses etcd must first have the address of an etcd cluster client endpoint. If multiple applications on the same server access the same etcd cluster, every application still needs to know the advertised client endpoints of the etcd cluster. If the etcd cluster is reconfigured to have different endpoints, every application may also need to update its endpoint list. This wide-scale reconfiguration is both tedious and error prone.

    In summary, to automatically propagate cluster endpoint changes, the etcd gateway runs on every machine serving multiple applications accessing the same etcd cluster.

    • Improving performance

    The gateway is not designed for improving etcd cluster performance. It does not provide caching, watch coalescing or batching. The etcd team is developing a caching proxy designed for improving cluster scalability.

    • Running on a cluster management system

    Advanced cluster management systems like Kubernetes natively support service discovery. Applications can access an etcd cluster with a DNS name or a virtual IP address managed by the system. For example, kube-proxy is equivalent to etcd gateway.

    Start the etcd gateway to use these static endpoints with the command:

    Alternatively, if using DNS for service discovery, consider the DNS SRV entries:

    Start the etcd gateway to fetch the endpoints from the DNS SRV entries with the command:

    –endpoints

    • Comma-separated list of etcd server targets for forwarding client connections.
    • Default:
    • Invalid example: (gateway does not terminate TLS). Note that the gateway does not verify the HTTP schema or inspect the requests, it only forwards requests to the given endpoints.

    –discovery-srv

    • Default: (not set)

    –listen-addr

    • Interface and port to bind for accepting client requests.
    • Default:

    –retry-delay

    • Duration of delay before retrying to connect to failed endpoints.
    • Default: 1m0s
    • Invalid example: “123” (expects time unit in format)

    –insecure-discovery

    • Accept SRV records that are insecure or susceptible to man-in-the-middle attacks.
    • Default:

    –trusted-ca-file

    • Path to the client TLS CA file for the etcd cluster to verify the endpoints returned from SRV discovery. Note that it is ONLY used for authenticating the discovered endpoints rather than creating connections for data transferring. The gateway never terminates TLS connections or create TLS connections on behalf of its clients.