From dbd7f02cc94d19f3a4c162e6c1dbe949f4427529 Mon Sep 17 00:00:00 2001 From: hejianpeng Date: Mon, 29 Aug 2022 15:30:56 +0800 Subject: [PATCH] fix Envoy Fails to Add Router Signed-off-by: hejianpeng --- .../testdata/in/xds-ir/empty-hostnames.yaml | 10 +++++++ .../out/xds-ir/empty-hostnames.clusters.yaml | 18 +++++++++++++ .../out/xds-ir/empty-hostnames.listeners.yaml | 26 +++++++++++++++++++ .../out/xds-ir/empty-hostnames.routes.yaml | 10 +++++++ internal/xds/translator/translator.go | 4 +++ internal/xds/translator/translator_test.go | 3 +++ 6 files changed, 71 insertions(+) create mode 100644 internal/xds/translator/testdata/in/xds-ir/empty-hostnames.yaml create mode 100644 internal/xds/translator/testdata/out/xds-ir/empty-hostnames.clusters.yaml create mode 100644 internal/xds/translator/testdata/out/xds-ir/empty-hostnames.listeners.yaml create mode 100644 internal/xds/translator/testdata/out/xds-ir/empty-hostnames.routes.yaml diff --git a/internal/xds/translator/testdata/in/xds-ir/empty-hostnames.yaml b/internal/xds/translator/testdata/in/xds-ir/empty-hostnames.yaml new file mode 100644 index 0000000000..f411e9900f --- /dev/null +++ b/internal/xds/translator/testdata/in/xds-ir/empty-hostnames.yaml @@ -0,0 +1,10 @@ +name: "http-route" +http: +- name: "first-listener" + address: "0.0.0.0" + port: 10080 + routes: + - name: "first-route" + destinations: + - host: "1.2.3.4" + port: 50000 diff --git a/internal/xds/translator/testdata/out/xds-ir/empty-hostnames.clusters.yaml b/internal/xds/translator/testdata/out/xds-ir/empty-hostnames.clusters.yaml new file mode 100644 index 0000000000..c65cb16a6a --- /dev/null +++ b/internal/xds/translator/testdata/out/xds-ir/empty-hostnames.clusters.yaml @@ -0,0 +1,18 @@ +- commonLbConfig: + localityWeightedLbConfig: {} + connectTimeout: 5s + dnsLookupFamily: V4_ONLY + loadAssignment: + clusterName: cluster_first-route + endpoints: + - lbEndpoints: + - endpoint: + address: + socketAddress: + address: 1.2.3.4 + portValue: 50000 + loadBalancingWeight: 1 + locality: {} + name: cluster_first-route + outlierDetection: {} + type: STATIC diff --git a/internal/xds/translator/testdata/out/xds-ir/empty-hostnames.listeners.yaml b/internal/xds/translator/testdata/out/xds-ir/empty-hostnames.listeners.yaml new file mode 100644 index 0000000000..82e5b27316 --- /dev/null +++ b/internal/xds/translator/testdata/out/xds-ir/empty-hostnames.listeners.yaml @@ -0,0 +1,26 @@ +- address: + socketAddress: + address: 0.0.0.0 + portValue: 10080 + filterChains: + - filters: + - name: envoy.filters.network.http_connection_manager + typedConfig: + '@type': type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager + httpFilters: + - name: envoy.filters.http.router + typedConfig: + '@type': type.googleapis.com/envoy.extensions.filters.http.router.v3.Router + rds: + configSource: + apiConfigSource: + apiType: GRPC + grpcServices: + - envoyGrpc: + clusterName: xds_cluster + setNodeOnFirstMessageOnly: true + transportApiVersion: V3 + resourceApiVersion: V3 + routeConfigName: route_first-listener + statPrefix: http + name: listener_first-listener_10080 diff --git a/internal/xds/translator/testdata/out/xds-ir/empty-hostnames.routes.yaml b/internal/xds/translator/testdata/out/xds-ir/empty-hostnames.routes.yaml new file mode 100644 index 0000000000..a550146b22 --- /dev/null +++ b/internal/xds/translator/testdata/out/xds-ir/empty-hostnames.routes.yaml @@ -0,0 +1,10 @@ +- name: route_first-listener + virtualHosts: + - domains: + - '*' + name: route_first-listener + routes: + - match: + prefix: / + route: + cluster: cluster_first-route diff --git a/internal/xds/translator/translator.go b/internal/xds/translator/translator.go index 45bb051a28..e642899d3a 100644 --- a/internal/xds/translator/translator.go +++ b/internal/xds/translator/translator.go @@ -52,6 +52,10 @@ func Translate(ir *ir.Xds) (*types.ResourceVersionTable, error) { Domains: httpListener.Hostnames, } + if len(vHost.Domains) == 0 { + vHost.Domains = []string{"*"} + } + for _, httpRoute := range httpListener.Routes { // 1:1 between IR HTTPRoute and xDS config.route.v3.Route xdsRoute, err := buildXdsRoute(httpRoute) diff --git a/internal/xds/translator/translator_test.go b/internal/xds/translator/translator_test.go index 59c99f8a79..8a55ae5b0b 100644 --- a/internal/xds/translator/translator_test.go +++ b/internal/xds/translator/translator_test.go @@ -30,6 +30,9 @@ func TestTranslate(t *testing.T) { { name: "http-route", }, + { + name: "empty-hostnames", + }, } for _, tc := range testCases {