Skip to content

Commit 49bb5ec

Browse files
authored
fix: add HTTP2 protocol options to skywalking and otel cluster (alibaba#1379)
1 parent 11ff2d1 commit 49bb5ec

File tree

2 files changed

+102
-51
lines changed

2 files changed

+102
-51
lines changed

Diff for: Makefile.core.mk

+4-4
Original file line numberDiff line numberDiff line change
@@ -72,17 +72,17 @@ go.test.coverage: prebuild
7272

7373
.PHONY: build
7474
build: prebuild $(OUT)
75-
GOPROXY=$(GOPROXY) GOOS=$(GOOS_LOCAL) GOARCH=$(GOARCH_LOCAL) LDFLAGS=$(RELEASE_LDFLAGS) tools/hack/gobuild.sh $(OUT)/ $(HIGRESS_BINARIES)
75+
GOPROXY="$(GOPROXY)" GOOS=$(GOOS_LOCAL) GOARCH=$(GOARCH_LOCAL) LDFLAGS=$(RELEASE_LDFLAGS) tools/hack/gobuild.sh $(OUT)/ $(HIGRESS_BINARIES)
7676

7777
.PHONY: build-linux
7878
build-linux: prebuild $(OUT)
79-
GOPROXY=$(GOPROXY) GOOS=linux GOARCH=$(GOARCH_LOCAL) LDFLAGS=$(RELEASE_LDFLAGS) tools/hack/gobuild.sh $(OUT_LINUX)/ $(HIGRESS_BINARIES)
79+
GOPROXY="$(GOPROXY)" GOOS=linux GOARCH=$(GOARCH_LOCAL) LDFLAGS=$(RELEASE_LDFLAGS) tools/hack/gobuild.sh $(OUT_LINUX)/ $(HIGRESS_BINARIES)
8080

8181
$(AMD64_OUT_LINUX)/higress:
82-
GOPROXY=$(GOPROXY) GOOS=linux GOARCH=amd64 LDFLAGS=$(RELEASE_LDFLAGS) tools/hack/gobuild.sh ./out/linux_amd64/ $(HIGRESS_BINARIES)
82+
GOPROXY="$(GOPROXY)" GOOS=linux GOARCH=amd64 LDFLAGS=$(RELEASE_LDFLAGS) tools/hack/gobuild.sh ./out/linux_amd64/ $(HIGRESS_BINARIES)
8383

8484
$(ARM64_OUT_LINUX)/higress:
85-
GOPROXY=$(GOPROXY) GOOS=linux GOARCH=arm64 LDFLAGS=$(RELEASE_LDFLAGS) tools/hack/gobuild.sh ./out/linux_arm64/ $(HIGRESS_BINARIES)
85+
GOPROXY="$(GOPROXY)" GOOS=linux GOARCH=arm64 LDFLAGS=$(RELEASE_LDFLAGS) tools/hack/gobuild.sh ./out/linux_arm64/ $(HIGRESS_BINARIES)
8686

8787
.PHONY: build-hgctl
8888
build-hgctl: prebuild $(OUT)

Diff for: pkg/ingress/kube/configmap/tracing.go

+98-47
Original file line numberDiff line numberDiff line change
@@ -255,69 +255,120 @@ func (t *TracingController) ConstructEnvoyFilters() ([]*config.Config, error) {
255255
return configs, nil
256256
}
257257

258-
config := &config.Config{
259-
Meta: config.Meta{
260-
GroupVersionKind: gvk.EnvoyFilter,
261-
Name: higressTracingEnvoyFilterName,
262-
Namespace: namespace,
263-
},
264-
Spec: &networking.EnvoyFilter{
265-
ConfigPatches: []*networking.EnvoyFilter_EnvoyConfigObjectPatch{
266-
{
267-
ApplyTo: networking.EnvoyFilter_NETWORK_FILTER,
268-
Match: &networking.EnvoyFilter_EnvoyConfigObjectMatch{
269-
Context: networking.EnvoyFilter_GATEWAY,
270-
ObjectTypes: &networking.EnvoyFilter_EnvoyConfigObjectMatch_Listener{
271-
Listener: &networking.EnvoyFilter_ListenerMatch{
272-
FilterChain: &networking.EnvoyFilter_ListenerMatch_FilterChainMatch{
273-
Filter: &networking.EnvoyFilter_ListenerMatch_FilterMatch{
274-
Name: "envoy.filters.network.http_connection_manager",
275-
},
276-
},
258+
configPatches := []*networking.EnvoyFilter_EnvoyConfigObjectPatch{
259+
{
260+
ApplyTo: networking.EnvoyFilter_NETWORK_FILTER,
261+
Match: &networking.EnvoyFilter_EnvoyConfigObjectMatch{
262+
Context: networking.EnvoyFilter_GATEWAY,
263+
ObjectTypes: &networking.EnvoyFilter_EnvoyConfigObjectMatch_Listener{
264+
Listener: &networking.EnvoyFilter_ListenerMatch{
265+
FilterChain: &networking.EnvoyFilter_ListenerMatch_FilterChainMatch{
266+
Filter: &networking.EnvoyFilter_ListenerMatch_FilterMatch{
267+
Name: "envoy.filters.network.http_connection_manager",
277268
},
278269
},
279270
},
280-
Patch: &networking.EnvoyFilter_Patch{
281-
Operation: networking.EnvoyFilter_Patch_MERGE,
282-
Value: util.BuildPatchStruct(tracingConfig),
283-
},
284271
},
285-
{
286-
ApplyTo: networking.EnvoyFilter_HTTP_FILTER,
287-
Match: &networking.EnvoyFilter_EnvoyConfigObjectMatch{
288-
Context: networking.EnvoyFilter_GATEWAY,
289-
ObjectTypes: &networking.EnvoyFilter_EnvoyConfigObjectMatch_Listener{
290-
Listener: &networking.EnvoyFilter_ListenerMatch{
291-
FilterChain: &networking.EnvoyFilter_ListenerMatch_FilterChainMatch{
292-
Filter: &networking.EnvoyFilter_ListenerMatch_FilterMatch{
293-
Name: "envoy.filters.network.http_connection_manager",
294-
SubFilter: &networking.EnvoyFilter_ListenerMatch_SubFilterMatch{
295-
Name: "envoy.filters.http.router",
296-
},
297-
},
272+
},
273+
Patch: &networking.EnvoyFilter_Patch{
274+
Operation: networking.EnvoyFilter_Patch_MERGE,
275+
Value: util.BuildPatchStruct(tracingConfig),
276+
},
277+
},
278+
{
279+
ApplyTo: networking.EnvoyFilter_HTTP_FILTER,
280+
Match: &networking.EnvoyFilter_EnvoyConfigObjectMatch{
281+
Context: networking.EnvoyFilter_GATEWAY,
282+
ObjectTypes: &networking.EnvoyFilter_EnvoyConfigObjectMatch_Listener{
283+
Listener: &networking.EnvoyFilter_ListenerMatch{
284+
FilterChain: &networking.EnvoyFilter_ListenerMatch_FilterChainMatch{
285+
Filter: &networking.EnvoyFilter_ListenerMatch_FilterMatch{
286+
Name: "envoy.filters.network.http_connection_manager",
287+
SubFilter: &networking.EnvoyFilter_ListenerMatch_SubFilterMatch{
288+
Name: "envoy.filters.http.router",
298289
},
299290
},
300291
},
301292
},
302-
Patch: &networking.EnvoyFilter_Patch{
303-
Operation: networking.EnvoyFilter_Patch_MERGE,
304-
Value: util.BuildPatchStruct(`{
293+
},
294+
},
295+
Patch: &networking.EnvoyFilter_Patch{
296+
Operation: networking.EnvoyFilter_Patch_MERGE,
297+
Value: util.BuildPatchStruct(`{
305298
"name":"envoy.filters.http.router",
306299
"typed_config":{
307300
"@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router",
308301
"start_child_span": true
309302
}
310303
}`),
311-
},
312-
},
313304
},
314305
},
315306
}
316307

308+
patches := t.constructTracingExtendPatches(tracing)
309+
configPatches = append(configPatches, patches...)
310+
311+
config := &config.Config{
312+
Meta: config.Meta{
313+
GroupVersionKind: gvk.EnvoyFilter,
314+
Name: higressTracingEnvoyFilterName,
315+
Namespace: namespace,
316+
},
317+
Spec: &networking.EnvoyFilter{
318+
ConfigPatches: configPatches,
319+
},
320+
}
321+
317322
configs = append(configs, config)
318323
return configs, nil
319324
}
320325

326+
func tracingClusterName(port, service string) string {
327+
return fmt.Sprintf("outbound|%s||%s", port, service)
328+
}
329+
330+
func (t *TracingController) constructHTTP2ProtocolOptionsPatch(port, service string) *networking.EnvoyFilter_EnvoyConfigObjectPatch {
331+
http2ProtocolOptions := `{"typed_extension_protocol_options": {
332+
"envoy.extensions.upstreams.http.v3.HttpProtocolOptions": {
333+
"@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions",
334+
"explicit_http_config": {
335+
"http2_protocol_options": {}
336+
}
337+
}
338+
}}`
339+
340+
return &networking.EnvoyFilter_EnvoyConfigObjectPatch{
341+
ApplyTo: networking.EnvoyFilter_CLUSTER,
342+
Match: &networking.EnvoyFilter_EnvoyConfigObjectMatch{
343+
Context: networking.EnvoyFilter_GATEWAY,
344+
ObjectTypes: &networking.EnvoyFilter_EnvoyConfigObjectMatch_Cluster{
345+
Cluster: &networking.EnvoyFilter_ClusterMatch{
346+
Name: tracingClusterName(port, service),
347+
},
348+
},
349+
},
350+
Patch: &networking.EnvoyFilter_Patch{
351+
Operation: networking.EnvoyFilter_Patch_MERGE,
352+
Value: util.BuildPatchStruct(http2ProtocolOptions),
353+
},
354+
}
355+
}
356+
357+
func (t *TracingController) constructTracingExtendPatches(tracing *Tracing) []*networking.EnvoyFilter_EnvoyConfigObjectPatch {
358+
if tracing == nil {
359+
return nil
360+
}
361+
var patches []*networking.EnvoyFilter_EnvoyConfigObjectPatch
362+
if skywalking := tracing.Skywalking; skywalking != nil {
363+
patches = append(patches, t.constructHTTP2ProtocolOptionsPatch(skywalking.Port, skywalking.Service))
364+
}
365+
if otel := tracing.OpenTelemetry; otel != nil {
366+
patches = append(patches, t.constructHTTP2ProtocolOptionsPatch(otel.Port, otel.Service))
367+
}
368+
369+
return patches
370+
}
371+
321372
func (t *TracingController) constructTracingTracer(tracing *Tracing, namespace string) string {
322373
tracingConfig := ""
323374
timeout := float32(tracing.Timeout) / 1000
@@ -338,7 +389,7 @@ func (t *TracingController) constructTracingTracer(tracing *Tracing, namespace s
338389
},
339390
"grpc_service": {
340391
"envoy_grpc": {
341-
"cluster_name": "outbound|%s||%s"
392+
"cluster_name": "%s"
342393
},
343394
"timeout": "%.3fs"
344395
}
@@ -349,7 +400,7 @@ func (t *TracingController) constructTracingTracer(tracing *Tracing, namespace s
349400
}
350401
}
351402
}
352-
}`, namespace, skywalking.AccessToken, skywalking.Port, skywalking.Service, timeout, tracing.Sampling)
403+
}`, namespace, skywalking.AccessToken, tracingClusterName(skywalking.Port, skywalking.Service), timeout, tracing.Sampling)
353404
}
354405

355406
if tracing.Zipkin != nil {
@@ -363,7 +414,7 @@ func (t *TracingController) constructTracingTracer(tracing *Tracing, namespace s
363414
"name": "envoy.tracers.zipkin",
364415
"typed_config": {
365416
"@type": "type.googleapis.com/envoy.config.trace.v3.ZipkinConfig",
366-
"collector_cluster": "outbound|%s||%s",
417+
"collector_cluster": "%s",
367418
"collector_endpoint": "/api/v2/spans",
368419
"collector_hostname": "higress-gateway",
369420
"collector_endpoint_version": "HTTP_JSON",
@@ -375,7 +426,7 @@ func (t *TracingController) constructTracingTracer(tracing *Tracing, namespace s
375426
}
376427
}
377428
}
378-
}`, zipkin.Port, zipkin.Service, tracing.Sampling)
429+
}`, tracingClusterName(zipkin.Port, zipkin.Service), tracing.Sampling)
379430
}
380431

381432
if tracing.OpenTelemetry != nil {
@@ -392,7 +443,7 @@ func (t *TracingController) constructTracingTracer(tracing *Tracing, namespace s
392443
"service_name": "higress-gateway.%s",
393444
"grpc_service": {
394445
"envoy_grpc": {
395-
"cluster_name": "outbound|%s||%s"
446+
"cluster_name": "%s"
396447
},
397448
"timeout": "%.3fs"
398449
}
@@ -403,7 +454,7 @@ func (t *TracingController) constructTracingTracer(tracing *Tracing, namespace s
403454
}
404455
}
405456
}
406-
}`, namespace, opentelemetry.Port, opentelemetry.Service, timeout, tracing.Sampling)
457+
}`, namespace, tracingClusterName(opentelemetry.Port, opentelemetry.Service), timeout, tracing.Sampling)
407458
}
408459
return tracingConfig
409460
}

0 commit comments

Comments
 (0)