Born in Eccleston, Lancashire, after making his debut in 1997 he soon became a fixture in the Preston North Endfirst team. His appearance tally was 427 at the end of the 2007–08 season. This puts him at number nine in the all-time record appearances for the club. He has worn the number 16 shirt since squad numbers were adopted by the Football League. The 2006–07 season ended in disappointment for the Chorley-born player, not only at missing out on the Play-offs but at missing the last two months of the season with a groin problem. However, he recovered from the injury in time to make a first-team return in October 2007, and was named club captain in one of Paul Simpson's last acts as manager. McKenna has missed just one game since being handed the captain's armband. McKenna scored the winning penalty in the penalty shoot-out of the 2000–01 Division One play-off semi-final second leg between Preston and Birmingham City at Deepdale, which saw the Lilywhites head to the Millennium Stadium for the final. McKenna was voted PFA Player of the Season at the end of the 2004–05 season after 35 appearances and 3 goals. He signed a new three-and-a-half-year contract with Preston in November 2005.
McKenna signed for Nottingham Forest on a three-year contract for a fee of £750,000 on 20 July 2009. He was immediately installed as club captain. On 19 December 2009, McKenna scored his first goal for Forest against former club Preston with a 25-yard shot into the bottom left hand corner. However, he refused to celebrate the goal, showing restraint as a mark of respect to the Preston fans. Forest went on to win the game 3–0.
On 1 July 2011, following speculation that he may rejoin his former employers Preston North End, McKenna joined Hull City on a two-year contract on a free transfer. He made his debut in the first game of the season on 5 August 2011 at the KC Stadium in the 0–1 defeat to Blackpool. McKenna enjoyed a strong season as a regular in central midfield in the club's push for promotion.
2012–13
McKenna was sent off on 27 August 2012 in a League Cup game against Doncaster for kicking out at Doncaster's Rob Jones. For the remainder of his time at Hull he was mainly named as a substitute by manager Steve Bruce. On 25 January 2013 McKenna was loaned to Fleetwood Town for the remainder of the 2012–13 season. On 16 May 2013, Hull City announced that McKenna, along with 11 others would be free to leave the KC stadium, as they prepared for their first season back in the Premier League.
In January 2016 McKenna took up a coaching role at Longridge Town alongside former Preston North End teammate Lee Ashcroft. McKenna played in one fixture but said his main priority is coaching.