Added envoy + config grpc json transcoder
This commit is contained in:
parent
7c0e2a1c86
commit
db00159347
@ -77,7 +77,6 @@ services:
|
|||||||
catalog.api:
|
catalog.api:
|
||||||
environment:
|
environment:
|
||||||
- ASPNETCORE_ENVIRONMENT=Development
|
- 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}
|
- 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.
|
- 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}
|
- EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq}
|
||||||
@ -92,7 +91,7 @@ services:
|
|||||||
- OrchestratorType=${ORCHESTRATOR_TYPE}
|
- OrchestratorType=${ORCHESTRATOR_TYPE}
|
||||||
ports:
|
ports:
|
||||||
- "5101:80"
|
- "5101:80"
|
||||||
- "9101:443"
|
- "9101:81"
|
||||||
|
|
||||||
ordering.api:
|
ordering.api:
|
||||||
environment:
|
environment:
|
||||||
@ -415,4 +414,10 @@ services:
|
|||||||
- WebhooksUrl=http://webhooks.api
|
- WebhooksUrl=http://webhooks.api
|
||||||
- SelfUrl=http://webhooks.client/
|
- SelfUrl=http://webhooks.client/
|
||||||
ports:
|
ports:
|
||||||
- "5114:80"
|
- "5114:80"
|
||||||
|
|
||||||
|
envoy:
|
||||||
|
volumes:
|
||||||
|
- ./src/ApiGateways/Envoy/config:/etc/envoy
|
||||||
|
ports:
|
||||||
|
- "51051:51051"
|
@ -237,4 +237,10 @@ services:
|
|||||||
context: .
|
context: .
|
||||||
dockerfile: src/Web/WebhookClient/Dockerfile
|
dockerfile: src/Web/WebhookClient/Dockerfile
|
||||||
depends_on:
|
depends_on:
|
||||||
- webhooks.api
|
- webhooks.api
|
||||||
|
|
||||||
|
envoy:
|
||||||
|
image: envoy:v1
|
||||||
|
build:
|
||||||
|
context: src/ApiGateways/Envoy
|
||||||
|
dockerfile: Dockerfile
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio 15
|
# Visual Studio Version 16
|
||||||
VisualStudioVersion = 15.0.27130.2027
|
VisualStudioVersion = 16.0.29020.237
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{FEA0C318-FFED-4D39-8781-265718CA43DD}"
|
Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{FEA0C318-FFED-4D39-8781-265718CA43DD}"
|
||||||
EndProject
|
EndProject
|
||||||
@ -148,7 +148,20 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebhookClient", "src\Web\We
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Devspace.Support", "Devspace.Support", "{68F5041D-51F2-4630-94B6-B49789F5E51A}"
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Devspace.Support", "Devspace.Support", "{68F5041D-51F2-4630-94B6-B49789F5E51A}"
|
||||||
EndProject
|
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
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
@ -1862,6 +1875,8 @@ Global
|
|||||||
{766D7E92-6AF0-476C-ADD5-282BF4D8C576} = {E279BF0F-7F66-4F3A-A3AB-2CDA66C1CD04}
|
{766D7E92-6AF0-476C-ADD5-282BF4D8C576} = {E279BF0F-7F66-4F3A-A3AB-2CDA66C1CD04}
|
||||||
{68F5041D-51F2-4630-94B6-B49789F5E51A} = {DB0EFB20-B024-4E5E-A75C-52143C131D25}
|
{68F5041D-51F2-4630-94B6-B49789F5E51A} = {DB0EFB20-B024-4E5E-A75C-52143C131D25}
|
||||||
{56C2EF0B-6BF2-41D9-BE07-6E6D08D06B35} = {68F5041D-51F2-4630-94B6-B49789F5E51A}
|
{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
|
EndGlobalSection
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
SolutionGuid = {25728519-5F0F-4973-8A64-0A81EB4EA8D9}
|
SolutionGuid = {25728519-5F0F-4973-8A64-0A81EB4EA8D9}
|
||||||
|
1
src/ApiGateways/Envoy/Dockerfile
Normal file
1
src/ApiGateways/Envoy/Dockerfile
Normal file
@ -0,0 +1 @@
|
|||||||
|
FROM envoyproxy/envoy
|
42
src/ApiGateways/Envoy/config/catalog.proto
Normal file
42
src/ApiGateways/Envoy/config/catalog.proto
Normal file
@ -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}"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
BIN
src/ApiGateways/Envoy/config/catalog.proto-descriptor.pb
Normal file
BIN
src/ApiGateways/Envoy/config/catalog.proto-descriptor.pb
Normal file
Binary file not shown.
56
src/ApiGateways/Envoy/config/envoy.yaml
Normal file
56
src/ApiGateways/Envoy/config/envoy.yaml
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
admin:
|
||||||
|
access_log_path: /tmp/admin_access.log
|
||||||
|
address:
|
||||||
|
socket_address: { address: 0.0.0.0, port_value: 9901 }
|
||||||
|
|
||||||
|
static_resources:
|
||||||
|
listeners:
|
||||||
|
- name: listener1
|
||||||
|
address:
|
||||||
|
socket_address: { address: 0.0.0.0, port_value: 51051 }
|
||||||
|
filter_chains:
|
||||||
|
- filters:
|
||||||
|
- name: envoy.http_connection_manager
|
||||||
|
typed_config:
|
||||||
|
"@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
|
||||||
|
stat_prefix: grpc_json
|
||||||
|
codec_type: AUTO
|
||||||
|
route_config:
|
||||||
|
name: local_route
|
||||||
|
virtual_hosts:
|
||||||
|
- name: local_service
|
||||||
|
domains: ["*"]
|
||||||
|
routes:
|
||||||
|
- match: { prefix: "/" }
|
||||||
|
route: { cluster: grpc, timeout: { seconds: 60 } }
|
||||||
|
http_filters:
|
||||||
|
- name: envoy.grpc_json_transcoder
|
||||||
|
config:
|
||||||
|
proto_descriptor: "/etc/envoy/catalog.proto-descriptor.pb"
|
||||||
|
services: ["CatalogApi.Catalog"]
|
||||||
|
print_options:
|
||||||
|
add_whitespace: true
|
||||||
|
always_print_primitive_fields: true
|
||||||
|
always_print_enums_as_ints: false
|
||||||
|
preserve_proto_field_names: false
|
||||||
|
- name: envoy.router
|
||||||
|
|
||||||
|
clusters:
|
||||||
|
- name: grpc
|
||||||
|
connect_timeout: 1.25s
|
||||||
|
type: logical_dns
|
||||||
|
lb_policy: round_robin
|
||||||
|
dns_lookup_family: V4_ONLY
|
||||||
|
http2_protocol_options: {}
|
||||||
|
load_assignment:
|
||||||
|
cluster_name: grpc
|
||||||
|
endpoints:
|
||||||
|
- lb_endpoints:
|
||||||
|
- endpoint:
|
||||||
|
address:
|
||||||
|
socket_address:
|
||||||
|
# WARNING: "docker.for.mac.localhost" has been deprecated from Docker v18.03.0.
|
||||||
|
# If you're running an older version of Docker, please use "docker.for.mac.localhost" instead.
|
||||||
|
# Reference: https://docs.docker.com/docker-for-mac/release-notes/#docker-community-edition-18030-ce-mac59-2018-03-26
|
||||||
|
address: catalog.api
|
||||||
|
port_value: 81
|
@ -5,8 +5,8 @@
|
|||||||
"DownstreamScheme": "http",
|
"DownstreamScheme": "http",
|
||||||
"DownstreamHostAndPorts": [
|
"DownstreamHostAndPorts": [
|
||||||
{
|
{
|
||||||
"Host": "catalog.api",
|
"Host": "envoy",
|
||||||
"Port": 80
|
"Port": 51051
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"UpstreamPathTemplate": "/api/{version}/c/{everything}",
|
"UpstreamPathTemplate": "/api/{version}/c/{everything}",
|
||||||
|
@ -38,7 +38,6 @@
|
|||||||
<None Remove="@(Protobuf)" />
|
<None Remove="@(Protobuf)" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Grpc.AspNetCore.Server" Version="0.1.21-pre1" />
|
<PackageReference Include="Grpc.AspNetCore.Server" Version="0.1.21-pre1" />
|
||||||
<PackageReference Include="Google.Protobuf" Version="3.8.0" />
|
<PackageReference Include="Google.Protobuf" Version="3.8.0" />
|
||||||
|
@ -75,19 +75,15 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API
|
|||||||
.UseConfiguration(configuration)
|
.UseConfiguration(configuration)
|
||||||
.ConfigureKestrel(options =>
|
.ConfigureKestrel(options =>
|
||||||
{
|
{
|
||||||
var ports = GetDefinedPorts(configuration);
|
options.Listen(IPAddress.Any, 80, listenOptions =>
|
||||||
foreach (var port in ports.Distinct())
|
|
||||||
{
|
{
|
||||||
options.ListenAnyIP(port.portNumber, listenOptions =>
|
listenOptions.Protocols = HttpProtocols.Http1;
|
||||||
{
|
});
|
||||||
Console.WriteLine($"Binding to port {port.portNumber} (https is {port.https})");
|
options.Listen(IPAddress.Any, 81, listenOptions =>
|
||||||
if (port.https)
|
{
|
||||||
{
|
listenOptions.Protocols = HttpProtocols.Http2;
|
||||||
listenOptions.UseHttps("eshop.pfx");
|
});
|
||||||
listenOptions.Protocols = HttpProtocols.Http1AndHttp2;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.UseStartup<Startup>()
|
.UseStartup<Startup>()
|
||||||
.UseApplicationInsights()
|
.UseApplicationInsights()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user