© PA Photos
Massimo Ambrosini had the first meaningful effort on goal after 10 minutes, but his strike was well saved by the goalkeeper.
Two minutes later, Thiago Ribeiro broke free of the Milan defence, but his finish went just wide of the mark.
Victor Ibarbo had a shot on goal on 22 minutes, but he missed the target with the speculative effort.
Mario Balotelli made his first attacking contribution to the game on 32 minutes, driving forward towards goal but just hitting his shot wide.
Cagliari then took the lead just before half time when Daniele Conti's quick free kick found Ibarbo, who finished well with a clever back header.
Milan dominated the early stages of the second half, although the home side continued to look dangerous on the break.
Davide Astori dragged Balotelli down in the area on 81 minutes, earning himself a red card and giving Milan a penalty.
Balotelli stepped up and sent the goalkeeper the wrong way to make it 1-1.
Milan almost found a winner on 88 minutes when Balotelli headed towards goal from a corner, but the goalkeeper just kept hold of the ball to keep the scores level.