mirror of
https://github.com/status-im/consul.git
synced 2025-02-16 15:47:21 +00:00
command/connect/proxy: can set public listener from flags
This commit is contained in:
parent
c93ba83310
commit
83f2509c6f
@ -5,10 +5,12 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
_ "net/http/pprof" // Expose pprof if configured
|
_ "net/http/pprof" // Expose pprof if configured
|
||||||
"os"
|
"os"
|
||||||
"sort"
|
"sort"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
proxyAgent "github.com/hashicorp/consul/agent/proxy"
|
proxyAgent "github.com/hashicorp/consul/agent/proxy"
|
||||||
"github.com/hashicorp/consul/api"
|
"github.com/hashicorp/consul/api"
|
||||||
@ -39,12 +41,14 @@ type cmd struct {
|
|||||||
logger *log.Logger
|
logger *log.Logger
|
||||||
|
|
||||||
// flags
|
// flags
|
||||||
logLevel string
|
logLevel string
|
||||||
cfgFile string
|
cfgFile string
|
||||||
proxyID string
|
proxyID string
|
||||||
pprofAddr string
|
pprofAddr string
|
||||||
service string
|
service string
|
||||||
upstreams map[string]proxyImpl.UpstreamConfig
|
serviceAddr string
|
||||||
|
upstreams map[string]proxyImpl.UpstreamConfig
|
||||||
|
listen string
|
||||||
|
|
||||||
// test flags
|
// test flags
|
||||||
testNoStart bool // don't start the proxy, just exit 0
|
testNoStart bool // don't start the proxy, just exit 0
|
||||||
@ -78,7 +82,15 @@ func (c *cmd) init() {
|
|||||||
c.flags.Var((*FlagUpstreams)(&c.upstreams), "upstream",
|
c.flags.Var((*FlagUpstreams)(&c.upstreams), "upstream",
|
||||||
"Upstream service to support connecting to. The format should be "+
|
"Upstream service to support connecting to. The format should be "+
|
||||||
"'name:addr', such as 'db:8181'. This will make 'db' available "+
|
"'name:addr', such as 'db:8181'. This will make 'db' available "+
|
||||||
"on port 8181.")
|
"on port 8181. This can be repeated multiple times.")
|
||||||
|
|
||||||
|
c.flags.StringVar(&c.serviceAddr, "service-addr", "",
|
||||||
|
"Address of the local service to proxy. Only useful if -listen "+
|
||||||
|
"and -service are both set.")
|
||||||
|
|
||||||
|
c.flags.StringVar(&c.listen, "listen", "",
|
||||||
|
"Address to listen for inbound connections to the proxied service. "+
|
||||||
|
"Must be specified with -service and -service-addr.")
|
||||||
|
|
||||||
c.http = &flags.HTTPFlags{}
|
c.http = &flags.HTTPFlags{}
|
||||||
flags.Merge(c.flags, c.http.ClientFlags())
|
flags.Merge(c.flags, c.http.ClientFlags())
|
||||||
@ -201,8 +213,27 @@ func (c *cmd) configWatcher(client *api.Client) (proxyImpl.ConfigWatcher, error)
|
|||||||
upstreams = append(upstreams, c.upstreams[k])
|
upstreams = append(upstreams, c.upstreams[k])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Parse out our listener if we have one
|
||||||
|
var listener proxyImpl.PublicListenerConfig
|
||||||
|
if c.listen != "" {
|
||||||
|
host, portRaw, err := net.SplitHostPort(c.listen)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
port, err := strconv.ParseInt(portRaw, 0, 0)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
listener.BindAddress = host
|
||||||
|
listener.BindPort = int(port)
|
||||||
|
listener.LocalServiceAddress = c.serviceAddr
|
||||||
|
}
|
||||||
|
|
||||||
return proxyImpl.NewStaticConfigWatcher(&proxyImpl.Config{
|
return proxyImpl.NewStaticConfigWatcher(&proxyImpl.Config{
|
||||||
ProxiedServiceName: c.service,
|
ProxiedServiceName: c.service,
|
||||||
|
PublicListener: listener,
|
||||||
Upstreams: upstreams,
|
Upstreams: upstreams,
|
||||||
}), nil
|
}), nil
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,32 @@ func TestCommandConfigWatcher(t *testing.T) {
|
|||||||
require.Equal(t, 2345, cfg.Upstreams[1].LocalBindPort)
|
require.Equal(t, 2345, cfg.Upstreams[1].LocalBindPort)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"-service flag with -service-addr",
|
||||||
|
[]string{"-service", "web"},
|
||||||
|
func(t *testing.T, cfg *proxy.Config) {
|
||||||
|
// -service-addr has no affect since -listen isn't set
|
||||||
|
require.Equal(t, 0, cfg.PublicListener.BindPort)
|
||||||
|
require.Len(t, cfg.Upstreams, 0)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"-service, -service-addr, -listen",
|
||||||
|
[]string{
|
||||||
|
"-service", "web",
|
||||||
|
"-service-addr", "127.0.0.1:1234",
|
||||||
|
"-listen", ":4567",
|
||||||
|
},
|
||||||
|
func(t *testing.T, cfg *proxy.Config) {
|
||||||
|
require.Len(t, cfg.Upstreams, 0)
|
||||||
|
|
||||||
|
require.Equal(t, "", cfg.PublicListener.BindAddress)
|
||||||
|
require.Equal(t, 4567, cfg.PublicListener.BindPort)
|
||||||
|
require.Equal(t, "127.0.0.1:1234", cfg.PublicListener.LocalServiceAddress)
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range cases {
|
for _, tc := range cases {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user