Two blasts hit Zaventem airport at about 07:00 GMT, and another struck Maelbeek metro station an hour later.
The government has not confirmed casualty numbers. Brussels transport officials say 15 died at Maelbeek and media say up to 13 died at the airport.
Belgium has now raised its terror threat to its highest level.
The attacks come four days after Salah Abdeslam, the main fugitive in the Paris attacks, was seized in Brussels.
Prime Minister Charles Michel called the Brussels attacks “blind, violent and cowardly”, saying they were a “tragic moment in our country’s history. I would like to call on everyone to show calmness and solidarity”.
European Union president Donald Tusk said: “These attacks mark another low by the terrorists in the service of hatred and violence.”
The airport and whole transport system in Brussels are closed.
Two blasts tore through the departures area of Zaventem airport shortly after 08:00 local time (07:00 GMT).
The Belgian prosecutor said “probably a suicide bomber” was involved.
The Belga news agency reports that shots were fired and shouts in Arabic were heard before the two explosions.
Zach Mouzoun, arriving on a flight from Geneva, told France’s BFM television: “It was atrocious. The ceilings collapsed. There was blood everywhere, injured people, bags everywhere. We were walking in the debris. It was a war scene.”
All flights have been diverted. Eurostar has cancelled all trains to and from Brussels. The Thalys France-Benelux train operator says the entire network is closed.
Security has been stepped up at Gatwick and Heathrow airports and the UK Foreign Office has advised British nationals to avoid crowded areas in Belgium. UK PM David Cameron is chairing a meeting of the Cobra response committee on Tuesday.
France has stepped up security. President Francois Hollande has held a cabinet meeting to discuss the Belgian explosions.
He said: “The terrorists have struck Belgium but it is Europe that was targeted. And it is the whole world that is concerned with this.”
There is also extra security at Dutch airports.
The metro blast occurred shortly after 08:00 GMT during the rush hour at Maelbeek station, with TV images showing smoke billowing from the entrance.
Alexandre Brans told AP: “The metro was leaving Maelbeek station when there was a really loud explosion. It was panic everywhere. There were a lot of people in the metro.”
Fire brigade spokesman Pierre Meys told AFP: “Most of the wounded have been evacuated. The scene is rather chaotic.”
The station is close to EU institutions. The European Commission, the EU’s executive arm, has told employees to stay indoors or at home. All meetings at EU institutions have been cancelled.
Ryan McGhee, a catering worker at a college in Brussels, told the BBC: “The entire city is in lockdown. People are calm at the moment but the atmosphere is tense.”
Belgium’s Interior Minister Jan Jambon had said on Monday that the country was on the highest level of alert for possible revenge attacks after the capture of Salah Abdeslam.
He told Belgian radio: “We know that stopping one cell can… push others into action. We are aware of it in this case.”
Zaventem airport is 11km (7 miles) north-east of Brussels and dealt with more than 23 million passengers last year.