From 05bad0c66b21169b116c73c1cf25697ad77e673e Mon Sep 17 00:00:00 2001 From: Jack Loughran <30052269+jackloughran@users.noreply.github.com> Date: Fri, 7 Aug 2020 15:33:07 -0400 Subject: [PATCH 01/11] add grpc support to ingress gateway --- agent/structs/config_entry_gateways.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/agent/structs/config_entry_gateways.go b/agent/structs/config_entry_gateways.go index 27a025d527d1..cbcf0baa1b11 100644 --- a/agent/structs/config_entry_gateways.go +++ b/agent/structs/config_entry_gateways.go @@ -124,6 +124,7 @@ func (e *IngressGatewayConfigEntry) Validate() error { validProtocols := map[string]bool{ "http": true, "tcp": true, + "grpc": true, } declaredPorts := make(map[int]bool) @@ -134,7 +135,7 @@ func (e *IngressGatewayConfigEntry) Validate() error { declaredPorts[listener.Port] = true if _, ok := validProtocols[listener.Protocol]; !ok { - return fmt.Errorf("Protocol must be either 'http' or 'tcp', '%s' is an unsupported protocol.", listener.Protocol) + return fmt.Errorf("Protocol must be 'http', 'tcp', or 'grpc'. '%s' is an unsupported protocol.", listener.Protocol) } if len(listener.Services) == 0 { From 092fd7193021b4059faf93810e120108e0216f26 Mon Sep 17 00:00:00 2001 From: Jack Loughran <30052269+jackloughran@users.noreply.github.com> Date: Fri, 7 Aug 2020 15:38:54 -0400 Subject: [PATCH 02/11] update comments and docs --- agent/structs/config_entry_gateways.go | 2 +- api/config_entry_gateways.go | 2 +- website/pages/docs/agent/config-entries/ingress-gateway.mdx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/agent/structs/config_entry_gateways.go b/agent/structs/config_entry_gateways.go index cbcf0baa1b11..7d1e540c1b7c 100644 --- a/agent/structs/config_entry_gateways.go +++ b/agent/structs/config_entry_gateways.go @@ -38,7 +38,7 @@ type IngressListener struct { // Protocol declares what type of traffic this listener is expected to // receive. Depending on the protocol, a listener might support multiplexing // services over a single port, or additional discovery chain features. The - // current supported values are: (tcp | http). + // current supported values are: (tcp | http | grpc). Protocol string // Services declares the set of services to which the listener forwards diff --git a/api/config_entry_gateways.go b/api/config_entry_gateways.go index 13a5ec7072f2..4f5a11b8b995 100644 --- a/api/config_entry_gateways.go +++ b/api/config_entry_gateways.go @@ -44,7 +44,7 @@ type IngressListener struct { // Protocol declares what type of traffic this listener is expected to // receive. Depending on the protocol, a listener might support multiplexing // services over a single port, or additional discovery chain features. The - // current supported values are: (tcp | http). + // current supported values are: (tcp | http | grpc). Protocol string // Services declares the set of services to which the listener forwards diff --git a/website/pages/docs/agent/config-entries/ingress-gateway.mdx b/website/pages/docs/agent/config-entries/ingress-gateway.mdx index eca70a0177c0..00694250dbcc 100644 --- a/website/pages/docs/agent/config-entries/ingress-gateway.mdx +++ b/website/pages/docs/agent/config-entries/ingress-gateway.mdx @@ -343,7 +343,7 @@ Also make two services in the frontend namespace available over a custom port wi - `Port` `(int: 0)` - The port that the listener should receive traffic on. - `Protocol` `(string: "tcp")` - The protocol associated with the listener. - Either `tcp` or `http`. + One of `tcp`, `http`, or `grpc`. - `Services` `(array: )` - A list of services to be exposed via this listener. For "tcp" listeners, only a single service is From c2b7ee899d6e77a2146155bfc63e18ff65e8989e Mon Sep 17 00:00:00 2001 From: Jack Loughran <30052269+jackloughran@users.noreply.github.com> Date: Fri, 7 Aug 2020 16:10:38 -0400 Subject: [PATCH 03/11] fix error message in tests --- agent/structs/config_entry_gateways_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent/structs/config_entry_gateways_test.go b/agent/structs/config_entry_gateways_test.go index cf341f4b3c51..08efc052caa0 100644 --- a/agent/structs/config_entry_gateways_test.go +++ b/agent/structs/config_entry_gateways_test.go @@ -326,7 +326,7 @@ func TestIngressConfigEntry_Validate(t *testing.T) { }, }, }, - expectErr: "Protocol must be either 'http' or 'tcp', 'asdf' is an unsupported protocol.", + expectErr: "Protocol must be 'http', 'tcp', or 'grpc'. 'asdf' is an unsupported protocol.", }, { name: "hosts cannot be set on a tcp listener", From 2bae3fe64aeeb675c5179669426b82f68490207c Mon Sep 17 00:00:00 2001 From: Jack Loughran <30052269+jackloughran@users.noreply.github.com> Date: Mon, 24 Aug 2020 13:50:15 -0400 Subject: [PATCH 04/11] add ingress grpc test --- .../case-ingress-gateway-grpc/capture.sh | 3 ++ .../config_entries.hcl | 20 ++++++++++++ .../case-ingress-gateway-grpc/gateway.hcl | 4 +++ .../envoy/case-ingress-gateway-grpc/s2.hcl | 14 ++++++++ .../envoy/case-ingress-gateway-grpc/setup.sh | 10 ++++++ .../envoy/case-ingress-gateway-grpc/vars.sh | 3 ++ .../case-ingress-gateway-grpc/verify.bats | 32 +++++++++++++++++++ test/integration/connect/envoy/main_test.go | 1 + 8 files changed, 87 insertions(+) create mode 100644 test/integration/connect/envoy/case-ingress-gateway-grpc/capture.sh create mode 100644 test/integration/connect/envoy/case-ingress-gateway-grpc/config_entries.hcl create mode 100644 test/integration/connect/envoy/case-ingress-gateway-grpc/gateway.hcl create mode 100644 test/integration/connect/envoy/case-ingress-gateway-grpc/s2.hcl create mode 100644 test/integration/connect/envoy/case-ingress-gateway-grpc/setup.sh create mode 100644 test/integration/connect/envoy/case-ingress-gateway-grpc/vars.sh create mode 100644 test/integration/connect/envoy/case-ingress-gateway-grpc/verify.bats diff --git a/test/integration/connect/envoy/case-ingress-gateway-grpc/capture.sh b/test/integration/connect/envoy/case-ingress-gateway-grpc/capture.sh new file mode 100644 index 000000000000..41ea5cb24fb6 --- /dev/null +++ b/test/integration/connect/envoy/case-ingress-gateway-grpc/capture.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +snapshot_envoy_admin localhost:20000 ingress-gateway primary || true \ No newline at end of file diff --git a/test/integration/connect/envoy/case-ingress-gateway-grpc/config_entries.hcl b/test/integration/connect/envoy/case-ingress-gateway-grpc/config_entries.hcl new file mode 100644 index 000000000000..94f0973a67a6 --- /dev/null +++ b/test/integration/connect/envoy/case-ingress-gateway-grpc/config_entries.hcl @@ -0,0 +1,20 @@ +enable_central_service_config = true + +config_entries { + bootstrap { + kind = "ingress-gateway" + name = "ingress-gateway" + + listeners = [ + { + port = 9999 + protocol = "tcp" + services = [ + { + name = "s1" + } + ] + } + ] + } +} diff --git a/test/integration/connect/envoy/case-ingress-gateway-grpc/gateway.hcl b/test/integration/connect/envoy/case-ingress-gateway-grpc/gateway.hcl new file mode 100644 index 000000000000..781ef1851b27 --- /dev/null +++ b/test/integration/connect/envoy/case-ingress-gateway-grpc/gateway.hcl @@ -0,0 +1,4 @@ +services { + name = "ingress-gateway" + kind = "ingress-gateway" +} diff --git a/test/integration/connect/envoy/case-ingress-gateway-grpc/s2.hcl b/test/integration/connect/envoy/case-ingress-gateway-grpc/s2.hcl new file mode 100644 index 000000000000..fe6252677d54 --- /dev/null +++ b/test/integration/connect/envoy/case-ingress-gateway-grpc/s2.hcl @@ -0,0 +1,14 @@ +services { + name = "s2" + # Advertise gRPC port + port = 8079 + connect { + sidecar_service { + proxy { + config { + protocol = "grpc" + } + } + } + } +} diff --git a/test/integration/connect/envoy/case-ingress-gateway-grpc/setup.sh b/test/integration/connect/envoy/case-ingress-gateway-grpc/setup.sh new file mode 100644 index 000000000000..7aa60189763c --- /dev/null +++ b/test/integration/connect/envoy/case-ingress-gateway-grpc/setup.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +set -euo pipefail + +# wait for bootstrap to apply config entries +wait_for_config_entry ingress-gateway ingress-gateway + +gen_envoy_bootstrap ingress-gateway 20000 primary true +gen_envoy_bootstrap s1 19000 +gen_envoy_bootstrap s2 19001 diff --git a/test/integration/connect/envoy/case-ingress-gateway-grpc/vars.sh b/test/integration/connect/envoy/case-ingress-gateway-grpc/vars.sh new file mode 100644 index 000000000000..c97ad2ea5409 --- /dev/null +++ b/test/integration/connect/envoy/case-ingress-gateway-grpc/vars.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +export REQUIRED_SERVICES="$DEFAULT_REQUIRED_SERVICES ingress-gateway-primary" diff --git a/test/integration/connect/envoy/case-ingress-gateway-grpc/verify.bats b/test/integration/connect/envoy/case-ingress-gateway-grpc/verify.bats new file mode 100644 index 000000000000..159e0fcff8a1 --- /dev/null +++ b/test/integration/connect/envoy/case-ingress-gateway-grpc/verify.bats @@ -0,0 +1,32 @@ +#!/usr/bin/env bats + +load helpers + +@test "ingress proxy admin is up on :20000" { + retry_default curl -f -s localhost:20000/stats -o /dev/null +} + +@test "s1 proxy admin is up on :19000" { + retry_default curl -f -s localhost:19000/stats -o /dev/null +} + +@test "s2 proxy admin is up on :19001" { + retry_default curl -f -s localhost:19001/stats -o /dev/null +} + +@test "s1 proxy listener should be up and have right cert" { + assert_proxy_presents_cert_uri localhost:21000 s1 +} + +@test "ingress-gateway should have healthy endpoints for s1" { + assert_upstream_has_endpoints_in_status 127.0.0.1:20000 s1 HEALTHY 1 +} + +@test "ingress should be able to connect to s2 via grpc" { + # This test also covers http2 since gRPC always uses http2 + run fortio grpcping localhost:9999 + + echo "OUTPUT: $output" + + [ "$status" == 0 ] +} diff --git a/test/integration/connect/envoy/main_test.go b/test/integration/connect/envoy/main_test.go index bb483db54163..d7cdf2fb242e 100644 --- a/test/integration/connect/envoy/main_test.go +++ b/test/integration/connect/envoy/main_test.go @@ -33,6 +33,7 @@ func TestEnvoy(t *testing.T) { "case-http", "case-http-badauthz", "case-ingress-gateway-http", + "case-ingress-gateway-grpc", "case-ingress-gateway-multiple-services", "case-ingress-gateway-simple", "case-ingress-gateway-tls", From 448a7161f1d88be9e9803a82b0e1649f81519647 Mon Sep 17 00:00:00 2001 From: Jack Loughran <30052269+jackloughran@users.noreply.github.com> Date: Mon, 24 Aug 2020 14:49:21 -0400 Subject: [PATCH 05/11] setup grpc ingress --- .../config_entries.hcl | 7 ++++++- .../envoy/case-ingress-gateway-grpc/s1.hcl | 19 +++++++++++++++++++ .../envoy/case-ingress-gateway-grpc/s2.hcl | 3 +-- 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 test/integration/connect/envoy/case-ingress-gateway-grpc/s1.hcl diff --git a/test/integration/connect/envoy/case-ingress-gateway-grpc/config_entries.hcl b/test/integration/connect/envoy/case-ingress-gateway-grpc/config_entries.hcl index 94f0973a67a6..39601fbbe81b 100644 --- a/test/integration/connect/envoy/case-ingress-gateway-grpc/config_entries.hcl +++ b/test/integration/connect/envoy/case-ingress-gateway-grpc/config_entries.hcl @@ -1,6 +1,11 @@ enable_central_service_config = true config_entries { + bootstrap { + kind = "service-defaults" + name = "s1" + protocol = "grpc" + } bootstrap { kind = "ingress-gateway" name = "ingress-gateway" @@ -8,7 +13,7 @@ config_entries { listeners = [ { port = 9999 - protocol = "tcp" + protocol = "grpc" services = [ { name = "s1" diff --git a/test/integration/connect/envoy/case-ingress-gateway-grpc/s1.hcl b/test/integration/connect/envoy/case-ingress-gateway-grpc/s1.hcl new file mode 100644 index 000000000000..73042844d913 --- /dev/null +++ b/test/integration/connect/envoy/case-ingress-gateway-grpc/s1.hcl @@ -0,0 +1,19 @@ +services { + name = "s1" + port = 8079 + connect { + sidecar_service { + proxy { + upstreams = [ + { + destination_name = "s2" + local_bind_port = 5000 + } + ] + config { + protocol = "grpc" + } + } + } + } +} diff --git a/test/integration/connect/envoy/case-ingress-gateway-grpc/s2.hcl b/test/integration/connect/envoy/case-ingress-gateway-grpc/s2.hcl index fe6252677d54..d149f26808a0 100644 --- a/test/integration/connect/envoy/case-ingress-gateway-grpc/s2.hcl +++ b/test/integration/connect/envoy/case-ingress-gateway-grpc/s2.hcl @@ -1,7 +1,6 @@ services { name = "s2" - # Advertise gRPC port - port = 8079 + port = 8179 connect { sidecar_service { proxy { From 9f269928d522c68a2abb60c585a43a9a58672c5d Mon Sep 17 00:00:00 2001 From: Jack Loughran <30052269+jackloughran@users.noreply.github.com> Date: Mon, 24 Aug 2020 15:49:41 -0400 Subject: [PATCH 06/11] specify localhost as a valid ingress host --- .../connect/envoy/case-ingress-gateway-grpc/config_entries.hcl | 1 + .../connect/envoy/case-ingress-gateway-grpc/verify.bats | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/test/integration/connect/envoy/case-ingress-gateway-grpc/config_entries.hcl b/test/integration/connect/envoy/case-ingress-gateway-grpc/config_entries.hcl index 39601fbbe81b..fc4cfc697df6 100644 --- a/test/integration/connect/envoy/case-ingress-gateway-grpc/config_entries.hcl +++ b/test/integration/connect/envoy/case-ingress-gateway-grpc/config_entries.hcl @@ -17,6 +17,7 @@ config_entries { services = [ { name = "s1" + hosts = ["localhost:9999"] } ] } diff --git a/test/integration/connect/envoy/case-ingress-gateway-grpc/verify.bats b/test/integration/connect/envoy/case-ingress-gateway-grpc/verify.bats index 159e0fcff8a1..56223fa2aa0a 100644 --- a/test/integration/connect/envoy/case-ingress-gateway-grpc/verify.bats +++ b/test/integration/connect/envoy/case-ingress-gateway-grpc/verify.bats @@ -22,7 +22,7 @@ load helpers assert_upstream_has_endpoints_in_status 127.0.0.1:20000 s1 HEALTHY 1 } -@test "ingress should be able to connect to s2 via grpc" { +@test "ingress should be able to connect to s1 via grpc" { # This test also covers http2 since gRPC always uses http2 run fortio grpcping localhost:9999 From 133caca830040e73edf351c2a8d403ed1ba2d7e0 Mon Sep 17 00:00:00 2001 From: Jack Loughran <30052269+jackloughran@users.noreply.github.com> Date: Mon, 24 Aug 2020 15:52:45 -0400 Subject: [PATCH 07/11] simplify conf --- .../connect/envoy/case-ingress-gateway-grpc/s1.hcl | 6 ------ .../connect/envoy/case-ingress-gateway-grpc/s2.hcl | 13 ------------- 2 files changed, 19 deletions(-) delete mode 100644 test/integration/connect/envoy/case-ingress-gateway-grpc/s2.hcl diff --git a/test/integration/connect/envoy/case-ingress-gateway-grpc/s1.hcl b/test/integration/connect/envoy/case-ingress-gateway-grpc/s1.hcl index 73042844d913..3a3a9f815b81 100644 --- a/test/integration/connect/envoy/case-ingress-gateway-grpc/s1.hcl +++ b/test/integration/connect/envoy/case-ingress-gateway-grpc/s1.hcl @@ -4,12 +4,6 @@ services { connect { sidecar_service { proxy { - upstreams = [ - { - destination_name = "s2" - local_bind_port = 5000 - } - ] config { protocol = "grpc" } diff --git a/test/integration/connect/envoy/case-ingress-gateway-grpc/s2.hcl b/test/integration/connect/envoy/case-ingress-gateway-grpc/s2.hcl deleted file mode 100644 index d149f26808a0..000000000000 --- a/test/integration/connect/envoy/case-ingress-gateway-grpc/s2.hcl +++ /dev/null @@ -1,13 +0,0 @@ -services { - name = "s2" - port = 8179 - connect { - sidecar_service { - proxy { - config { - protocol = "grpc" - } - } - } - } -} From 1ffc76e4542288acffd0c291b6c9f63bbc1255c0 Mon Sep 17 00:00:00 2001 From: Jack Loughran <30052269+jackloughran@users.noreply.github.com> Date: Mon, 24 Aug 2020 16:02:12 -0400 Subject: [PATCH 08/11] add http2 --- agent/structs/config_entry_gateways.go | 11 ++++++----- agent/structs/config_entry_gateways_test.go | 2 +- api/config_entry_gateways.go | 2 +- .../envoy/case-ingress-gateway-grpc/capture.sh | 2 +- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/agent/structs/config_entry_gateways.go b/agent/structs/config_entry_gateways.go index 7d1e540c1b7c..a5557dbafab1 100644 --- a/agent/structs/config_entry_gateways.go +++ b/agent/structs/config_entry_gateways.go @@ -38,7 +38,7 @@ type IngressListener struct { // Protocol declares what type of traffic this listener is expected to // receive. Depending on the protocol, a listener might support multiplexing // services over a single port, or additional discovery chain features. The - // current supported values are: (tcp | http | grpc). + // current supported values are: (tcp | http | http2 | grpc). Protocol string // Services declares the set of services to which the listener forwards @@ -122,9 +122,10 @@ func (e *IngressGatewayConfigEntry) Normalize() error { func (e *IngressGatewayConfigEntry) Validate() error { validProtocols := map[string]bool{ - "http": true, - "tcp": true, - "grpc": true, + "tcp": true, + "http": true, + "http2": true, + "grpc": true, } declaredPorts := make(map[int]bool) @@ -135,7 +136,7 @@ func (e *IngressGatewayConfigEntry) Validate() error { declaredPorts[listener.Port] = true if _, ok := validProtocols[listener.Protocol]; !ok { - return fmt.Errorf("Protocol must be 'http', 'tcp', or 'grpc'. '%s' is an unsupported protocol.", listener.Protocol) + return fmt.Errorf("protocol must be 'tcp', 'http', 'http2', or 'grpc'. '%s' is an unsupported protocol", listener.Protocol) } if len(listener.Services) == 0 { diff --git a/agent/structs/config_entry_gateways_test.go b/agent/structs/config_entry_gateways_test.go index 08efc052caa0..be5d04069836 100644 --- a/agent/structs/config_entry_gateways_test.go +++ b/agent/structs/config_entry_gateways_test.go @@ -326,7 +326,7 @@ func TestIngressConfigEntry_Validate(t *testing.T) { }, }, }, - expectErr: "Protocol must be 'http', 'tcp', or 'grpc'. 'asdf' is an unsupported protocol.", + expectErr: "protocol must be 'tcp', 'http', 'http2', or 'grpc'. 'asdf' is an unsupported protocol.", }, { name: "hosts cannot be set on a tcp listener", diff --git a/api/config_entry_gateways.go b/api/config_entry_gateways.go index 4f5a11b8b995..9d3ee0a6a909 100644 --- a/api/config_entry_gateways.go +++ b/api/config_entry_gateways.go @@ -44,7 +44,7 @@ type IngressListener struct { // Protocol declares what type of traffic this listener is expected to // receive. Depending on the protocol, a listener might support multiplexing // services over a single port, or additional discovery chain features. The - // current supported values are: (tcp | http | grpc). + // current supported values are: (tcp | http | http2 | grpc). Protocol string // Services declares the set of services to which the listener forwards diff --git a/test/integration/connect/envoy/case-ingress-gateway-grpc/capture.sh b/test/integration/connect/envoy/case-ingress-gateway-grpc/capture.sh index 41ea5cb24fb6..564b963a164d 100644 --- a/test/integration/connect/envoy/case-ingress-gateway-grpc/capture.sh +++ b/test/integration/connect/envoy/case-ingress-gateway-grpc/capture.sh @@ -1,3 +1,3 @@ #!/bin/bash -snapshot_envoy_admin localhost:20000 ingress-gateway primary || true \ No newline at end of file +snapshot_envoy_admin localhost:20000 ingress-gateway primary || true From d15222174323b962efe005ca18bd7f2ec12311f6 Mon Sep 17 00:00:00 2001 From: Jack Loughran <30052269+jackloughran@users.noreply.github.com> Date: Mon, 24 Aug 2020 16:03:32 -0400 Subject: [PATCH 09/11] add http2 to docs --- website/pages/docs/agent/config-entries/ingress-gateway.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/pages/docs/agent/config-entries/ingress-gateway.mdx b/website/pages/docs/agent/config-entries/ingress-gateway.mdx index 00694250dbcc..01d1fbc39bcf 100644 --- a/website/pages/docs/agent/config-entries/ingress-gateway.mdx +++ b/website/pages/docs/agent/config-entries/ingress-gateway.mdx @@ -343,7 +343,7 @@ Also make two services in the frontend namespace available over a custom port wi - `Port` `(int: 0)` - The port that the listener should receive traffic on. - `Protocol` `(string: "tcp")` - The protocol associated with the listener. - One of `tcp`, `http`, or `grpc`. + One of `tcp`, `http`, `http2`, or `grpc`. - `Services` `(array: )` - A list of services to be exposed via this listener. For "tcp" listeners, only a single service is From dc9322c2acc8ca4cb4f568a7a5c65018681ad7bf Mon Sep 17 00:00:00 2001 From: Jack Loughran <30052269+jackloughran@users.noreply.github.com> Date: Mon, 24 Aug 2020 16:12:13 -0400 Subject: [PATCH 10/11] remove period to match error message --- agent/structs/config_entry_gateways_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agent/structs/config_entry_gateways_test.go b/agent/structs/config_entry_gateways_test.go index be5d04069836..3a71dba6d22c 100644 --- a/agent/structs/config_entry_gateways_test.go +++ b/agent/structs/config_entry_gateways_test.go @@ -326,7 +326,7 @@ func TestIngressConfigEntry_Validate(t *testing.T) { }, }, }, - expectErr: "protocol must be 'tcp', 'http', 'http2', or 'grpc'. 'asdf' is an unsupported protocol.", + expectErr: "protocol must be 'tcp', 'http', 'http2', or 'grpc'. 'asdf' is an unsupported protocol", }, { name: "hosts cannot be set on a tcp listener", From 295daec857e702cea8d2ef0ed0f674f06161be05 Mon Sep 17 00:00:00 2001 From: Jack Loughran <30052269+jackloughran@users.noreply.github.com> Date: Thu, 27 Aug 2020 16:59:18 -0400 Subject: [PATCH 11/11] add changelog entry --- .changelog/8458.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/8458.txt diff --git a/.changelog/8458.txt b/.changelog/8458.txt new file mode 100644 index 000000000000..e9fc0e4e9e0a --- /dev/null +++ b/.changelog/8458.txt @@ -0,0 +1,3 @@ +```release-note:improvement +connect: Add support for http2 and grpc to ingress gateways +```