The Bavarian giants got off to a flying start by scoring twice in the opening 12 minutes but Manuel Pellegrini's City side fought back courageously to inflict a first defeat on Pep Guardiola's men since the German Super Cup loss to Borussia Dortmund in late July.
Thomas Muller gave Bayern the lead in the fifth minute when he controlled a long ball from Dante before neatly slotting past Joe Hart before Mario Gotze added a second seven minutes later when he got on the end of Mario Mandzukic's well-placed pass from a corner to easily beat the City keeper.
City's quest to finish top of the Group D table had taken a massive blow early on but they could still edge the Germans if they managed to produce a 4-2 win.
Just before the hour-mark, City were back on level terms when Milner was brought down in the area by Dante with the night's skipper Aleksandar Kolarov expertly sending Manuel Neuer the wrong way from the spot.
That gave Pellegrini's men extra hope and they soon shocked the home crowd by hitting the lead in the 62nd minute when the impressive Milner arriving at the back post to meet Navas' low cross, hammering a beautifully-placed effort beyond Neuer, after Jerome Boateng completely miskicked his attempted clearance.
City went after a fourth goal and although they did come up short in the end, it was a fighting performance against a stellar side which will surely give them confidence ahead of the weekend's vital Premier League meeting with league leaders Arsenal.
Bayern retained to spot despite the defeat, finishing on 15 points, with City joining them on that total but ending up second by virtue of goal difference.
2013/14 UEFA Champions League scores - Group D
For breaking stories and all the great banter like us on Facebook: facebook.com/tribalfootball