Skip to content

Commit f9702c4

Browse files
JonasVerhofsteyurishkuro
authored andcommitted
Add CORS handling for Zipkin collector service, fixes #703 (#1463)
* Add CORS handling for Zipkin collector service, fixes #703 Signed-off-by: Jonas Verhofsté <25819942+JonasVerhofste@users.noreply.github.com> * Show status of lock file Signed-off-by: Yuri Shkuro <ys@uber.com> * fix dep-ensure command Signed-off-by: Yuri Shkuro <ys@uber.com> * add deps Signed-off-by: Yuri Shkuro <ys@uber.com> * pin grpc to previous version Signed-off-by: Yuri Shkuro <ys@uber.com>
1 parent 0b9311d commit f9702c4

File tree

5 files changed

+80
-45
lines changed

5 files changed

+80
-45
lines changed

Gopkg.lock

+43-32
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Gopkg.toml

+6-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ required = [
9797

9898
[[constraint]]
9999
name = "google.golang.org/grpc"
100-
version = "^1.13.0"
100+
version = "=1.19.1"
101101

102102
[[constraint]]
103103
name = "gopkg.in/olivere/elastic.v5"
@@ -142,3 +142,8 @@ required = [
142142
[[constraint]]
143143
name = "github.com/grpc-ecosystem/go-grpc-middleware"
144144
version = "1.0.0"
145+
146+
[[constaint]]
147+
name = "github.com/rs/cors"
148+
version = "1.3.0"
149+

Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ install-glide:
152152
.PHONY: install
153153
install:
154154
@which dep > /dev/null || curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
155-
dep ensure
155+
dep ensure -vendor-only
156156

157157
.PHONE: elasticsearch-mappings
158158
elasticsearch-mappings:

cmd/collector/app/builder/builder_flags.go

+19-9
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,17 @@ import (
2424
)
2525

2626
const (
27-
collectorQueueSize = "collector.queue-size"
28-
collectorNumWorkers = "collector.num-workers"
29-
collectorPort = "collector.port"
30-
collectorHTTPPort = "collector.http-port"
31-
collectorGRPCPort = "collector.grpc-port"
32-
collectorGRPCTLS = "collector.grpc.tls"
33-
collectorGRPCCert = "collector.grpc.tls.cert"
34-
collectorGRPCKey = "collector.grpc.tls.key"
35-
collectorZipkinHTTPort = "collector.zipkin.http-port"
27+
collectorQueueSize = "collector.queue-size"
28+
collectorNumWorkers = "collector.num-workers"
29+
collectorPort = "collector.port"
30+
collectorHTTPPort = "collector.http-port"
31+
collectorGRPCPort = "collector.grpc-port"
32+
collectorGRPCTLS = "collector.grpc.tls"
33+
collectorGRPCCert = "collector.grpc.tls.cert"
34+
collectorGRPCKey = "collector.grpc.tls.key"
35+
collectorZipkinHTTPort = "collector.zipkin.http-port"
36+
collectorZipkinAllowedOrigins = "collector.zipkin.allowed-origins"
37+
collectorZipkinAllowedHeaders = "collector.zipkin.allowed-headers"
3638
)
3739

3840
// CollectorOptions holds configuration for collector
@@ -55,6 +57,10 @@ type CollectorOptions struct {
5557
CollectorGRPCKey string
5658
// CollectorZipkinHTTPPort is the port that the Zipkin collector service listens in on for http requests
5759
CollectorZipkinHTTPPort int
60+
// CollectorZipkinAllowedOrigins is a list of origins a cross-domain request to the Zipkin collector service can be executed from
61+
CollectorZipkinAllowedOrigins string
62+
// CollectorZipkinAllowedHeaders is a list of headers that the Zipkin collector service allowes the client to use with cross-domain requests
63+
CollectorZipkinAllowedHeaders string
5864
}
5965

6066
// AddFlags adds flags for CollectorOptions
@@ -68,6 +74,8 @@ func AddFlags(flags *flag.FlagSet) {
6874
flags.Bool(collectorGRPCTLS, false, "Enable TLS")
6975
flags.String(collectorGRPCCert, "", "Path to TLS certificate file")
7076
flags.String(collectorGRPCKey, "", "Path to TLS key file")
77+
flags.String(collectorZipkinAllowedOrigins, "*", "Allowed origins for the Zipkin collector service, default accepts all")
78+
flags.String(collectorZipkinAllowedHeaders, "content-type", "Allowed headers for the Zipkin collector service, default content-type")
7179
}
7280

7381
// InitFromViper initializes CollectorOptions with properties from viper
@@ -81,5 +89,7 @@ func (cOpts *CollectorOptions) InitFromViper(v *viper.Viper) *CollectorOptions {
8189
cOpts.CollectorGRPCCert = v.GetString(collectorGRPCCert)
8290
cOpts.CollectorGRPCKey = v.GetString(collectorGRPCKey)
8391
cOpts.CollectorZipkinHTTPPort = v.GetInt(collectorZipkinHTTPort)
92+
cOpts.CollectorZipkinAllowedOrigins = v.GetString(collectorZipkinAllowedOrigins)
93+
cOpts.CollectorZipkinAllowedHeaders = v.GetString(collectorZipkinAllowedHeaders)
8494
return cOpts
8595
}

cmd/collector/main.go

+11-2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"strconv"
2525

2626
"github.com/gorilla/mux"
27+
"github.com/rs/cors"
2728
"github.com/spf13/cobra"
2829
"github.com/spf13/viper"
2930
"github.com/uber/jaeger-lib/metrics"
@@ -137,7 +138,7 @@ func main() {
137138
recoveryHandler := recoveryhandler.NewRecoveryHandler(logger, true)
138139
httpHandler := recoveryHandler(r)
139140

140-
go startZipkinHTTPAPI(logger, builderOpts.CollectorZipkinHTTPPort, zipkinSpansHandler, recoveryHandler)
141+
go startZipkinHTTPAPI(logger, builderOpts.CollectorZipkinHTTPPort, builderOpts.CollectorZipkinAllowedOrigins, builderOpts.CollectorZipkinAllowedHeaders, zipkinSpansHandler, recoveryHandler)
141142

142143
logger.Info("Starting jaeger-collector HTTP server", zap.Int("http-port", builderOpts.CollectorHTTPPort))
143144
go func() {
@@ -214,6 +215,8 @@ func startGRPCServer(
214215
func startZipkinHTTPAPI(
215216
logger *zap.Logger,
216217
zipkinPort int,
218+
allowedOrigins string,
219+
allowedHeaders string,
217220
zipkinSpansHandler app.ZipkinSpansHandler,
218221
recoveryHandler func(http.Handler) http.Handler,
219222
) {
@@ -222,10 +225,16 @@ func startZipkinHTTPAPI(
222225
r := mux.NewRouter()
223226
zHandler.RegisterRoutes(r)
224227

228+
c := cors.New(cors.Options{
229+
AllowedOrigins: []string{allowedOrigins},
230+
AllowedMethods: []string{"POST"}, // Allowing only POST, because that's the only handled one
231+
AllowedHeaders: []string{allowedHeaders},
232+
})
233+
225234
httpPortStr := ":" + strconv.Itoa(zipkinPort)
226235
logger.Info("Listening for Zipkin HTTP traffic", zap.Int("zipkin.http-port", zipkinPort))
227236

228-
if err := http.ListenAndServe(httpPortStr, recoveryHandler(r)); err != nil {
237+
if err := http.ListenAndServe(httpPortStr, c.Handler(recoveryHandler(r))); err != nil {
229238
logger.Fatal("Could not launch service", zap.Error(err))
230239
}
231240
}

0 commit comments

Comments
 (0)