Eagles goalkeeper Vicente Guaita also saved a first-half penalty from Kelechi Iheanacho as part of a spirited defensive display.
Leicester dominated possession and had their chances, but in the end they had to settle for a point.
Having conceded 10 goals in their last two games, Roy Hodgson made five changes for this clash with Leicester from Palace’s 3-0 defeat to Aston Villa on Boxing Day.
Defence was the main area to undergo surgery as Nathaniel Clyne, James Tomkins and Tyrick Mitchell all came into the back-four to replace Joel Ward, Patrick van Aanholt and Scott Dann.
Leicester made changes too, with James Maddison missing out altogether due to a knee injury and Jamie Vardy dropping to the bench as a result of a groin issue.
And how Leicester wished they had Vardy on the pitch as his replacement, Iheanacho, missed a penalty inside the opening 20 minutes.
Full-back Luke Thomas was brought down by Tomkins when he burst into the box, but Iheanacho’s resultant spot kick was well saved by Guaita.
The striker spurned another great chance on the half-hour mark, when he headed over from close range, and moments before Dennis Praet had been equally wasteful by lashing an effort over from five yards.
Palace, for their part, were having little joy, but Townsend’s scuffed shot wide from Jeff Schlupp’s cut-back showed how they carried a threat on the counter.
And sure enough, 13 minutes after half-time, they took the lead as Zaha fired Townsend’s cross past Kasper Schmeichel to score with the Eagles’ first and only shot on target.
Leicester and Brendan Rodgers tried to respond, throwing on Vardy, but it looked like they would leave London with nothing.
Barnes, however, had other ideas and after a slick piece of skill outside the box he lashed the ball past Guaita to earn the Foxes a point.