Erling Haaland's penalty proved the difference on a night when City dominated but struggled to create clear openings.
The Norwegian coolly slotted home from the spot for his 28th Premier League goal of the season after Ilkay Gundogan had been fouled by Michael Olise with less than 15 minutes remaining.
Match gallery | Crystal Palace 0-1 City
We had created several opportunities before that but a combination of determined defending, excellent goalkeeping and wasteful finishing had kept the match goalless.
Pep Guardiola's side defended excellently ourselves with Ederson untested throughout the entire 90 minutes.
The victory extends our recent run of form to five victories in our last six matches and sees us move within two points of leaders Arsenal.
Watch the extended highlights at the top of the page...