def METHOD_NAME(self, app_spec, annotated_ingress, labels):
    default_annotations = {"fiaas/expose": "true" if annotated_ingress.explicit_host else "false"}
    annotations = merge_dicts(app_spec.annotations.ingress, annotated_ingress.annotations, default_annotations)
    metadata = ObjectMeta(
        name=annotated_ingress.name, namespace=app_spec.namespace, labels=labels, annotations=annotations
    )
    per_host_ingress_rules = [
        IngressRule(
            host=ingress_item.host, http=self._make_http_ingress_rule_value(app_spec, ingress_item.pathmappings)
        )
        for ingress_item in annotated_ingress.ingress_items
        if ingress_item.host is not None
    ]
    if annotated_ingress.default:
        use_suffixes = True
    else:
        use_suffixes = False
    ingress_spec = IngressSpec(rules=per_host_ingress_rules)
    ingress = Ingress.get_or_create(metadata=metadata, spec=ingress_spec)
    hosts_for_tls = [rule.host for rule in per_host_ingress_rules]
    self._ingress_tls_deployer.apply(
        ingress, app_spec, hosts_for_tls, annotated_ingress.issuer_type, annotated_ingress.issuer_name, use_suffixes=use_suffixes
    )
    self._owner_references.apply(ingress, app_spec)
    self._extension_hook.apply(ingress, app_spec)
    ingress.save()