HTML:

<ya-template-layout ya-key="customItemContentLayout">
    <h2 class=ballon_header>$[properties.balloonContentHeader|raw]</h2>
    <div class=ballon_body>$[properties.balloonContentBody|raw]</div>
    <div class=ballon_footer>$[properties.balloonContentFooter|raw]</div>
</ya-template-layout>
<ya-map ya-zoom="9" ya-center="{{mapCenter}}" ya-controls="">
    <ya-cluster ya-options="{clusterDisableClickZoom: true,clusterOpenBalloonOnClick: true,clusterBalloonPanelMaxMapArea: 0,clusterBalloonContentLayoutWidth: 350,clusterBalloonItemContentLayout: 'customItemContentLayout',clusterBalloonLeftColumnWidth: 120}">
        <ya-geo-object ng-repeat="o in geoObjects" ya-source="o"></ya-geo-object>
    </ya-cluster>
</ya-map>
    

CSS

.ballon_header { font-size: 16px; margin-top: 0; margin-bottom: 10px; color: #708090; }
.ballon_body { font-size: 14px; text-align: center; }
.ballon_footer { font-size: 12px; text-align: right; border-top: 1px solid #7D7D7D; color: #7D7D7D; margin-top: 10px; }
    

javascript:

var objs=[];
$scope.mapCenter=[37.619044,55.755381];
for(var i= 0;i<100;i++){
    objs.push({
        geometry:{
            type:'Point',
            coordinates:getRandomCoordinates()
        },
        properties:{
            // Устаналиваем данные, которые будут отображаться в балуне.
            balloonContentHeader: 'Метка №' + (i + 1),
            balloonContentBody: getContentBody(i),
            balloonContentFooter: 'Мацуо Басё'
        }
    });
}
$scope.geoObjects=objs;
function getRandomCoordinates () {
    return [
        $scope.mapCenter[0] + (Math.random() * 0.3 - 0.15),
        $scope.mapCenter[1] + (Math.random() * 0.5 - 0.25)
    ];
}
var placemarkBodies;
function getContentBody (num) {
    if (!placemarkBodies) {
        placemarkBodies = [
            ['Желтый лист в ручье.', 'Просыпайся, цикада,', 'Берег все ближе.'].join('<br/>'),
            ['Ива на ветру.', 'Соловей в ветвях запел,', 'Как ее душа.'].join('<br/>'),
            ['Лежу и молчу,', 'Двери запер на замок.', 'Приятный отдых.'].join('<br/>')
        ];
    }
    return '<strong>Тело метки №' + (num + 1) + '</strong><br/>' + placemarkBodies[num % placemarkBodies.length];
}

$[properties.balloonContentHeader|raw]

$[properties.balloonContentBody|raw]