Is it necessary to have a ingest node for apm-server to work?
In its default configuration, yes. Per Configure the Elasticsearch output | APM User Guide [8.11] | Elastic, you can disable the ingest pipeline by configuring apm-server with output.elasticsearch.pipeline: _none. Although it is possible, I wouldn't recommend it -- this might break the UI. We are making increasingly more use of ingest node for processing events as they are indexed.
is it advisable to allow ingest role in the same remote client node?
I'm afraid I don't understand your question, but you can find information about Elasticsearch node roles at Node | Elasticsearch Guide [8.11] | Elastic
how to make apm-server work without ingest nodes if we are using external ingestion like logstash?
If you're using the Logstash output, you can instruct Logstash to pass the pipeline onto Elasticsearch, as described in Use ingest pipelines for parsing | Logstash Reference [7.13] | Elastic. You would need to load the ingest pipeline directly in Elasticsearch.