How to get there
The Kurdistan Region is served by two main airports, Erbil and Sulaimaniya international airports. These two main airports are located within the Kurdistan’s two main cities. Various Airlines fly to both airports.
You can take buses from Istanbul to Silopi, the closest town on the Turkish border with Kurdistan, and then take a shared or private taxi across the border to Zakho, the closest town to the border on the Iraqi side. The taxi driver should charge around $50 - $60 to take you across the border.
Recently more companies are running buses linking Erbil with Diarbakir (about 9-15 hours depending on border traffic) and even Istanbul. The easiest option is to fly (or take a bus) to Diyarbakir - every morning at least 3 busses leave from the Otogar to Duhok (50-60TL, 7hrs), Erbil (70-80TL, 12hrs) and Sulaimaniya.
The border formalities may take as little as 45 minutes. No papers or photocopies are needed with excellent crossing inbound, you will also get a cup of tea in a lounge room with TV while they finish processing your passport.
Buses from in Iraq-bound direction are cheaper than the Turkey-bound buses, prepare 30 USD (towards Erbil) or 40 USD (towards Diyarbakir and to Istanbul and Ankara). Negotiate to get a good price.
From Iran, regular buses connect Tehran to Sulaimaniya. Buses cost approximately 70,000 toman (700,000R Iranian Rials) and are VIP. Most leave at night and will arrive at the border around midday. Be prepared to wait in the bus for some time before disembarking. The border crossing (especially on the Iranian side) can be quite a hassle for non-locals. You will need to buy some kind of exit permit for a fee (about the equivalent of 10$): try to find someone able to translate for you since all signs are in Farsi and it's hard to find any clue of what is being expected from you.