The 28-year-old joins the Royal Blues for a reported fee of £14.5m, just a year after arriving at the Allianz Arena from Hoffenheim.
Rudy made 25 appearances for Bayern in the German top flight last season and a further five in the Champions League, but the signing of Leon Goretzka from Schalke pushed him down the pecking order.
Speaking to his new side's official website, Rudy said: "I'm convinced of the way the club wants to go and would like to be a part of it. And I'm really looking forward to the fans and the atmosphere at Schalke."
Rudy played 30 minutes for Germany in this summer's World Cup.