Real progressed to their sixth Champions League final in 10 years and will bid for a record-extending 15th title against Borussia Dortmund at Wembley on June 1.
In a repeat of their spectacular semi-final comeback win over Manchester City two years ago, they saw their opponents take the lead after Bayern substitute Alphonso Davies scored from a counter attack in the 68th minute.
But Joselu climbed off the bench to equalise following a calamitous error from Manuel Neuer in the 88th minute and, two minutes later, he shinned a second into the Bayern goal from a cross by Antonio Ruediger.