From db00159347c4a7a0735b983f0b1a822816880c12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Thu, 27 Jun 2019 11:15:24 +0200 Subject: [PATCH] Added envoy + config grpc json transcoder --- docker-compose.override.yml | 11 +++- docker-compose.yml | 8 ++- eShopOnContainers-ServicesAndWebApps.sln | 21 ++++++- src/ApiGateways/Envoy/Dockerfile | 1 + src/ApiGateways/Envoy/config/catalog.proto | 42 +++++++++++++ .../Envoy/config/catalog.proto-descriptor.pb | Bin 0 -> 9348 bytes src/ApiGateways/Envoy/config/envoy.yaml | 56 ++++++++++++++++++ .../Web.Bff.Shopping/apigw/configuration.json | 4 +- .../Catalog/Catalog.API/Catalog.API.csproj | 1 - src/Services/Catalog/Catalog.API/Program.cs | 20 +++---- 10 files changed, 142 insertions(+), 22 deletions(-) create mode 100644 src/ApiGateways/Envoy/Dockerfile create mode 100644 src/ApiGateways/Envoy/config/catalog.proto create mode 100644 src/ApiGateways/Envoy/config/catalog.proto-descriptor.pb create mode 100644 src/ApiGateways/Envoy/config/envoy.yaml diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 77530e213..c36cd2b3a 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -77,7 +77,6 @@ services: catalog.api: environment: - ASPNETCORE_ENVIRONMENT=Development - - ASPNETCORE_URLS=http://0.0.0.0:80;https://0.0.0.0:443; - ConnectionString=${ESHOP_AZURE_CATALOG_DB:-Server=sql.data;Database=Microsoft.eShopOnContainers.Services.CatalogDb;User Id=sa;Password=Pass@word} - PicBaseUrl=${ESHOP_AZURE_STORAGE_CATALOG_URL:-http://localhost:5202/api/v1/c/catalog/items/[0]/pic/} #Local: You need to open your local dev-machine firewall at range 5100-5110. - EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq} @@ -92,7 +91,7 @@ services: - OrchestratorType=${ORCHESTRATOR_TYPE} ports: - "5101:80" - - "9101:443" + - "9101:81" ordering.api: environment: @@ -415,4 +414,10 @@ services: - WebhooksUrl=http://webhooks.api - SelfUrl=http://webhooks.client/ ports: - - "5114:80" \ No newline at end of file + - "5114:80" + + envoy: + volumes: + - ./src/ApiGateways/Envoy/config:/etc/envoy + ports: + - "51051:51051" \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 11839c8b8..3b2f4f77d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -237,4 +237,10 @@ services: context: . dockerfile: src/Web/WebhookClient/Dockerfile depends_on: - - webhooks.api \ No newline at end of file + - webhooks.api + + envoy: + image: envoy:v1 + build: + context: src/ApiGateways/Envoy + dockerfile: Dockerfile \ No newline at end of file diff --git a/eShopOnContainers-ServicesAndWebApps.sln b/eShopOnContainers-ServicesAndWebApps.sln index 882bca09f..4bf2fa51d 100644 --- a/eShopOnContainers-ServicesAndWebApps.sln +++ b/eShopOnContainers-ServicesAndWebApps.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27130.2027 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29020.237 MinimumVisualStudioVersion = 10.0.40219.1 Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{FEA0C318-FFED-4D39-8781-265718CA43DD}" EndProject @@ -148,7 +148,20 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebhookClient", "src\Web\We EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Devspace.Support", "Devspace.Support", "{68F5041D-51F2-4630-94B6-B49789F5E51A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Devspaces.Support", "src\BuildingBlocks\Devspaces.Support\Devspaces.Support.csproj", "{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Devspaces.Support", "src\BuildingBlocks\Devspaces.Support\Devspaces.Support.csproj", "{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Envoy", "Envoy", "{882A8F3A-C61F-4C44-86DD-A5A258714BF2}" + ProjectSection(SolutionItems) = preProject + src\ApiGateways\Envoy\Dockerfile = src\ApiGateways\Envoy\Dockerfile + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "config", "config", "{3ABEEE8C-35E0-4185-9825-C44326151F5B}" + ProjectSection(SolutionItems) = preProject + src\ApiGateways\Envoy\config\catalog.proto = src\ApiGateways\Envoy\config\catalog.proto + src\ApiGateways\Envoy\config\catalog.proto-descriptor.pb = src\ApiGateways\Envoy\config\catalog.proto-descriptor.pb + src\ApiGateways\Envoy\Dockerfile = src\ApiGateways\Envoy\Dockerfile + src\ApiGateways\Envoy\config\envoy.yaml = src\ApiGateways\Envoy\config\envoy.yaml + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -1862,6 +1875,8 @@ Global {766D7E92-6AF0-476C-ADD5-282BF4D8C576} = {E279BF0F-7F66-4F3A-A3AB-2CDA66C1CD04} {68F5041D-51F2-4630-94B6-B49789F5E51A} = {DB0EFB20-B024-4E5E-A75C-52143C131D25} {56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35} = {68F5041D-51F2-4630-94B6-B49789F5E51A} + {882A8F3A-C61F-4C44-86DD-A5A258714BF2} = {77849D35-37D4-4802-81DC-9477B2775A40} + {3ABEEE8C-35E0-4185-9825-C44326151F5B} = {882A8F3A-C61F-4C44-86DD-A5A258714BF2} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {25728519-5F0F-4973-8A64-0A81EB4EA8D9} diff --git a/src/ApiGateways/Envoy/Dockerfile b/src/ApiGateways/Envoy/Dockerfile new file mode 100644 index 000000000..0f714330f --- /dev/null +++ b/src/ApiGateways/Envoy/Dockerfile @@ -0,0 +1 @@ +FROM envoyproxy/envoy \ No newline at end of file diff --git a/src/ApiGateways/Envoy/config/catalog.proto b/src/ApiGateways/Envoy/config/catalog.proto new file mode 100644 index 000000000..5fda69526 --- /dev/null +++ b/src/ApiGateways/Envoy/config/catalog.proto @@ -0,0 +1,42 @@ +syntax = "proto3"; + +package CatalogApi; + +import "google/api/annotations.proto"; + +message CatalogItemRequest { + int32 id = 1; +} + +message CatalogItemResponse { + int32 id = 1; + string name = 2; + string description=3; + double price=4; + string picture_file_name=5; + string picture_uri=6; + CatalogType catalog_type=8; + CatalogBrand catalog_brand=10; + int32 available_stock=11; + int32 restock_threshold=12; + int32 max_stock_threshold=13; + bool on_reorder=14; +} + +message CatalogBrand { + int32 id = 1; + string name = 2; +} + +message CatalogType { + int32 id = 1; + string type = 2; +} + +service Catalog { + rpc GetItemById (CatalogItemRequest) returns (CatalogItemResponse) { + option (google.api.http) = { + get: "/api/v1/catalog/items/{id}" + }; + } +} \ No newline at end of file diff --git a/src/ApiGateways/Envoy/config/catalog.proto-descriptor.pb b/src/ApiGateways/Envoy/config/catalog.proto-descriptor.pb new file mode 100644 index 0000000000000000000000000000000000000000..7c94ce9f05ec461731aea1a9659446fde3810e23 GIT binary patch literal 9348 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 G`SBmHwv - diff --git a/src/Services/Catalog/Catalog.API/Program.cs b/src/Services/Catalog/Catalog.API/Program.cs index 3cd36a451..73d644526 100644 --- a/src/Services/Catalog/Catalog.API/Program.cs +++ b/src/Services/Catalog/Catalog.API/Program.cs @@ -75,19 +75,15 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API .UseConfiguration(configuration) .ConfigureKestrel(options => { - var ports = GetDefinedPorts(configuration); - foreach (var port in ports.Distinct()) + options.Listen(IPAddress.Any, 80, listenOptions => { - options.ListenAnyIP(port.portNumber, listenOptions => - { - Console.WriteLine($"Binding to port {port.portNumber} (https is {port.https})"); - if (port.https) - { - listenOptions.UseHttps("eshop.pfx"); - listenOptions.Protocols = HttpProtocols.Http1AndHttp2; - } - }); - } + listenOptions.Protocols = HttpProtocols.Http1; + }); + options.Listen(IPAddress.Any, 81, listenOptions => + { + listenOptions.Protocols = HttpProtocols.Http2; + }); + }) .UseStartup() .UseApplicationInsights()