From 6f39f3efa37b3f8bc2a2805d9bd1848d5f8bfaae Mon Sep 17 00:00:00 2001 From: Antonette Caldwell Date: Sat, 20 Aug 2022 22:54:06 -0500 Subject: [PATCH] Fix Envoy proxy failing in tcp-metrics Description: This fixes a previous open issue https://github.com/layer5io/wasm-filters/issues/39 Updated envoy.yaml - Envoy now calls for typed_config in `v3` - Rearranged placement of the filters, but it probably can be reworked to make it cleaner - Clusters is now set up with an endpoint, instead of `hosts` - Probably need to fix spacing Signed-off-by: Antonette Caldwell --- singleton-http-call/Cargo.toml | 2 +- singleton-http-call/envoy.yaml | 88 +++++++++++++++---------- tcp-metrics/Cargo.toml | 2 +- tcp-metrics/envoy.yaml | 117 ++++++++++++++++++--------------- tcp-packet-parse/Cargo.toml | 2 +- tcp-packet-parse/envoy.yaml | 117 ++++++++++++++++++--------------- 6 files changed, 184 insertions(+), 144 deletions(-) diff --git a/singleton-http-call/Cargo.toml b/singleton-http-call/Cargo.toml index 03e9d14..05c6cf7 100644 --- a/singleton-http-call/Cargo.toml +++ b/singleton-http-call/Cargo.toml @@ -10,5 +10,5 @@ edition = "2018" crate-type = ["cdylib"] [dependencies] -proxy-wasm = "0.1.0" +proxy-wasm = "0.2.0" wasm-bindgen = "0.2" diff --git a/singleton-http-call/envoy.yaml b/singleton-http-call/envoy.yaml index 5f69998..d2b19b0 100644 --- a/singleton-http-call/envoy.yaml +++ b/singleton-http-call/envoy.yaml @@ -1,16 +1,28 @@ +bootstrap_extensions: +- name: envoy.bootstrap.wasm + typed_config: + "@type": type.googleapis.com/envoy.extensions.wasm.v3.WasmService + singleton: true + config: + vm_config: + vm_id: "singleton-http-call" + runtime: "envoy.wasm.runtime.v8" + code: + local: + filename: "/etc/singleton_http_call.wasm" static_resources: listeners: - - name: main - address: + - address: socket_address: address: 0.0.0.0 port_value: 80 filter_chains: - filters: - - name: envoy.http_connection_manager - config: + - name: envoy.filters.network.http_connection_manager + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager + codec_type: AUTO stat_prefix: ingress_http - codec_type: auto route_config: name: local_route virtual_hosts: @@ -23,8 +35,9 @@ static_resources: route: cluster: web_service http_filters: - - name: envoy.router - config: {} + - name: envoy.filters.http.router + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router - name: staticreply address: socket_address: @@ -32,10 +45,11 @@ static_resources: port_value: 8099 filter_chains: - filters: - - name: envoy.http_connection_manager - config: + - name: envoy.filters.network.http_connection_manager + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager + codec_type: AUTO stat_prefix: ingress_http - codec_type: auto route_config: name: local_route virtual_hosts: @@ -50,36 +64,44 @@ static_resources: body: inline_string: "example body\n" http_filters: - - name: envoy.router - config: {} + - name: envoy.filters.http.wasm + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm + config: + vm_config: + vm_id: "singleton-http-call" + runtime: "envoy.wasm.runtime.v8" + code: + local: + filename: "/etc/singleton_http_call.wasm" + - name: envoy.filters.http.router + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router clusters: - name: web_service - connect_timeout: 0.25s type: STRICT_DNS lb_policy: round_robin - hosts: - - socket_address: - address: web_service - port_value: 5678 + load_assignment: + cluster_name: web_service + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: web_service + port_value: 5678 - name: wasm_upstream - connect_timeout: 0.25s type: STRICT_DNS lb_policy: round_robin - hosts: - - socket_address: - address: wasm_upstream - port_value: 8080 -wasm_service: -- config: - name: envoy.filters.http.wasm - root_id: "singleton-http-call" - vm_config: - runtime: "envoy.wasm.runtime.v8" - code: - local: - filename: "/etc/singleton_http_call.wasm" - allow_precompiled: true - singleton: true + load_assignment: + cluster_name: wasm_upstream + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: wasm_upstream + port_value: 8080 admin: access_log_path: "/dev/null" address: diff --git a/tcp-metrics/Cargo.toml b/tcp-metrics/Cargo.toml index 6c46b66..9b8e1bb 100644 --- a/tcp-metrics/Cargo.toml +++ b/tcp-metrics/Cargo.toml @@ -10,5 +10,5 @@ edition = "2018" crate-type = ["cdylib"] [dependencies] -proxy-wasm = "0.1.0" +proxy-wasm = "0.2.0" wasm-bindgen = "0.2" diff --git a/tcp-metrics/envoy.yaml b/tcp-metrics/envoy.yaml index 4aac1f5..630b4bd 100644 --- a/tcp-metrics/envoy.yaml +++ b/tcp-metrics/envoy.yaml @@ -1,63 +1,72 @@ static_resources: listeners: - - name: main - address: - socket_address: - address: 0.0.0.0 - port_value: 80 - filter_chains: - - filters: - - name: envoy.filters.network.wasm - config: - config: - name: "tcp_metrics" - root_id: "tcp_metrics" - vm_config: - runtime: "envoy.wasm.runtime.v8" - code: - local: - filename: "/etc/tcp_metrics.wasm" - allow_precompiled: true - - name: envoy.tcp_proxy - config: - stat_prefix: ingress_tcp - cluster: web_service - - name: staticreply - address: - socket_address: - address: 127.0.0.1 - port_value: 8099 - filter_chains: - - filters: - - name: envoy.http_connection_manager - config: - stat_prefix: ingress_http - codec_type: auto - route_config: - name: local_route - virtual_hosts: - - name: local_service - domains: - - "*" - routes: - - match: - prefix: "/" - direct_response: - status: 200 - body: - inline_string: "example body\n" - http_filters: - - name: envoy.router - config: {} + - name: main + address: + socket_address: + address: 0.0.0.0 + port_value: 80 + filter_chains: + - filters: + - name: envoy.filters.network.tcp_proxy + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy + stat_prefix: ingress_tcp + cluster: web_service + - name: staticreply + address: + socket_address: + address: 127.0.0.1 + port_value: 8099 + filter_chains: + - filters: + - name: envoy.http_connection_manager + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager + stat_prefix: ingress_http + codec_type: AUTO + route_config: + name: local_route + virtual_hosts: + - name: local_service + domains: + - "*" + routes: + - match: + prefix: "/" + direct_response: + status: 200 + body: + inline_string: "example body\n" + http_filters: + - name: envoy.filters.http.wasm + typed_config: + "@type": type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm + value: + config: + vm_config: + vm_id: "tcp_metrics" + runtime: "envoy.wasm.runtime.v8" + code: + local: + filename: "/etc/tcp_metrics.wasm" + - name: envoy.filters.http.router + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router clusters: - name: web_service - connect_timeout: 0.25s type: STRICT_DNS lb_policy: round_robin - hosts: - - socket_address: - address: web_service - port_value: 5678 + connect_timeout: 0.25s + load_assignment: + cluster_name: web_service + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: web_service + port_value: 5678 admin: access_log_path: "/dev/null" address: diff --git a/tcp-packet-parse/Cargo.toml b/tcp-packet-parse/Cargo.toml index edd5f2f..b3ec7dd 100644 --- a/tcp-packet-parse/Cargo.toml +++ b/tcp-packet-parse/Cargo.toml @@ -10,5 +10,5 @@ edition = "2018" crate-type = ["cdylib"] [dependencies] -proxy-wasm = "0.1.0" +proxy-wasm = "0.2.0" wasm-bindgen = "0.2" diff --git a/tcp-packet-parse/envoy.yaml b/tcp-packet-parse/envoy.yaml index 18c7c9c..dd4fb0f 100644 --- a/tcp-packet-parse/envoy.yaml +++ b/tcp-packet-parse/envoy.yaml @@ -1,63 +1,72 @@ static_resources: listeners: - - name: main - address: - socket_address: - address: 0.0.0.0 - port_value: 80 - filter_chains: - - filters: - - name: envoy.filters.network.wasm - config: - config: - name: "tcp_packet_parse" - root_id: "tcp_packet_parse" - vm_config: - runtime: "envoy.wasm.runtime.v8" - code: - local: - filename: "/etc/tcp_packet_parse.wasm" - allow_precompiled: true - - name: envoy.tcp_proxy - config: - stat_prefix: ingress_tcp - cluster: web_service - - name: staticreply - address: - socket_address: - address: 127.0.0.1 - port_value: 8099 - filter_chains: - - filters: - - name: envoy.http_connection_manager - config: - stat_prefix: ingress_http - codec_type: auto - route_config: - name: local_route - virtual_hosts: - - name: local_service - domains: - - "*" - routes: - - match: - prefix: "/" - direct_response: - status: 200 - body: - inline_string: "example body\n" - http_filters: - - name: envoy.router - config: {} + - name: main + address: + socket_address: + address: 0.0.0.0 + port_value: 80 + filter_chains: + - filters: + - name: envoy.filters.network.tcp_proxy + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.tcp_proxy.v3.TcpProxy + stat_prefix: ingress_tcp + cluster: web_service + - name: staticreply + address: + socket_address: + address: 127.0.0.1 + port_value: 8099 + filter_chains: + - filters: + - name: envoy.http_connection_manager + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager + stat_prefix: ingress_http + codec_type: AUTO + route_config: + name: local_route + virtual_hosts: + - name: local_service + domains: + - "*" + routes: + - match: + prefix: "/" + direct_response: + status: 200 + body: + inline_string: "example body\n" + http_filters: + - name: envoy.filters.http.wasm + typed_config: + "@type": type.googleapis.com/udpa.type.v1.TypedStruct + type_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasm + value: + config: + vm_config: + vm_id: "tcp_packet_parse" + runtime: "envoy.wasm.runtime.v8" + code: + local: + filename: "/etc/tcp_packet_parse.wasm" + - name: envoy.filters.http.router + typed_config: + "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router clusters: - name: web_service - connect_timeout: 0.25s type: STRICT_DNS lb_policy: round_robin - hosts: - - socket_address: - address: web_service - port_value: 5678 + connect_timeout: 0.25s + load_assignment: + cluster_name: web_service + endpoints: + - lb_endpoints: + - endpoint: + address: + socket_address: + address: web_service + port_value: 5678 admin: access_log_path: "/dev/null" address: