Pep Guardiola’s side had to remain patient at Selhurst Park, but were eventually able to take their opportunity to edge closer to the Gunners, who visit London rivals Fulham on Sunday (14:00 GMT).
Erling Haaland settled the match from the penalty spot for his 28th goal of the campaign, stroking his 78th-minute spot-kick into the bottom corner after Michael Olise’s late challenge on Ilkay Gundogan.
The visitors had been unable to capitalise on a purposeful start, which saw Rodri’s first-time effort force Vicente Guaita into action and Jack Grealish pull a low shot wide after he had darted into the penalty area.
Haaland, who scored his first Premier League hat-trick in the reverse fixture in August, went closest in the first half, but the league‘s top scorer remarkably failed to hit the target following Nathan Ake’s pass into the six-yard box.
A shot-shy Palace pushed for a late equaliser against a retreating City, but it was to no avail as the hosts went a Premier League record third successive league game without managing a shot on target.
The defeat extends Palace‘s concerning league winless run to 10 matches – the longest in the division – and leaves Patrick Vieira‘s side just four points above the relegation places.
For City, the victory is a positive note to begin another crucial week – with the second leg of their Champions League last 16 tie against RB Leipzig next before an FA Cup quarter-final against Burnley.
“Of course Arsenal is on an incredible run. Still we are there,” Guardiola told Sky Sports.
“Here in the typical winter game, a difficult one, we were there all the time and then we won it.
“Now we have to do absolutely everything and next Tuesday and Saturday. Hopefully the Etihad can live one of the best nights we have lived and we can do it again.”
Reaction to Saturday’s Premier League action
Go straight to all the best Crystal Palace content
Visit our Manchester City page
City struggle to three points to stay in touch
It is no secret that City have been far from their scintillating best this term – this third successive win equalled their longest winning streak in the league this season.
And yet, ominously for Arsenal, Guardiola’s champions remain within striking distance of a fifth title in six years.
That is despite enduring a frustrating evening in south London, where victory was ultimately delivered by a mistake from Olise, who needlessly felled Gundogan as Palace appeared to be edging towards a valuable point.
The visitors dominated possession, territory and chances, but Palace held firm under periods of intense pressure, with Grealish – playing with increasing swagger as he continues to develop in this City team – proving the key threat as playmaker Kevin de Bruyne watched on from the bench.
Phil Foden was unable to build on his recent return to form, although his final contribution before he was replaced by Julian Alvarez less than 15 minutes into the second half was to go close with a free-kick that Guaita sprung across to save.
Alvarez spurned the chance to make a near-instant impact as he blazed over, but Haaland held his nerve when presented with the chance to break the deadlock and clinch three crucial points.
Vieira, meanwhile, is right to be concerned about his side’s situation, with the Eagles among nine teams in the relegation picture in the final third of the season.
Scoring goals is the obvious issue for Palace. Their wait for a shot on target will now extend to a fourth game after setting a competition record since Opta began recording such data in 2003-04.
They were handed a rare first-half opening when Olise dispossessed Foden in midfield and set Wilfried Zaha away, while substitute Eberechi Eze saw an attempt blocked amid a late search for an equaliser.
Palace’s five points in 2023 is the lowest in the division, and just four points separate Vieira’s misfiring side from the relegation places before difficult trips to Brighton and then Arsenal.