Bayern boss Thomas Tuchel felt his side needed a miracle to go through after losing the first leg 3-0 – and they squandered plenty of opportunities to get back into the game.
That was the Norwegian’s 48th goal for City this season, but he could have reached that figure earlier in the game but blazed over a penalty after a Dayot Upamecano handball.
Just like in the first leg last week, Upamecano – who was also beaten easily for the 57th-minute goal – had a nightmare.
The French centre-back was shown a red card early in the game for a professional foul on Haaland, but it was overturned because the City striker was offside.
Joshua Kimmich scored an 83rd-minute penalty for Bayern after a harsh handball decision against Manuel Akanji, but the German champions were never going to find three more goals in the last seven minutes.
Boss Tuchel was also sent to the stands for two yellow cards in what was a very fractious and fiery encounter at times.
There was no doubt City deserved to progress over the two legs and their Treble dream remains alive, with the Premier League and FA Cup other trophy targets this season.
Kimmich’s spot-kick, though, ended their 10-game winning run in all competitions.