Manchester City set up a Champions League semi-final clash with holders Real Madrid as Erling Haaland's goal ended Bayern Munich's hopes of a comeback.
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.
Haaland made them pay as he lashed home a shot into the top corner to cap off a swift counter-attack, 15 seconds after Ederson had saved Kingsley Coman's shot at the other end.
That was the Norwegian's 48th goal for City this season. 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.
Juggernaut City targeting a Treble
City are now unbeaten in 15 games since they lost at Tottenham on 5 February and were minutes away from an 11th win in a row. Win their final 13 matches and they will be the first English team to win the Treble since Manchester United in 1999.
That picture will become clearer over the next week as they face Sheffield United in the FA Cup semi-final on Saturday and then leaders Arsenal in the Premier League on Wednesday.
When City get going like this late in the season, though, it can be hard to stop them.
This tie was all but won last week at Etihad Stadium - and Pep Guardiola finally seems to have learned from past accusations of overthinking tactics and formations in big European games - most famously in the 2021 final defeat by Tuchel's Chelsea.
City have found the perfect formula and named the same XI in a third consecutive Champions League game for the first time.
Keeper Ederson was there when needed and the outcome at the Allianz Arena could have been very different had he not denied Coman after 56 minutes.
Instead of 3-1 on aggregate it was 4-0.
John Stones immediately pumped a long ball to Haaland, who headed it down for Kevin de Bruyne. The Belgian fed Haaland to smash in goal number 48 of an incredible season.
Everton icon Dixie Dean's English record of 63 goals is still in his sights.
City also kept their heads and comfortably saw the game out after Kimmich scored when Akanji was penalised by the Video Assistant Referee (VAR) for handling substitute Sadio Mane's cross.
This is now their third Champions League semi-final in a row as they bid to finally win Europe's biggest club competition.
In their way, though, are European royalty in the shape of Real, who beat them 6-5 on aggregate after a second-leg comeback for the ages at the same last-four stage last season.
Bayern's Tuchel gamble looks questionable
Bayern's decision to dismiss last season's Bundesliga-winning boss Julian Nagelsmann and replace him with Tuchel, who was sacked by Chelsea earlier this season, raised some eyebrows.
Two wins in six games, including Champions League and German Cup exits, have left many wondering if it was the right call. It is the worst start for a Bayern boss since Soren Lerby in 1991.
Even before Tuchel's arrival, the club lacked the aura of previous years. Instead of Robert Lewandowski, their main man up front is ex-Stoke striker Eric Maxim Choupo-Moting.
Manuel Neuer, one of the world's top keepers of this generation, is out with a broken leg - and Mane, their big summer signing, has not impressed since joining from Liverpool. The forward was back in the squad for this one after allegedly punching Leroy Sane following Bayern's first-leg defeat.
Upamecano was shaky at the back, having a red card rescinded, picking up a yellow for handball on the penalty and then culpable as Haaland claimed the crucial first goal.
Former City winger Sane wasted several first-half chances, including an early one that he slipped wide with just Ederson to beat. Full-back Joao Cancelo, on loan from their English opponents, was also booked for a foul on his close friend and old house-mate Bernardo Silva.
Tuchel - who saw red late on for his furious touchline reactions to refereeing decisions - can now fully concentrate on the Bundesliga, with Bayern two points above his old club Borussia Dortmund with six games to go.
Fail to win that - Bayern have won the past 10 league titles - and Tuchel's position could be under threat.
Player of the match
Bernardo SilvaBernardo Silva
Line-ups
Bayern Munich
Formation 4-2-3-1
27Sommer
5Pavard2Upamecano4de Ligt22Cancelo
6Kimmich8Goretzka
11Coman42Musiala10Sané
13Choupo-Moting
27Sommer5PavardBooked at 60minsSubstituted forStanisicat 77'minutesBooked at 88mins2UpamecanoBooked at 35mins4de Ligt22CanceloBooked at 11minsSubstituted forDaviesat 63'minutes6KimmichBooked at 45mins8Goretzka11Coman42MusialaSubstituted forMüllerat 72'minutes10SanéSubstituted forManéat 64'minutes13Choupo-MotingSubstituted forTelat 71'minutesSubstitutes
7Gnabry17Mané19Davies20Sarr23Blind25Müller26Ulreich38Gravenberch39Tel40Mazraoui44Stanisic46IbrahimovicMan City
Formation 3-2-4-1
31Ederson
6Aké3Rúben Dias25Akanji
17De Bruyne5Stones
16Rodri8Gündogan10Grealish20Bernardo Silva
9Haaland
31EdersonBooked at 44mins6AkéBooked at 54minsSubstituted forLaporteat 66'minutesBooked at 86mins3Rúben Dias25Akanji17De BruyneSubstituted forWalkerat 88'minutes5Stones16Rodri8GündoganBooked at 45mins10Grealish20Bernardo Silva9HaalandSubstituted forÁlvarezat 84'minutesSubstitutes
2Walker4Phillips14Laporte18Ortega19Álvarez21Gómez26Mahrez32Perrone33Carson47Foden80Palmer82LewisReferee:Clément TurpinAttendance:75,000Live Text
Match ends, FC Bayern München 1, Manchester City 1.
Second Half ends, FC Bayern München 1, Manchester City 1.
Attempt missed. Kingsley Coman (FC Bayern München) right footed shot from the right side of the box is high and wide to the left.
Thomas Müller (FC Bayern München) wins a free kick in the defensive half.
Foul by Jack Grealish (Manchester City).
Attempt missed. Sadio Mané (FC Bayern München) right footed shot from the left side of the six yard box is close, but misses to the left. Assisted by Alphonso Davies with a cross.
Substitution, Manchester City. Kyle Walker replaces Kevin De Bruyne.
Josip Stanisic (FC Bayern München) is shown the yellow card.
Foul by Josip Stanisic (FC Bayern München).
Jack Grealish (Manchester City) wins a free kick on the left wing.
Aymeric Laporte (Manchester City) is shown the yellow card for a bad foul.
Kingsley Coman (FC Bayern München) wins a free kick on the right wing.
Foul by Aymeric Laporte (Manchester City).
Attempt missed. Mathys Tel (FC Bayern München) right footed shot from the centre of the box is close, but misses the top right corner. Assisted by Alphonso Davies with a cross.
Substitution, Manchester City. Julián Álvarez replaces Erling Haaland.
Goal! FC Bayern München 1, Manchester City 1. Joshua Kimmich (FC Bayern München) converts the penalty with a right footed shot to the high centre of the goal.
Delay over. They are ready to continue.
VAR Decision: Penalty FC Bayern München.
Penalty conceded by Manuel Akanji (Manchester City) with a hand ball in the penalty area.
Substitution, FC Bayern München. Josip Stanisic replaces Benjamin Pavard.