The result meant Real won 6-5 on aggregate to progress to the final, and dumped the Sky Blues out of the competition.
However, with the match heading into the 90 minute it was the visitors who led by a goal at the Bernabeu, while Real hadn’t even managed a shot on target yet.
But a quickfire double from Rodrygo changed that, with the substitute netting two late goals to force the game into extra-time, and Karim Benzema netted the only goal of that additional 30 minutes when he stroked the ball past Ederson from the spot.
The remarkable comeback denied City a second consecutive Champions League final, even though Guardiola felt his team looked comfortable in the latter stages of the 90 minutes.
“It’s simple, in the first half we didn’t have game, we were not good enough,” the Catalan told BT Sport after the game. “But we didn’t suffer much, and after the goal we were better.
We found our tempo and the players were better on the pitch. It wasn’t like the last 10 minutes they attack and attack, and we suffer. It didn’t happen.
“In those moments you could not say we were 10/15 minutes where we could not survive. They put a lot of players in the box with [Eder] Militao, Rodryo, Vinicius, with Benzema and [Marco] Asensio, and they scored two goals.
“We didn’t suffer much, but we didn’t play our best. That is normal in a semi-final, that the players feel the pressure. But in the end we were close. Football is unpredictable and you have to accept it.”
The result means Real will face Liverpool in the Paris final on Saturday 28 May.