Generally such systems use [player_level] +/- Y, where Y is some value that is roughly "fair." E.g. 5.
So a level 15 player is a decent matchup against both a 10 and a 20, even if a level 10 isn't a fair matchup to a level 20. This gives a "floating bracket" around which to match players together.
How wide your bracket is would depend on your game, how important +1 level is, and other factors, which would probably require some testing. There's no easy way to know that the lower-level player has a decent chance against the higher level player as there are a lot of factors: max hit points and damage output are only one. Status infliction abilities, max mana, gear, etc. etc. can all influence the outcome.
Another option (which works best when most players are "top tier") is to use a Chess Rankings-like system. When two players go up against each other, determine their ranking difference. If the higher-ranked player wins, the point change on both is small (and the greater the difference, the smaller that change is). If the lower ranked player wins, the point change is large (and the greater the difference, the larger that change is). For evenly-ranked players the point change isn't very large, but it would be the same for both players (i.e. it doesn't matter who wins, the point shift is still X). The EFC Grading page goes into detail on how to calculate the point shift, but you're free to come up with another algorithm.
So even at the "end game" where everyone is level 100 (the cap in your game) players will have different skill levels and this rating system will match up evenly skilled players. You can also allow any two players to face off against each other, regardless of their rating (although you may wish to give them the option to say "this game is unranked" so they aren't wagering points1).
For lower level players I would suggest a floating bracket with a hidden ranking number underneath. The level is more important during this time, while also having the system track wins and losses in the ranking system, then when the player hits the point at which they're allowed to fight players at the level cap, their ranking can unhide and be a better determination value. By tracking their ranking up to this point you don't dump them into the Big Kids pool with a default ranking score: afterall, you could have data about their performance up until now, so you may as well track and use it.
1Off-topic: back in highschool one of the math teachers ran a chess club during lunch. Against one friend I almost always won games that were ranked against him and almost always lost when unranked. Irked him pretty bad, as he was ranked quite a bit higher than I was.