Duke agreed to the deal last week. It was completed Monday after he passed a physical.
Cincinnati overhauled its rotation and starting lineup in the offseason through a series of trades, hoping to become a contender. The bullpen already was solid with the additions of Jared Hughes and David Hernandez last season to set up closer Raisel Iglesias.
Duke turns 36 in April. He pitched in 14 games for the Reds in 2013. Last season, he went 5-5 with a 4.15 ERA in 72 games with Minnesota and Seattle. Duke also has played for the Pirates, Diamondbacks, Nationals, Brewers, White Sox and Cardinals.
The Reds designated right-hander Jose Lopez for assignment. He went 5-13 for Triple-A Louisville last season.