TUN-5737: Support https protocol over unix socket origin
This commit is contained in:
parent
a1d485eca5
commit
c2a32de35f
|
@ -126,7 +126,7 @@ func parseSingleOriginService(c *cli.Context, allowURLFromArgs bool) (OriginServ
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "Error validating --unix-socket")
|
return nil, errors.Wrap(err, "Error validating --unix-socket")
|
||||||
}
|
}
|
||||||
return &unixSocketPath{path: path}, nil
|
return &unixSocketPath{path: path, scheme: "http"}, nil
|
||||||
}
|
}
|
||||||
u, err := url.Parse("http://localhost:8080")
|
u, err := url.Parse("http://localhost:8080")
|
||||||
return &httpService{url: u}, err
|
return &httpService{url: u}, err
|
||||||
|
@ -169,7 +169,10 @@ func validateIngress(ingress []config.UnvalidatedIngressRule, defaults OriginReq
|
||||||
if prefix := "unix:"; strings.HasPrefix(r.Service, prefix) {
|
if prefix := "unix:"; strings.HasPrefix(r.Service, prefix) {
|
||||||
// No validation necessary for unix socket filepath services
|
// No validation necessary for unix socket filepath services
|
||||||
path := strings.TrimPrefix(r.Service, prefix)
|
path := strings.TrimPrefix(r.Service, prefix)
|
||||||
service = &unixSocketPath{path: path}
|
service = &unixSocketPath{path: path, scheme: "http"}
|
||||||
|
} else if prefix := "unix+tls:"; strings.HasPrefix(r.Service, prefix) {
|
||||||
|
path := strings.TrimPrefix(r.Service, prefix)
|
||||||
|
service = &unixSocketPath{path: path, scheme: "https"}
|
||||||
} else if prefix := "http_status:"; strings.HasPrefix(r.Service, prefix) {
|
} else if prefix := "http_status:"; strings.HasPrefix(r.Service, prefix) {
|
||||||
status, err := strconv.Atoi(strings.TrimPrefix(r.Service, prefix))
|
status, err := strconv.Atoi(strings.TrimPrefix(r.Service, prefix))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -26,8 +26,21 @@ ingress:
|
||||||
`
|
`
|
||||||
ing, err := ParseIngress(MustReadIngress(rawYAML))
|
ing, err := ParseIngress(MustReadIngress(rawYAML))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
_, ok := ing.Rules[0].Service.(*unixSocketPath)
|
s, ok := ing.Rules[0].Service.(*unixSocketPath)
|
||||||
require.True(t, ok)
|
require.True(t, ok)
|
||||||
|
require.Equal(t, "http", s.scheme)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestParseUnixSocketTLS(t *testing.T) {
|
||||||
|
rawYAML := `
|
||||||
|
ingress:
|
||||||
|
- service: unix+tls:/tmp/echo.sock
|
||||||
|
`
|
||||||
|
ing, err := ParseIngress(MustReadIngress(rawYAML))
|
||||||
|
require.NoError(t, err)
|
||||||
|
s, ok := ing.Rules[0].Service.(*unixSocketPath)
|
||||||
|
require.True(t, ok)
|
||||||
|
require.Equal(t, "https", s.scheme)
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_parseIngress(t *testing.T) {
|
func Test_parseIngress(t *testing.T) {
|
||||||
|
|
|
@ -23,7 +23,7 @@ type StreamBasedOriginProxy interface {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *unixSocketPath) RoundTrip(req *http.Request) (*http.Response, error) {
|
func (o *unixSocketPath) RoundTrip(req *http.Request) (*http.Response, error) {
|
||||||
req.URL.Scheme = "http"
|
req.URL.Scheme = o.scheme
|
||||||
return o.transport.RoundTrip(req)
|
return o.transport.RoundTrip(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,9 +33,10 @@ type OriginService interface {
|
||||||
start(log *zerolog.Logger, shutdownC <-chan struct{}, cfg OriginRequestConfig) error
|
start(log *zerolog.Logger, shutdownC <-chan struct{}, cfg OriginRequestConfig) error
|
||||||
}
|
}
|
||||||
|
|
||||||
// unixSocketPath is an OriginService representing a unix socket (which accepts HTTP)
|
// unixSocketPath is an OriginService representing a unix socket (which accepts HTTP or HTTPS)
|
||||||
type unixSocketPath struct {
|
type unixSocketPath struct {
|
||||||
path string
|
path string
|
||||||
|
scheme string
|
||||||
transport *http.Transport
|
transport *http.Transport
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue