diff --git a/examples/Container/Frontend/Balancer/ConfigurableResolverFactory.cs b/examples/Container/Frontend/Balancer/ConfigurableResolverFactory.cs index bb52e31a5..d6cb38b77 100644 --- a/examples/Container/Frontend/Balancer/ConfigurableResolverFactory.cs +++ b/examples/Container/Frontend/Balancer/ConfigurableResolverFactory.cs @@ -1,4 +1,4 @@ -#region Copyright notice and license +#region Copyright notice and license // Copyright 2019 The gRPC Authors // @@ -24,6 +24,8 @@ namespace Frontend.Balancer { public class ConfigurableResolverFactory : ResolverFactory { + private static readonly BalancerAttributesKey HostOverrideKey = new BalancerAttributesKey("HostOverride"); + private readonly ResolverFactory _innerResolverFactory; private readonly BalancerConfiguration _balancerConfiguration; @@ -101,6 +103,13 @@ private void RaiseResult(ResolverResult result) // DNS results change order between refreshes. // Explicitly order by host to keep result order consistent. var orderedAddresses = result.Addresses.OrderBy(a => a.EndPoint.Host).ToList(); + // Remove host override from addresses so the destination IP address is available. + // The sample does this because the server returns the IP address to the client. + // This makes it clear that gRPC calls are balanced between pods. + foreach (var address in orderedAddresses) + { + ((IDictionary)address.Attributes).Remove(HostOverrideKey.Key); + } _listener(ResolverResult.ForResult(orderedAddresses, serviceConfig, Status.DefaultSuccess)); } else