- Joshua Kimmich (83' Pen)
- Erling Haaland (57')
City, chasing their first Champions League title, will take on record 14-time winners and holders Real Madrid in the semifinals for a second successive season.
Trailing 3-0 from the first leg of the quarterfinal tie a week ago, Bayern were spurred on by a passionate home crowd in Munich but couldn't make their early chances count.
Haaland, who missed a first-half penalty, then effectively put the result beyond doubt when capitalising on a slip from Dayot Upamecano to find the net in the 57th minute with his 48th goal of an extraordinary season.
Bayern finally got on the scoresheet with seven minutes of the tie remaining when Joshua Kimmich converted a penalty after a handball was awarded against Manuel Akanji, but by that point the goal was no more than a consolation.
The German champions' misery was then complete in the dying minutes when coach Thomas Tuchel was shown a second yellow card and ejected from the sideline.
"I am so happy to be three in a row semifinals [with City]," Guardiola, who coached Bayern from 2013-16, said. "I could not expect [Bayern] differently, you saw how good they are."
"In this competition it is the details. In these two games in the right moments we were there.
"In the second half we adjusted some things and since minute one in the second half we felt were much, much more in control."
Despite a lack of goals, the first half was eventful, particularly for Bayern Munich defender Upamecano.
Having put in an unconvincing performance and been at fault for City's second goal a week ago, the centre-back began another night to forget when referee Clement Turpin showed him a red card after just 18 minutes for bringing down Haaland. To his and Bayern's great relief, the assistant referee's offside flag was immediately raised, nullifying the sending off.
However, another scare was not far away. This time Upamecano was punished when his arm moved out from behind his back and got a touch on a shot from Ilkay Gundogan to prompt the referee to award a penalty and show the Bayern man a yellow card.
But, following a long wait, Haaland offered Upamecano another reprieve when he blasted his penalty over the bar to end a run of 18 successful conversions from the spot, excluding shootouts, and a first miss in a City shirt.
Outside of Upamecano's adventures, Bayern were left frustrated by a serious of near-misses as they attempted to kickstart their comeback.
The Man City goalkeeper turned a Sane free-kick wide of the post four minutes later, while City's defenders stood firm to block shots from Kingsley Coman and Eric Maxim Choupo-Moting in first-half stoppage time.
"It is really annoying that we didn't take the lead with all the chances that we had," Kimmich said. I would have liked to see how this match had gone if we had made it 1-0 in the first half."
Another chance came and went for Bayern early in the second half as Ederson got down well to deny a low effort from Kingsley Coman. And within the blink of an eye, City raced up the other end to effectively end the tie as a contest,
Kevin De Bruyne breezed into the Bayern half and played the ball through to Haaland. Upamecano slipped to the turf in front of the Norwegian, who needed no second invitation to hammer a left-footed shot past Yann Sommer.
The goal was the 22-year-old's 12th in the Champions League this season and 35th in the competition overall, replacing Kylian Mbappe as the youngest player to reach that mark.
Despite Kimmich finding the net from the spot after a review for Akanji's handball, Haaland's strike was more than enough to keep City on track to become kings of Europe for the first time.
- Clément Turpin