diff options
author | uzhas <uzhas@yandex-team.ru> | 2022-02-28 13:05:09 +0300 |
---|---|---|
committer | uzhas <uzhas@yandex-team.ru> | 2022-02-28 13:05:09 +0300 |
commit | 400b07abc9772c95bdae8e426b80dda93c9eabb4 (patch) | |
tree | ca3d97a6f489aabebd87785d565a90d3e35327c5 | |
parent | f23d808d6c8b0f50c51b44baad1f919cab389cde (diff) | |
download | ydb-400b07abc9772c95bdae8e426b80dda93c9eabb4.tar.gz |
YQ-884: support ssl in simple YQ discovery
ref:6937cdd7fa1c69c2dc96cf7c18071b50b3cffd1a
-rw-r--r-- | ydb/core/grpc_services/grpc_request_proxy_simple.cpp | 47 |
1 files changed, 39 insertions, 8 deletions
diff --git a/ydb/core/grpc_services/grpc_request_proxy_simple.cpp b/ydb/core/grpc_services/grpc_request_proxy_simple.cpp index 1feb754a3e1..ec6893b7442 100644 --- a/ydb/core/grpc_services/grpc_request_proxy_simple.cpp +++ b/ydb/core/grpc_services/grpc_request_proxy_simple.cpp @@ -5,11 +5,40 @@ #include <ydb/core/base/appdata.h> +#include <util/system/hostname.h> + namespace NKikimr { namespace NGRpcService { using namespace NActors; +namespace { + +void FillEnpointInfo(const TString& host, ui32 port, const TString& publicHost, ui32 publicPort, bool ssl, Ydb::Discovery::EndpointInfo& info) { + auto effectivePublicHost = publicHost ? publicHost : host; + auto effectivePublicPort = publicPort ? publicPort : port; + info.set_address(effectivePublicHost); + info.set_port(effectivePublicPort); + info.set_ssl(ssl); +} + +TString InferPublicHostFromServerHost(const TString& serverHost) { + return serverHost && serverHost != "[::]" ? serverHost : FQDNHostName(); +} + +template <typename T> +void AddEndpointsForGrpcConfig(const T& grpcConfig, Ydb::Discovery::ListEndpointsResult& result) { + const TString& address = InferPublicHostFromServerHost(grpcConfig.GetHost()); + if (const ui32 port = grpcConfig.GetPort()) { + FillEnpointInfo(address, port, grpcConfig.GetPublicHost(), grpcConfig.GetPublicPort(), false, *result.add_endpoints()); + } + + if (const ui32 sslPort = grpcConfig.GetSslPort()) { + FillEnpointInfo(address, sslPort, grpcConfig.GetPublicHost(), grpcConfig.GetPublicSslPort(), true, *result.add_endpoints()); + } +} + +} class TGRpcRequestProxySimple : public TActorBootstrapped<TGRpcRequestProxySimple> @@ -42,14 +71,16 @@ private: requestBaseCtx->RaiseIssue(issue); requestBaseCtx->ReplyWithYdbStatus(Ydb::StatusIds::BAD_REQUEST); } else { - THolder<TEvListEndpointsRequest> Request(event->Release().Release()); - auto *result = TEvListEndpointsRequest::AllocateResult<Ydb::Discovery::ListEndpointsResult>(Request); - auto xres = result->add_endpoints(); - auto publicHost = AppConfig.GetGRpcConfig().GetPublicHost(); - xres->set_address(publicHost ? publicHost : AppConfig.GetGRpcConfig().GetHost()); //TODO: use cfg - auto publicPort = AppConfig.GetGRpcConfig().GetPublicPort(); - xres->set_port(publicPort ? publicPort : AppConfig.GetGRpcConfig().GetPort()); - Request->SendResult(*result, Ydb::StatusIds::SUCCESS); + THolder<TEvListEndpointsRequest> request(event->Release().Release()); + auto *result = TEvListEndpointsRequest::AllocateResult<Ydb::Discovery::ListEndpointsResult>(request); + const auto& grpcConfig = AppConfig.GetGRpcConfig(); + AddEndpointsForGrpcConfig(grpcConfig, *result); + + for (const auto& externalEndpoint : grpcConfig.GetExtEndpoints()) { + AddEndpointsForGrpcConfig(externalEndpoint, *result); + } + + request->SendResult(*result, Ydb::StatusIds::SUCCESS); } } |