diff --git a/gateway/metrics/exporter.go b/gateway/metrics/exporter.go
index 1d4c36cee3789f75b87891d2d6e0229947c23e3f..5a627d71ec16faed4e045f0ae71bf60bdb939e02 100644
--- a/gateway/metrics/exporter.go
+++ b/gateway/metrics/exporter.go
@@ -14,6 +14,7 @@ import (
 
 	"log"
 
+	"github.com/openfaas/faas-provider/auth"
 	"github.com/openfaas/faas/gateway/requests"
 	"github.com/prometheus/client_golang/prometheus"
 )
@@ -22,13 +23,15 @@ import (
 type Exporter struct {
 	metricOptions MetricOptions
 	services      []requests.Function
+	credentials   *auth.BasicAuthCredentials
 }
 
 // NewExporter creates a new exporter for the OpenFaaS gateway metrics
-func NewExporter(options MetricOptions) *Exporter {
+func NewExporter(options MetricOptions, credentials *auth.BasicAuthCredentials) *Exporter {
 	return &Exporter{
 		metricOptions: options,
 		services:      []requests.Function{},
+		credentials:   credentials,
 	}
 }
 
@@ -77,6 +80,9 @@ func (e *Exporter) StartServiceWatcher(endpointURL url.URL, metricsOptions Metri
 			case <-ticker.C:
 
 				get, _ := http.NewRequest(http.MethodGet, endpointURL.String()+"system/functions", nil)
+				if e.credentials != nil {
+					get.SetBasicAuth(e.credentials.User, e.credentials.Password)
+				}
 
 				services := []requests.Function{}
 				res, err := proxyClient.Do(get)
diff --git a/gateway/metrics/exporter_test.go b/gateway/metrics/exporter_test.go
index 04e4108834d5712634b249fcd46730829ac95b69..371ff3a8b8a1471f45a08c2a82c649dd26658758 100644
--- a/gateway/metrics/exporter_test.go
+++ b/gateway/metrics/exporter_test.go
@@ -33,7 +33,7 @@ func readGauge(g prometheus.Metric) metricResult {
 
 func Test_Describe_DescribesThePrometheusMetrics(t *testing.T) {
 	metricsOptions := BuildMetricsOptions()
-	exporter := NewExporter(metricsOptions)
+	exporter := NewExporter(metricsOptions, nil)
 
 	ch := make(chan *prometheus.Desc)
 	defer close(ch)
@@ -62,7 +62,7 @@ func Test_Describe_DescribesThePrometheusMetrics(t *testing.T) {
 
 func Test_Collect_CollectsTheNumberOfReplicasOfAService(t *testing.T) {
 	metricsOptions := BuildMetricsOptions()
-	exporter := NewExporter(metricsOptions)
+	exporter := NewExporter(metricsOptions, nil)
 
 	expectedService := requests.Function{
 		Name:     "function_with_two_replica",
diff --git a/gateway/metrics/prometheus_query.go b/gateway/metrics/prometheus_query.go
index 21033d665b9c0a5701082cb7bce0cbe4d56a0ee3..5b8fd2a50263285d3ca49f6fbc95e37f2ae78b84 100644
--- a/gateway/metrics/prometheus_query.go
+++ b/gateway/metrics/prometheus_query.go
@@ -7,7 +7,7 @@ import (
 	"net/http"
 )
 
-// PrometheusQuery a PrometheusQuery
+// PrometheusQuery represents parameters for querying Prometheus
 type PrometheusQuery struct {
 	Port   int
 	Host   string
diff --git a/gateway/plugin/external.go b/gateway/plugin/external.go
index 5e2b0743480056f80adfc330847ad760b294e1e0..4a9bfd3ff096ddc8440fbc55f6954fc1658218c5 100644
--- a/gateway/plugin/external.go
+++ b/gateway/plugin/external.go
@@ -17,12 +17,13 @@ import (
 
 	"io/ioutil"
 
+	"github.com/openfaas/faas-provider/auth"
 	"github.com/openfaas/faas/gateway/handlers"
 	"github.com/openfaas/faas/gateway/requests"
 )
 
 // NewExternalServiceQuery proxies service queries to external plugin via HTTP
-func NewExternalServiceQuery(externalURL url.URL) handlers.ServiceQuery {
+func NewExternalServiceQuery(externalURL url.URL, credentials *auth.BasicAuthCredentials) handlers.ServiceQuery {
 	proxyClient := http.Client{
 		Transport: &http.Transport{
 			Proxy: http.ProxyFromEnvironment,
@@ -40,6 +41,7 @@ func NewExternalServiceQuery(externalURL url.URL) handlers.ServiceQuery {
 	return ExternalServiceQuery{
 		URL:         externalURL,
 		ProxyClient: proxyClient,
+		Credentials: credentials,
 	}
 }
 
@@ -47,6 +49,7 @@ func NewExternalServiceQuery(externalURL url.URL) handlers.ServiceQuery {
 type ExternalServiceQuery struct {
 	URL         url.URL
 	ProxyClient http.Client
+	Credentials *auth.BasicAuthCredentials
 }
 
 // ScaleServiceRequest request scaling of replica
@@ -65,10 +68,13 @@ func (s ExternalServiceQuery) GetReplicas(serviceName string) (handlers.ServiceQ
 
 	req, _ := http.NewRequest(http.MethodGet, urlPath, nil)
 
+	if s.Credentials != nil {
+		req.SetBasicAuth(s.Credentials.User, s.Credentials.Password)
+	}
+
 	res, err := s.ProxyClient.Do(req)
 
 	if err != nil {
-
 		log.Println(urlPath, err)
 	} else {
 
@@ -129,6 +135,11 @@ func (s ExternalServiceQuery) SetReplicas(serviceName string, count uint64) erro
 
 	urlPath := fmt.Sprintf("%ssystem/scale-function/%s", s.URL.String(), serviceName)
 	req, _ := http.NewRequest(http.MethodPost, urlPath, bytes.NewReader(requestBody))
+
+	if s.Credentials != nil {
+		req.SetBasicAuth(s.Credentials.User, s.Credentials.Password)
+	}
+
 	defer req.Body.Close()
 	res, err := s.ProxyClient.Do(req)
 
diff --git a/gateway/server.go b/gateway/server.go
index 65060b74f76a45012c851a722f6f8b0851855c7e..8c8ab25d978e40f4487c5a7d57f7a62d512bf4ad 100644
--- a/gateway/server.go
+++ b/gateway/server.go
@@ -53,7 +53,7 @@ func main() {
 	servicePollInterval := time.Second * 5
 
 	metricsOptions := metrics.BuildMetricsOptions()
-	exporter := metrics.NewExporter(metricsOptions)
+	exporter := metrics.NewExporter(metricsOptions, credentials)
 	exporter.StartServiceWatcher(*config.FunctionsProviderURL, metricsOptions, "func", servicePollInterval)
 	metrics.RegisterExporter(exporter)
 
@@ -89,7 +89,7 @@ func main() {
 	faasHandlers.QueryFunction = handlers.MakeForwardingProxyHandler(reverseProxy, forwardingNotifiers, urlResolver, nilURLTransformer)
 	faasHandlers.InfoHandler = handlers.MakeInfoHandler(handlers.MakeForwardingProxyHandler(reverseProxy, forwardingNotifiers, urlResolver, nilURLTransformer))
 
-	alertHandler := plugin.NewExternalServiceQuery(*config.FunctionsProviderURL)
+	alertHandler := plugin.NewExternalServiceQuery(*config.FunctionsProviderURL, credentials)
 	faasHandlers.Alert = handlers.MakeAlertHandler(alertHandler)
 
 	if config.UseNATS() {