Fix reverse proxy shows 404 not found when Istio enabled (#1377)

Istio sidecar proxy blocks all requests sent through the reverse proxy
to the target service if the request.Host is not properly set to the
internal target service host. This PR sets the target service hosts
before establishing the proxy for the client in order to pass the
Istio sidecar proxy check.
This commit is contained in:
Ta-Ching Chen
2019-11-04 21:59:40 +08:00
committed by GitHub
parent f288f0f258
commit c33f1e112e
5 changed files with 11 additions and 3 deletions
@@ -212,6 +212,7 @@ func main() {
req.URL.Scheme = "http"
req.URL.Host = "localhost:8501"
req.URL.Path = fmt.Sprintf("/v1/models/%v:%v", MODEL_NAME, API_TYPE)
req.Host = "localhost:8501"
}
proxy := &httputil.ReverseProxy{
+6 -2
View File
@@ -18,7 +18,6 @@ package controller
import (
"encoding/json"
"errors"
"io"
"io/ioutil"
"net/http"
@@ -30,6 +29,7 @@ import (
restfulspec "github.com/emicklei/go-restful-openapi"
"github.com/go-openapi/spec"
"github.com/gorilla/mux"
"github.com/pkg/errors"
"go.uber.org/zap"
apiv1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -258,9 +258,12 @@ func (a *API) FunctionLogsApiPost(w http.ResponseWriter, r *http.Request) {
svcUrl, err := url.Parse(dbCnf.httpURL)
if err != nil {
a.logger.Error("failed parse url to establish proxy to database for function logs",
msg := "failed parse url to establish proxy to database for function logs"
a.logger.Error(msg,
zap.Error(err),
zap.String("database_url", dbCnf.httpURL))
a.respondWithError(w, errors.Wrap(err, msg))
return
}
// set up proxy server director
director := func(req *http.Request) {
@@ -269,6 +272,7 @@ func (a *API) FunctionLogsApiPost(w http.ResponseWriter, r *http.Request) {
req.URL.Scheme = svcUrl.Scheme
req.URL.Host = svcUrl.Host
req.URL.Path = svcUrl.Path
req.Host = svcUrl.Host
// set up http basic auth for database authentication
req.SetBasicAuth(dbCnf.username, dbCnf.password)
}
+1
View File
@@ -69,6 +69,7 @@ func (api *API) StorageServiceProxy(w http.ResponseWriter, r *http.Request) {
req.URL.Scheme = ssUrl.Scheme
req.URL.Host = ssUrl.Host
req.URL.Path = "/v1/archive"
req.Host = ssUrl.Host
}
proxy := &httputil.ReverseProxy{
Director: director,
+1
View File
@@ -24,6 +24,7 @@ func (api *API) WorkflowApiserverProxy(w http.ResponseWriter, r *http.Request) {
req.URL.Scheme = ssUrl.Scheme
req.URL.Host = ssUrl.Host
req.URL.Path = path
req.Host = ssUrl.Host
}
proxy := &httputil.ReverseProxy{
Director: director,
+2 -1
View File
@@ -27,6 +27,7 @@ import (
"time"
influxdbClient "github.com/influxdata/influxdb/client/v2"
"github.com/pkg/errors"
ferror "github.com/fission/fission/pkg/error"
"github.com/fission/fission/pkg/fission-cli/log"
@@ -143,7 +144,7 @@ func (influx InfluxDB) query(query influxdbClient.Query) (*influxdbClient.Respon
queryURL.Path = path.Clean(fmt.Sprintf("%s/proxy/%s", queryURL.Path, INFLUXDB))
req, err := http.NewRequest(http.MethodPost, queryURL.String(), nil)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "error creating request for log proxy")
}
parametersBytes, err := json.Marshal(query.Parameters)