Ok, I've figured it out with a little help. Here's the working configuration:
w/ bridge-domain:
# show interfaces ge-2/1/0
vlan-tagging;
encapsulation flexible-ethernet-services;
unit 10 {
encapsulation vlan-bridge;
vlan-id 10;
}
# show bridge-domains
vl-10 {
domain-type bridge;
vlan-id 10;
interface ge-2/1/0.10;
routing-interface irb.10;
}
# show interfaces irb
unit 10 {
family inet {
address 10.0.0.1/24;
}
}
w/ VPLS routing instance:
# show interfaces ge-2/1/0
vlan-tagging;
encapsulation flexible-ethernet-services;
unit 10 {
encapsulation vlan-vpls;
vlan-id 10;
}
# show routing-instances
vl-10 {
instance-type vpls;
vlan-id 10;
interface ge-2/1/0.10;
routing-interface irb.10;
}
IRB interface is the same
So, keyword here is encapsulation flexible-ethernet-services.
Also, as I've been pointed out, that it's better bridge with bridge-domain, and if you need to scale it - place bridge-domain in VPLS instance, not bridge with VPLS in the first place, so I've stayed with bridge-domain configuration.
What about access/trunk interfaces? Well, as I pointed earlier, access interface worked fine for me. As for the trunk, Juniper people insist that IRB doesn't work with trunk/access interfaces on Trio chipset at this point. This functionality will be available in 11.1.