Pro 12 leaders the Ospreys beat Munster in the top-of-the-table clash at Thomond Park.
Munster took an early lead as Danny Barnes scored after charging down a Hanno Dirksen clearance.
However, the Ospreys fought back well to dominate in the scrum and were unfortunate to trail 10-6 at the break with Dan Biggar landing two penalties.
Biggar's two second-half penalties were split by Rhys Webb's crucial breakaway try as the Ospreys deservedly held on.
In their first competitive outing at Thomond Park since last season's grand final win, Munster got off the mark after only three minutes after Barnes had charged down Dirksen's casual clearance in the Ospreys 22.
But the Ospreys regrouped to dominate territory in the opening period and had the platform of a strong scrum in which Duncan Jones was able to exert pressure on youngster Stephen Archer.
A scrum penalty saw Biggar split the posts with his first attempt at goal, only for the Munster scrum to earn a penalty in response and Keatley restored the seven-point advantage.
The place-kickers were both denied by the uprights and for most of the second quarter, the Ospreys were unable to convert their pressure into points.
However in the final minute of the half, Archer gave away a scrum penalty and Biggar drilled his kick over from a right-sided position for a four-point difference at half-time.
Referee James Jones reached for his yellow card when Archer collapsed a scrum four minutes into the second half and Biggar was successful with the resulting penalty from 40 metres to further reduce the gap.
Ospreys captain Justin Tipuric was promptly yellow carded for hands in the ruck but Keatley's penalty attempt cannoned back off a post as Munster finally began to produce pressure.
But just as Munster piled forward five metres out from the whitewash, Barry Davies intercepted a loose pass and the full-back run to the opposition's 22 culminated in Webb sprinting over in the left corner.
A Keatley penalty cut the Ospreys lead to a single point but Munster's late burst into the Welsh side's 22 came to nothing and Biggar completed the scoring in injury-time with a penalty.
Munster: Johne Murphy; Doug Howlett, Danny Barnes, Lifeimi Mafi, Denis Hurley; Ian Keatley, Duncan Williams; Wian du Preez, Denis Fogarty, Stephen Archer; Billy Holland, Mick O'Driscoll; Dave O'Callaghan, Niall Ronan, Peter O'Mahony (capt).
Replacements: BJ Botha for Archer 54, Marcus Horan for du Preez 60, Ian Nagle for Holland 60, Peter Stringer for Williams 66, Simon Zebo for Murphy 70, S Deasy for Hurley 75.
Not used: Sean Henry, Tommy O'Donnell
Ospreys: Barry Davies; Hanno Dirksen, Tom Isaacs, Andrew Bishop, Richard Fussell; Dan Biggar, Rhys Webb; Duncan Jones, Richard Hibbard, Cai Griffiths, Ian Gough, Ian Evans, Joe Bearman, Justin Tipuric (capt), Jonathan Thomas.
Replacements: Aaron Jarvis for Griffiths, Tom Smith for Gough, Sonny Parker for Isaacs, James King for Evans 71.
Not used: Mefin Davies, Joe Rees, Matthew Morgan, Kristian Phillips.
Referee: James Jones (WRU)