City were 5-3 up on aggregate going into stoppage-time at the Santiago Bernabeu.
In truth, Real were being outclassed by the English giants. They rarely threatened and hadn’t recorded a single shot on target in normal time.
But you can never write Real off.
Rodrygo Goes, who entered the fray in the 68th minute, gave Real hope after converting Karim Benzema‘s cut-back in the 90th minute.
Moments later, the Brazilian planted a brilliant header past Ederson to force extra-time.
It only took a few minutes of extra-time for Real to take the lead for the first time in the tie.
Los Blancos were given a penalty when Benzema was felled inside the box by Ruben Dias.
Benzema brushed himself down and showed nerves of steel as he dispatched his penalty into the bottom corner.
City still had time to get back in the game but they looked deflated.
Other than a brilliant Thibaut Courtois save to deny Phil Foden, followed by Fernandinho failing to convert the rebound, City didn’t carve out any opportunities of note for the remainder of the game.
And so Real held on to win a quite astonishing game and reach the Champions League final.
CITY BOTTLE IT! MADRID MAKE THE CHAMPIONS LEAGUE FINAL | Real Madrid 3-1 Manchester City | The Football Terrace
They will play Liverpool in Paris on May 28. We cannot wait.
The game will be a repeat of the 2018 Champions League final, which Real won 3-1.
Real will be looking to win their 14th Champions League title, while Liverpool will be hoping to win their seventh.
David Beckham quiz: how much do you know about the football legend?