Pep Guardiola’s side had 18 shots and 74 per cent of the possession but left Selhurst Park ruing a series of misses on a significant night in the title race.
Bernardo Silva and Aymeric Laporte were guilty of the most glaring miscues, with Palace keeper Vicente Guaita keeping the leaders at bay with several saves.
With second-placed Liverpool having won at Brighton on Saturday, City are now just four points clear of Jurgen Klopp’s team.
Liverpool can close to within one point of City if they win their game in hand at fourth-placed Arsenal on Wednesday.
Man City had won four of their last five league games, including a scintillating 4-1 demolition of Manchester United in their most recent top-flight outing.
But, given Liverpool’s red-hot form, the stalemate in south London could tip the balance of power towards Merseyside.
Liverpool have been so relentless that City need to be perfect to hold them off, and this draw, together with the recent defeat against Tottenham, have left them vulnerable to the Reds’ sustained assault.
After making a host of changes for the goalless Champions League tie against Sporting Lisbon last week, Guardiola recalled Kevin De Bruyne and Riyad Mahrez as he reverted to the line-up that dominated the Manchester derby.
Guardiola insisted Man City were treating the match like “a final” because of the threat posed by Palace, who beat them 2-0 at the Etihad Stadium in October.
Mahrez tried to set the tone when he cut inside to the edge of the Palace area for a curling effort that whistled past the far post.
Silva should have put Man City ahead after Guaita spilled De Bruyne’s blast but, rather than shoot, he elected to dribble round the Palace keeper and watched in horror as the ball rolled out for a goal-kick.
In a spell-binding period of Man City pressure, John Stones was inches away with a 25-yard rocket that deflected wide, while Mahrez tested Guaita with a low drive.
De Bruyne hooked an audacious effort over his shoulder, forcing Guaita to palm away before Laporte produced an awful miss.
Joao Cancelo’s fierce strike cannoned back off the post to the unmarked Laporte, who had the goal at his mercy but somehow contrived to shoot high over the bar from close-range.
Guardiola’s men were pouring forward in waves but Palace refused to let the floodgates open and Guaita saved again from Mahrez, who also shot narrowly wide at the end of a one-sided first half.
Cheikhou Kouyate nearly gave Palace the lead against the run of play when he headed wide from close-range soon after the interval.
Man City immediately responded and De Bruyne hit the post from an acute angle before Mahrez fired the rebound over.
Camped in Palace’s half, City were becoming visibly frustrated by Palace’s obdurate resistence.
Guardiola held his head in his hands after Silva stretched but failed to reach Jack Grealish’s cross as it flashed across goal.
Man City had no answer to Palace’s massed defence, although Guardiola’s refusal to make an substitutions was a curious move.
By the time Grealish’s shot was blocked, Man City appeared resigned to their fate and, in a fitting finale, Laporte could only head De Bruyne’s free-kick tamely at Guaita.