Upstream code:
Problem:
The serviceExposures Helm block is only generated when the chart has app.kubernetes.io/component: service-only. Multi-tenant CAP apps with approuters cannot configure direct ingress routes.
This matters because traffic through the approuter loses the XFCC header due to Istio proxy sanitization. Multi-tenant apps need serviceExposures to route BTP callbacks (e.g., /-/cds/saas-provisioning/...) directly to the backend service, bypassing the approuter so the original client certificate is preserved.
Expected behavior:
Generate the serviceExposures block unconditionally for all chart types. It's already wrapped in {{- if .Values.serviceExposures }}, so it has no effect when not configured. There's no reason to restrict it to service-only charts.
Severity:
Medium - blocks a valid and common use case for multi-tenant apps.
Upstream code:
if (isService)if (isService)guardapp.kubernetes.io/component: service-onlyfromChart.yamlProblem:
The
serviceExposuresHelm block is only generated when the chart hasapp.kubernetes.io/component: service-only. Multi-tenant CAP apps with approuters cannot configure direct ingress routes.This matters because traffic through the approuter loses the XFCC header due to Istio proxy sanitization. Multi-tenant apps need
serviceExposuresto route BTP callbacks (e.g.,/-/cds/saas-provisioning/...) directly to the backend service, bypassing the approuter so the original client certificate is preserved.Expected behavior:
Generate the
serviceExposuresblock unconditionally for all chart types. It's already wrapped in{{- if .Values.serviceExposures }}, so it has no effect when not configured. There's no reason to restrict it to service-only charts.Severity:
Medium - blocks a valid and common use case for multi-tenant apps.