in grpc-xds/greeter-go/pkg/server/server.go [113:148]
func configureServerOptions(logger logr.Logger, healthServer *health.Server) ([]grpc.ServerOption, error) {
logger.V(1).Info("Using xDS server-side credentials, with insecure as fallback")
serverCredentials, err := xdscredentials.NewServerCredentials(xdscredentials.ServerOptions{FallbackCreds: insecure.NewCredentials()})
if err != nil {
return nil, fmt.Errorf("could not create server-side transport credentials for xDS: %w", err)
}
return []grpc.ServerOption{
grpc.ChainStreamInterceptor(interceptors.StreamServerLogging(logger)),
grpc.ChainUnaryInterceptor(interceptors.UnaryServerLogging(logger)),
grpc.Creds(serverCredentials),
grpc.KeepaliveEnforcementPolicy(keepalive.EnforcementPolicy{
MinTime: grpcKeepaliveMinTime,
PermitWithoutStream: true,
}),
grpc.KeepaliveParams(keepalive.ServerParameters{
Time: grpcKeepaliveTime,
Timeout: grpcKeepaliveTimeout,
}),
grpc.MaxConcurrentStreams(grpcMaxConcurrentStreams),
xds.ServingModeCallback(func(addr net.Addr, args xds.ServingModeChangeArgs) {
switch args.Mode {
case connectivity.ServingModeStarting:
logger.Info("Attempting to connect to the xDS control plane management server")
case connectivity.ServingModeServing:
// Make k8s readiness probes pass.
// TODO: Enhance this Listener so readiness probes only pass after the server Listener and RouteConfiguration resources have been ACKed.
logger.Info("Connected to the xDS control plane management server")
healthServer.SetServingStatus(helloworldpb.Greeter_ServiceDesc.ServiceName, healthpb.HealthCheckResponse_SERVING)
case connectivity.ServingModeNotServing:
// Do _not_ make k8s readiness probes fail, because the greeter server can continue using the last ACKed configuration.
logger.Error(args.Err, "Lost connection to the xDS control plane management server, using cached configuration", "xdsControlPlaneServingMode", args.Mode.String())
healthServer.SetServingStatus(helloworldpb.Greeter_ServiceDesc.ServiceName, healthpb.HealthCheckResponse_NOT_SERVING)
}
}),
}, nil
}