The Berliners had twice come back from a goal down but Christian Pulisic, who scored the first goal and set up the second, earned a last-gasp penalty for Reus to convert and protect Dortmund's unbeaten run in all competitions.
The Bundesliga leaders were made to work hard against the gutsy Berliners, third in the second division, and had the 20-year-old American Pulisic to thank for the lead.

Christian Pulisic of Borussia Dortmund celebrates with teammates after scoring his team's first goal during the DFB Cup match between Borussia Dortmund and 1. FC Union Berlin at Signal Iduna Park on October 31, 2018 in Dortmund, Germany.

Image credit: Getty Images

Bundesliga
Zakaria strike for Gladbach hands ten-man Dortmund shock defeat
YESTERDAY AT 15:32
Dortmund, whose defender Abdou Diallo left the pitch injured after 13 minutes, never really found their footing until late in the first half.
Pulisic stabbed in on the rebound after Shinji Kagawa's header was saved by Union keeper Rafal Gikiewicz in the 40th minute.
Union hit the crossbar two minutes later with a superb effort by Kenny Prince Redondo and got a deserved equaliser through substitute Sebastian Polter who scored with his first touch.

Maximilian Philipp of Borussia Dortmund celebrates after scoring his team's second goal during the DFB Cup match between Borussia Dortmund and 1. FC Union Berlin at Signal Iduna Park on October 31, 2018 in Dortmund, Germany.

Image credit: Getty Images

Their joy lasted only 10 minutes, however, when Pulisic sent Maximilian Philipp through with a superb pass and the forward drilled in an equally stunning finish.
But Union refused to give up and were rewarded with another goal in the 88th as Polter's header wrong-footed keeper Marwin Hitz.
They hung on and soaked up the pressure in extra time before Pulisic was brought down for the penalty.
Bundesliga
Haaland on target as Dortmund brush aside Union Berlin
19/09/2021 AT 14:44
Transfers
Man Utd eye ambitious swoop for Dortmund duo - Paper Round
15/09/2021 AT 23:09