Skip to content

gRPC Java - Is it possible to bind listener to an real IP (not 0.0.0.0) - building xDS enabled gRPC Server #12667

@axkum10

Description

@axkum10

I am building an xDS enabled gRPC Server. The gRPC Server is sending "0.0.0.0:#port" to xDS during LDS.

Trying to find, how to pass socket address Or is it possible to pass address/IP.

gRPC Java file - grpc-java/xds/src/main/java/io/grpc/xds/XdsServerBuilder.java


  /** Creates a gRPC server builder for the given port. */
  public static XdsServerBuilder forPort(int port, ServerCredentials serverCredentials) {
    checkNotNull(serverCredentials, "serverCredentials");
    InternalProtocolNegotiator.ServerFactory originalNegotiatorFactory =
            InternalNettyServerCredentials.toNegotiator(serverCredentials);
    ServerCredentials wrappedCredentials = InternalNettyServerCredentials.create(
            new FilterChainMatchingNegotiatorServerFactory(originalNegotiatorFactory));
    NettyServerBuilder nettyDelegate = NettyServerBuilder.forPort(port, wrappedCredentials);
    return new XdsServerBuilder(nettyDelegate, port);
  }

  @Override
  public Server build() {
    checkState(isServerBuilt.compareAndSet(false, true), "Server already built!");
    FilterChainSelectorManager filterChainSelectorManager = new FilterChainSelectorManager();
    Attributes.Builder builder = Attributes.newBuilder()
            .set(ATTR_FILTER_CHAIN_SELECTOR_MANAGER, filterChainSelectorManager);
    if (drainGraceTimeUnit != null) {
      builder.set(ATTR_DRAIN_GRACE_NANOS, drainGraceTimeUnit.toNanos(drainGraceTime));
    }
    InternalNettyServerBuilder.eagAttributes(delegate, builder.build());
    return new XdsServerWrapper("0.0.0.0:" + port, delegate, xdsServingStatusListener,
            filterChainSelectorManager, xdsClientPoolFactory, bootstrapOverride, filterRegistry);
  }

The IP in above code is hardcoded to "0.0.0.0".

My gRPC server code -

server = XdsServerBuilder.forPort("5001",  InsecureServerCredentials.create())
               .addService(new EchoServiceImp())
               .addService(healthSattusManager.getHealthService())
               .addService(ProtoReflectionService.newInstance())
               .build()
               .start();

I do not see "XdsServerBuilder.forAddress" function.

If passing address is not possible, then how to pass the gRPC server IP (not "0.0.0.0") to xDS via ways defined in A36

Passing a machine ip when binding listener will enable populate address in LDS to xDS:
"server_listener_resource_name_template": "example/resource/%s"

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions