6 Integrating ECE CHF Composable Service with ECE for 5G Charging
You can integrate the Oracle Communications Elastic Charging Engine (ECE) Charging Manager (CHF) composable service with your existing ECE cloud native deployment to perform 5G charging.
Topics in this document:
About Integrating the ECE CHF Composable Service into ECE for 5G Charging
When the ECE Charging Manager (CHF) composable service is integrated with an existing ECE deployment, the composable services work together to provide real-time 5G charging, quota management, spending limit control, and charging notification processing for 5G services.
The CHF provides the public 3GPP Nchf service interfaces used by 5G network functions, such as the Session Management Function (SMF) and Policy Control Function (PCF). The CHF acts as the network-facing charging gateway and mediation layer between the 5G core network and ECE.
The ECE Elastic Charging Server (ECS) acts as the primary charging engine and is responsible for subscriber charging sessions, balance reservation and consumption, real-time rating, policy evaluation, and spending limit enforcement. ECS also generates rated charging events and charging-related notifications as part of the charging workflow.
This architecture enables scalable, cloud native 5G charging while separating the network-facing charging interfaces provided by the CHF from the real-time charging, balance management, and policy processing capabilities provided by ECS.
ECE and the CHF work together to generate 5G unrated and rated CDRs through the following workflow:
-
The CHF converts the request into an unrated event and sends it to the CHF-CGF Kafka topic. The Charging Gateway Function (CGF) consumes the unrated event from the Kafka topic and generates unrated 5G call detail records (CDRs).
Note:
The CHF always sends unrated events to the CGF to generate unrated 5G CDRs, even when the charging request is quota managed and also requires rating. This behavior supports 3GPP charging and charging-record generation requirements.
-
The CHF determines whether a request requires online charging processing by checking for quota-management information, such as requested units or online-charging indicators.
-
If the request requires online charging, the CHF forwards the request to the ECE HTTP Gateway.
For active online charging sessions, the CHF also routes session termination requests to the HTTP Gateway, even when quota-related information is no longer present in the request. This behavior helps prevent orphaned sessions and ensures the proper release of reserved resources.
-
The HTTP Gateway forwards charging requests to ECS for rating and charging processing.
-
ECS generates rated events and charging-related notifications as part of the charging workflow.
-
ECS delivers charging and spending limit notifications asynchronously through Kafka-based notification distribution.
-
The HTTP Gateway consumes the notification events from Kafka and delivers notifications to external network functions by using the notification URIs associated with the charging or spending-limit sessions.
High-Level Configuration Tasks to Use CHF for 5G Charging
To configure the ECE CHF composable service and your existing ECE cloud native deployment for 5G charging:
-
Ensure you have installed and configured all prerequisite software, such as Kafka server.
-
Create an override-values.yaml file for the ECE composable services Helm chart.
-
Configure the mandatory values for rating 5G events.
-
Configure the CHF composable service to process charging and SLC requests and route them appropriately.
See "Configuring the CHF Composable Service for 5G Charging".
-
Configure the NRF Management Agent to register the CHF with the 5G NRF.
-
Migrate the CHF and CGF composable services into your existing ECE deployment.
See "Migrating the CHF and CGF Composable Services into an Existing ECE System".
Configuring Mandatory Values for 5G Charging
To configure the ECE composable services to perform real-time charging, quota management, and spending limit control for 5G services, set the following keys in your override-values.yaml file for oc-ccs-version. These keys are required to create a simple or demonstration version that you can use immediately.
These keys apply to all ECE composable services, but you can override them for a specific composable service by setting a different value in the composable service's key. For example, to use different Service Monitor settings for the NRF Management Agent, set the keys under nchfConvergedCharging.nchfConvergedCharging.nrfManagementAgent.serviceMonitor.
Note:
The &keyName and *keyName values are Helm references. If a key in the values.yaml file includes one of these references, you must also include the reference in your override-values.yaml file.
imageRepository: &imageRepository ""
imagePullSecrets: &imagePullSecrets
imagePullPolicy: &imagePullPolicy IfNotPresent
nodeSelector: &nodeSelector {}
partOfLabel: &partOfLabel oc-ccs
additionalLabels: &additionalLabels { }
annotations: &annotations { }
webserverDefaults: &webserver
maxPayloadSize: 2000000
nrfManagementImage: &nrfManagementImage "ccs/nrf-management:15.2.0.0.2"
nchfConvergedChargingImage: &nchfConvergedChargingImage "ccs/chf/nchf-converged-charging:15.2.0.0.2"
tracingEnabled: &tracingEnabled false
tracingHost: &tracingHost otlp-collector-host
tracingPort: &tracingPort 14250
nchfTopicName: &nchfPublisherTopicName nchf-cgf-cdr
nchfCdrMultiSite: &nchf-cdr-multisite
enabled: false
coordinationId: "nchf-cdr-coordination"
failoverMode: ALL_REMAINING
kafkaFailoverStabilizationWindow: "PT0S"
remoteSites:
- site2
- site3
kafka-brokers:
ccs-broker-producer-1: &ccs-broker-producer-1
name: ccs-broker-producer
bootstrapServers: kafka:9093
auth:
enabled: true
tls:
trustStore:
existingSecret: cgf-billing-cluster-ca-cert
passwordKey: ca.password
keyStore:
existingSecret: cgf-billing-user
passwordKey: user.password
extraConfig:
reconnect.backoff.ms: "100"
reconnect.backoff.max.ms: "1000"
max.block.ms: "30000"
request.timeout.ms: "15000"
delivery.timeout.ms: "60000"
ccs-broker-consumer-1: &ccs-broker-consumer-1
name: ccs-broker-consumer
bootstrapServers: kafka:9093
auth:
enabled: true
tls:
trustStore:
existingSecret: cgf-cluster-ca-cert
passwordKey: ca.password
keyStore:
existingSecret: nchf-user
passwordKey: user.password
extraConfig:
auto.offset.reset: latest
reconnect.backoff.ms: "175"
reconnect.backoff.max.ms: "1000"
allow.auto.create.topics: "false"
serviceMonitor: &serviceMonitor
enabled: false
namespace:
additionalLabels: {}
grafanaDashboards: &grafanaDashboards
enabled: false
grafanaNamespace:
labels:
grafana_dashboard: "1"
annotations:
k8s-sidecar-target-directory: "/tmp/dashboards/ccs"Table 6-1 describes each key.
Table 6-1 Mandatory Keys for 5G Charging
| Key | Description |
|---|---|
|
imageRepository |
The registry server where you pushed images, typically in this format: RepoHost:RepoPort. This value is added as a prefix to all image names when you install or upgrade Helm charts. |
|
imagePullSecrets |
The image pull secret or list of image pull secrets used by pods to authenticate to the private image registry. This value is added to each pod to permit it to pull the image from your private registry server. See "Creating Secrets for Container Registry Authorization" for more information. |
|
imagePullPolicy |
When Kubernetes pulls images:
|
|
nodeSelector |
The nodes on which to deploy ECE composable services. Labels appear underneath nodeSelector in a set of key-value pairs. |
|
partOfLabel |
The value to assign to the composable service's app.kubernetes.io/part-of label. This label identifies the application that the resource belongs to. The default is oc-ccs. |
|
additionalLabels |
A key-value map of additional Kubernetes labels applied to deployed resources. |
|
annotations |
A key-value map of Kubernetes annotations applied to deployed resources. |
|
webserverDefaults.maxPayloadSize |
The maximum allowed size of an HTTP request body. The default is 2000000. |
|
nrfManagementImage |
The name of the NRF image. The default is ccs/nrf-management:15.2.0.0.2. |
|
nchfConvergedChargingImage |
The name of the nCHF image. The default is ccs/chf/nchf-converged-charging:15.2.0.0.2. |
|
tracingEnabled |
Whether tracing through Jaeger is enabled. The default is false. |
|
tracingHost |
The host name for the Jaeger server. The default is otlp-collector-host. Note: This key applies only if tracing is enabled. |
|
tracingPort |
The port number for Jaeger. The default is 14250. Note: This key applies only if tracing is enabled. |
|
nchfTopicName |
The name of the CHF-CGF Kafka topic. The CHF publishes unrated events to this topic. The default is nchf-cgf-cdr. |
|
nchfCdrMultiSite.* |
The details for deploying CHF on multiple sites.
|
|
kafka-brokers.ccs-broker-producer-1 |
The details for connecting the producer to the Kafka Server:
|
|
kafka-brokers.ccs-broker-consumer-1 |
The Kafka consumer configuration used by the CGF to consume unrated events from CHF.
|
|
serviceMonitor.* |
The details for the Service Monitor:
|
|
grafanaDashboards.* |
The details for the Grafana Dashboards:
|
Configuring the CHF Composable Service for 5G Charging
When configured for 5G charging, the CHF performs these functions:
-
Exposes the 5G Nchf service interfaces for:
-
Converged charging (nchf-convergedcharging)
-
Spending limit control (nchf-spendinglimitcontrol)
-
-
Processes charging requests originating from SMF and other network functions
-
Processes spending limit control subscription and policy requests originating from PCF
-
Mediates and transforms incoming requests and outgoing responses
-
Routes online charging requests to the ECS for rating, quota reservation and consumption, session lifecycle management, balance management, and spending limit enforcement
To configure the CHF pod to process 5G charging requests, set the following keys in your override-values.yaml file:
nchfConvergedCharging:
enabled: true
imageRepository: *imageRepository
imagePullSecrets: *imagePullSecrets
imagePullPolicy: *imagePullPolicy
partOfLabel: *partOfLabel
webserver: *webserver
nchfConvergedCharging:
name: nchf-converged-charging
fullname: "nchf-converged-charging"
additionalLabels: *additionalLabels
annotations: *annotations
nodeSelector: *nodeSelector
container:
image: *nchfConvergedChargingImage
mutatorRulesConfigMapOverride:
restServices:
- name: "ConvergedCharging"
type: NCHF_CONVERGED_CHARGING
config:
path: "/nchf-convergedcharging/v3/chargingdata"
ingressOrigin:
processors:
- name: mediation-processor
type: COMPOSITE_PROCESSOR
processors:
- name: mutation-processor-standin
producerOnly: true
type: LOGGING_PROCESSOR
config:
logLevel: INFO
atMostSeconds: 10
- name: nchf-processor
type: NCHF
config:
subscriberValidator:
enabled: false
config:
baseUri: "http://subscriber-profile-repository:8080/subscriberProfileRepository/v1"
sessionManager:
enabled: false
config:
baseUri: "http://session-manager:8080/sessionManager/v1"
expiryIntervalInSeconds: 300
processors:
- name: transform-nchf-request
type: MUTATOR_PROCESSOR
config:
rules:
- source: INLINE
rule:
ruleName: onlineSessionIdEnricher
criterion:
expression:
nchfRequest:
criteriaType: MVEL_EXPRESSION
expression: "value.requestType == RequestType.CREATE && value.isOnlineChargingRequest()"
mutation:
expression:
associatedSession:
- mutationType: MVEL_TRANSFORM
expression: "value.id = 'online_'+value.id"
- name: cdrPublisher
type: KAFKA_PUBLISHER_PROCESSOR
config:
publisher:
name: nchf
topic:
name: *nchfPublisherTopicName
numberOfPartitions: 2
replicationFactor: 2
create:
enabled: true
modification:
enabled: true
keyGenerations:
- criteria: $.subscriberIdentifier
keyPaths:
- $.subscriberIdentifier
broker: *ccs-broker-producer-1
- name: rest-nchf-httpgw
type: NCHF_REST_PROCESSOR
config:
host: "httpgw"
port: "8080"
faultTolerance:
retry:
delay: 100
calls: 3
delayFactor: 1.0
circuitBreaker:
delay: 200
errorRatio: 30
successThreshold: 2
volume: 10
criteria:
criterion:
expression:
nchfRequest:
criteriaType: MVEL_EXPRESSION
expression: "(value.associatedSession.id != null && value.associatedSession.id.startsWith('online_')) || value.isOnlineChargingRequest()"
- name: "SpendingLimitControl"
type: NCHF_SPENDING_LIMIT_CONTROL
config:
path: "/nchf-spendinglimitcontrol/v1/subscriptions"
processors:
- name: slc-logger
producerOnly: true
type: LOGGING_PROCESSOR
config:
logLevel: INFO
atMostSeconds: 10
- name: rest-slc-httpgw
type: REST_PROCESSOR
config:
uri: "http://httpgw:8080/nchf-spendinglimitcontrol/v1/subscriptions"
faultTolerance:
retry:
delay: 100
calls: 3
delayFactor: 1.0
circuitBreaker:
delay: 200
errorRatio: 30
successThreshold: 2
volume: 10
networkFunction:
nfProfile: &profileFile nfProfile.json
existingNfProfileConfigMap: &existingNfProfileConfigMap
terminationGracePeriodSeconds: 60
resources:
memoryRequest: "256Mi"
cpuRequest: "250m"
memoryLimit: "512Mi"
cpuLimit: "500m"
replicas: 1
jvmOpts: "-XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:InitialRAMPercentage=80 -XX:MaxRAMPercentage=80 -XX:MinRAMPercentage=80 -Dlog4j.configurationFile=/app/config/log4j2.yaml"
restartCount: 0
service:
additionalLabels: *additionalLabels
additionalAnnotations: *annotations
type: ClusterIP
adminService:
additionalLabels: *additionalLabels
additionalAnnotations: *annotations
type: ClusterIP
logging:
format:
type: TEXT
pattern: *loggingPattern
rootLevel: INFO
packageLogging:
- name: com.oracle.cagbu
level: INFO
- name: io.helidon
level: INFO
tracing:
enabled: *tracingEnabled
service: nchf-converged-charging
maxQueueSize: 42
flushIntervalMs: 10001
host: *tracingHost
port: *tracingPort
samplerType: ratio
samplerParam: 0.01
samplerManager:
logSpans: true
webServer:
spans:
httpRequest:
contentWrite: false
contentRead: false
hpa:
enabled: true
minReplicas: 1
maxReplicas: 8
metrics:
cpuAverageUtilization: 65
scaleDown:
selectPolicy: Max
stabilizationWindowSeconds: 300
periodSeconds: 180
scaleUp:
selectPolicy: Max
stabilizationWindowSeconds: 5
periodSeconds: 20
grafanaDashboards: *grafanaDashboards
serviceMonitor: *serviceMonitor
ingress:
ingressClassName:Table 6-2 describes each key.
Table 6-2 Charging Manager Keys
| Key | Path in values.yaml | Description |
|---|---|---|
|
enabled |
nchfConvergedCharging |
Whether the CHF converged charging service is enabled. The default is true. |
|
imageRepository |
nchfConvergedCharging |
The registry server where you pushed images, typically in this format: RepoHost:RepoPort. Note: The composable service uses the global imageRepository setting by default. Set this key only if you want to use a different registry server. |
|
imagePullSecrets |
nchfConvergedCharging |
The name of the Secret that contains credentials for accessing images from your private image server. Note: The composable service uses the global imagePullSecrets setting by default. Set this key only if you want to use a different Secret. |
|
imagePullPolicy |
nchfConvergedCharging |
The Kubernetes image pull policy for CHF pods: Always, IfNotPresent, or Never. Note: The composable service uses the global imagePullPolicy setting by default. Set this key only if you want to use a different setting. |
|
partOfLabel |
nchfConvergedCharging |
Sets the value to assign to the composable service's app.kubernetes.io/part-of label. This label identifies the application that the resource belongs to. Note: The composable service uses the global partOfLabel setting by default. Set this key only if you want to use a different setting. |
|
webserver |
nchfConvergedCharging |
The Helidon HTTP server configuration. |
|
nchfConvergedCharging.* |
nchfConvergedCharging |
The details about the CHF.
|
|
mutatorRulesConfigMapOverride |
nchfConvergedCharging |
The path to a different ConfigMap for mutation rules. This lets you override the standard transformation rules used by the mutation processor. For example, you could use it to:
|
|
restServices[0].* (Converged Charging Service) |
nchfConvergedCharging.nchfConvergedCharging |
The details about the Converged Charging Service.
|
|
restServices[0].* (Spending Limit Control Service) |
nchfConvergedCharging.nchfConvergedCharging |
The details about the Spending Limit Control Service.
|
|
networkFunction.* |
nchfConvergedCharging.nchfConvergedCharging |
The details for how the service gets its NF profile information for NRF registration.
|
|
terminationGracePeriodSeconds |
nchfConvergedCharging.nchfConvergedCharging |
The amount of time, in seconds, the pod needs to shut down gracefully. The value must be a non-negative integer. A value of 0 specifies to terminate immediately, and a nil value specifies to use the default grace period. The grace period is the duration after which the processes running in the pod are sent a termination signal. The processes are forcibly terminated. Set this value longer than the expected cleanup time for your process. The default is 60. |
|
resources.* |
nchfConvergedCharging.nchfConvergedCharging |
The minimum and maximum amount of memory and CPU that the CHF composable service can use. See "Setting Up Autoscaling of Pods". |
|
replicas |
nchfConvergedCharging.nchfConvergedCharging |
The desired number of pod replicas. The default is 1. This key is ignored if HPA is enabled. |
|
jvmOpts |
nchfConvergedCharging.nchfConvergedCharging |
The JVM options to use. |
|
restartCount |
nchfConvergedCharging.nchfConvergedCharging |
The number of times the CHF service has been restarted. Increment this value by 1 and run the Helm upgrade command to force a rolling restart of the CHF service. The default is 0. |
|
service.* |
nchfConvergedCharging.nchfConvergedCharging |
The details of the CHF service.
|
|
adminService.* |
nchfConvergedCharging.nchfConvergedCharging |
The details of the admin service.
|
|
logging.* |
nchfConvergedCharging.nchfConvergedCharging |
The logging levels for the CHF composable service. |
|
tracing.* |
nchfConvergedCharging.nchfConvergedCharging |
Specifies how to set up tracing for the CHF composable service. |
|
hpa.* |
nchfConvergedCharging.nchfConvergedCharging |
The minimum and maximum number of pod replicas that can be deployed, the scale-up rules, and the scale-down rules. |
|
grafanaDashboards.* |
nchfConvergedCharging.nchfConvergedCharging |
The details for the CHF Grafana Dashboards. |
|
serviceMonitor.* |
nchfConvergedCharging.nchfConvergedCharging |
The details for the CHF Service Monitor. |
|
ingress.ingressClassName |
nchfConvergedCharging.nchfConvergedCharging |
The Kubernetes Ingress class used for the CHF deployment when ingress is enabled. It determines which ingress controller manages external access to the CHF service. |
|
nrfManagementAgent |
nchfConvergedCharging.nchfConvergedCharging |
The details for the NRF Management Agent. |
Configuring Processors for the Converged Charging Service
The Converged Charging service provides the 5G Nchf converged charging interface, which is used by network functions to submit charging requests to the CHF. This service processes charging data requests, evaluates whether online charging is required, publishes usage events for unrated CDR generation, and routes eligible requests to ECS for rating and quota management.
The Converged Charging service exposes the standard 3GPP Nchf charging endpoint and uses a configurable processor framework to perform request mediation, transformation, Kafka publication, and ECE integration.
By default, the Converged Charging service processes requests by running the following processors in sequence:
-
mediation-processor: Performs preliminary mediation and optional logging behavior before charging orchestration begins.
-
nchf-processor: Runs CHF-specific charging orchestration and downstream request handling. By default, it also calls the following sub-processors:
-
transform-nchf-request: Applies request transformation and session enrichment logic.
-
cdrPublisher: Publishes usage events to Kafka for unrated 5G CDR generation.
-
rest-nchf-httpgw: Routes eligible online charging requests to HTTP Gateway and ECE.
-
For more information about processors, see "About the ECE Composable Service Processors".
Table 6-3 lists the keys for configuring the nchf-processor.
Table 6-3 Converged Charging Service Keys
| Key | Path in values.yaml | Description |
|---|---|---|
|
name |
restServices.processors |
The name of the service: ConvergedCharging. |
|
type |
restServices.processors |
The service type: NCHF_CONVERGED_CHARGING. |
|
processors[].* (mediation-processor) |
restServices.processors |
This processor performs preliminary mediation and optional logging.
|
|
processors[].* (nchf-processor) |
restServices.processors |
This processor forwards requests to HTTP Gateway and ECS.
|
Table 6-4 lists the keys for configuring the transform-nchf-request sub-processor to transform the request and enrich sessions.
Table 6-4 transform-nchf-request Sub-processor Keys
| Key | Description |
|---|---|
|
name |
The name of the processor: transform-nchf-request. |
|
type |
The processor type: MUTATOR_PROCESSOR. |
|
config.rules[].source |
The list of configured mutation rules. The default is INLINE, which specifies that the mutation rule is defined directly in the configuration file and is applied in place during request processing. |
| config.rules[].rule.ruleName |
The name of the rule. The default is onlineSessionIdEnricher. |
|
config.rules[].rule.criterion.expression.nchfRequest.criteriaType |
The expression language used to evaluate the rule condition for an nCHF request. It tells CHF how to interpret the criterion expression and determine whether the mutation rule should be applied during request processing. The default is MVEL_EXPRESSION. |
|
config.rules[].rule.criterion.expression.nchfRequest.expression |
The condition that CHF evaluates to determine whether the mutation rule applies to an nCHF request. |
|
config.rules[].rule.mutation.expression.associatedSession.mutationType |
The transformation type used to modify the associated session data when CHF applies the mutation rule. The default is MVEL_EXPRESSION. |
|
config.rules[].rule.mutation.expression.associatedSession.expression |
The expression used to modify or enrich the associated session data during request processing. |
Table 6-5 lists the keys for configuring the cdrPublisher sub-processor to publish usage events to Kafka.
Table 6-5 cdrPublisher Sub-processor Keys
| Key | Description |
|---|---|
|
name |
The name of the processor: cdrPublisher. |
|
type |
The processor type: KAFKA_PUBLISHER_PROCESSOR. |
|
config.publisher.name |
The logical publisher name. The default is nchf. |
| config.publisher.topic.name |
The Kafka topic used for event publication. |
|
config.publisher.topic.numberOfPartitions |
The number of Kafka topic partitions. The default is 2. |
|
config.publisher.topic.replicationFactor |
The Kafka topic replication factor. The default is 2. |
|
config.publisher.topic.create.enabled |
Whether Kafka topic auto-creation is enabled. The default is true. |
|
config.publisher.topic.modification.enabled |
Whether Kafka topic modification is enabled. The default is true. |
|
config.publisher.keyGenerations |
The key-generation rules used for Kafka message partitioning. |
|
config.publisher.broker |
The Kafka broker configuration used by the publisher. |
Table 6-6 lists the keys for configuring the rest-nchf-httpgw sub-processor to route online charging requests to HTTP Gateway and ECS.
Table 6-6 rest-nchf-httpgw Sub-processor Keys
| Key | Description |
|---|---|
|
name |
The name of the processor: rest-nchf-httpgw. |
|
type |
The processor type: NCHF_REST_PROCESSOR. |
|
config.host |
The target HTTP Gateway host name. The default is httpgw. |
| config.port |
The target HTTP Gateway port. The default is 8080. |
|
faultTolerance.retry.delay |
The initial retry delay in milliseconds. The default is 100. |
|
faultTolerance.retry.calls |
The maximum number of retry attempts. The default is 3. |
|
faultTolerance.retry.delayFactor |
The retry backoff factor. The default is 1.0. |
|
faultTolerance.circuitBreaker.delay |
The delay before circuit-breaker retry attempts. The default is 200. |
|
faultTolerance.circuitBreaker.errorRatio |
The error ratio threshold used to open the circuit breaker. The default is 30. |
|
faultTolerance.circuitBreaker.successThreshold |
The number of successful calls required to close the circuit breaker. The default is 2. |
|
faultTolerance.circuitBreaker.volume |
The sliding window size used by the circuit breaker. The default is 10. |
|
criteria.criterion.expression.nchfRequest.criteriaType |
The expression used to determine whether the request is routed to ECE for online charging. The default is MVEL_EXPRESSION. |
|
criteria.criterion.expression.nchfRequest.expression |
The condition CHF evaluates to determine whether the request matches the criteria and should be routed to the associated processor. |
Configuring Processors for the Spending Limit Control Service
The Spending Limit Control (SLC) service provides the 5G Nchf spending limit control interface, which is used by network functions to manage subscriber spending limit subscriptions and policy notifications. This service receives spending limit control requests, applies optional mediation and logging behavior, and forwards the requests to HTTP Gateway and ECS for spending limit processing and policy enforcement.
The SLC service exposes the standard 3GPP Nchf spending limit control REST endpoint and uses a configurable processor framework to perform request logging, fault-tolerant forwarding, and ECS integration.
By default, the SLC service processes requests by running the following processors in sequence:
-
slc-logger: Performs optional request logging for operational visibility and troubleshooting.
-
rest-slc-httpgw: Routes spending limit control requests to HTTP Gateway and ECS for spending limit processing.
For more information about processors, see "About the ECE Composable Service Processors".
Table 6-7 lists the keys for configuring the SLC service processors.
Table 6-7 SLC Service Keys
| Key | Path in values.yaml | Description |
|---|---|---|
|
name |
restServices.processors |
The logical name of the spending limit control service: SpendingLimitControl. |
|
type |
restServices.processors |
The service type identifier for the Nchf spending limit control interface: NCHF_SPENDING_LIMIT_CONTROL. |
|
config.path |
restServices.processors |
The REST endpoint used to receive SLC requests. The default is /nchf-spendinglimitcontrol/v1/subscriptions. |
|
processors[].* (slc-logger) |
restServices.processors |
This processor performs preliminary mediation and optional logging.
|
|
processors[].* (rest-slc-httpgw) |
restServices.processors |
This processor runs CHF-specific charging orchestration and downstream request handling.
|
Configuring the NRF Management Agent
The NRF Management Agent manages the registration and lifecycle of the CHF with the 5G NRF. It publishes the CHF network function profile and exposes Nchf services so that 5G core network functions can discover and access the services dynamically. The agent continuously monitors CHF health and updates NRF registration status based on service availability and readiness. It also provides secure communication with the NRF by using configured OAuth 2.0 authentication and TLS settings.
In multisite deployments, the NRF Management Agent supports resilient connectivity and automatic failover across redundant NRF endpoints.
To configure the NRF Management Agent, set the following keys in your override-values.yaml file:
nrfManagementAgent:
enabled: true
imageRepository: *imageRepository
imagePullSecrets: *imagePullSecrets
imagePullPolicy: *imagePullPolicy
partOfLabel: *partOfLabel
nrfManagement:
fullname: nchf-nrf
additionalLabels: *additionalLabels
annotations: *annotations
nodeSelector: *nodeSelector
container:
image: *nrfManagementImage
existingNfProfileConfigMap: *existingNfProfileConfigMap
nrfConfig:
nrfClientInstanceName: nchf-nrf
profileFile: *profileFile
nfService:
health:
enabled: true
endpoint: http://nchf-converged-charging-admin:8081/health/ready
timeout: PT5S
cacheTimeout: PT30S
defaultCapacity: 100
suspendOnFailure: true
tlsProfiles:
tls1: &tls
enabled: true
hostnameVerification: true
secretName: "nrf-tls-client-creds"
mtls:
enabled: true
authProfiles:
nrfOauth: &nrfOauth
type: OAUTH2
oauth2:
secretName: "nrf-oauth2-credentials"
identityUri: ""
tokenUri: "https://keycloak.svc.cluster.local:8443/realms/nrf-realm/protocol/openid-connect/token"
scopes:
- nnrf-nfm
tokenTls: *tls
apiEndpoints:
- name: NrfSite1
heartBeatInterval: 5
primary:
name: ad1-pri
uri: https://nrf-1:8443/
authentication: *nrfOauth
tls: *tls
fallbacks:
- name: ad2
uri: https://nrf-2:8443/
authentication: *nrfOauth
tls: *tls
- name: ad3
uri: https://nrf-3:8443/
authentication: *nrfOauth
tls: *tls
grafanaDashboards: *grafanaDashboards
serviceMonitor: *serviceMonitorTable 6-8 describes these keys.
Table 6-8 Keys for the NRF Management Agent
| Key | Path to values.yaml | Description |
|---|---|---|
|
enabled |
nchfConvergedCharging.nrfManagementAgent |
Whether the NRF Management Agent is enabled. The default is true. |
|
imageRepository |
nchfConvergedCharging.nrfManagementAgent |
The shared image repository used for the NRF Management Agent images. |
|
imagePullSecrets |
nchfConvergedCharging.nrfManagementAgent |
The image pull secrets used to retrieve container images. |
|
imagePullPolicy |
nchfConvergedCharging.nrfManagementAgent |
The image pull policy applied to NRF Management Agent containers. |
|
partOfLabel |
nchfConvergedCharging.nrfManagementAgent |
The shared Kubernetes part-of label value applied to NRF Management Agent resources. |
|
nrfManagement.* |
nchfConvergedCharging.nrfManagementAgent |
The NRF management configuration, including:
|
|
nrfConfig.* |
nchfConvergedCharging.nrfManagementAgent |
The nrfConfig configuration.
|
|
nfService.health.* |
nchfConvergedCharging.nrfManagementAgent.nrfConfig |
The health monitoring settings used by the NRF management agent to determine CHF service availability and registration status.
|
|
tlsProfiles.tls1.* |
nchfConvergedCharging.nrfManagementAgent.nrfConfig |
The TLS configuration profiles that the NRF Management Agent uses when connecting to NRF API endpoints and related services.
|
|
authProfiles.nrfOauth.* |
nchfConvergedCharging.nrfManagementAgent.nrfConfig |
The OAuth 2.0 authentication profile used by CHF when connecting to NRF.
|
|
apiEndpoints.* |
nchfConvergedCharging.nrfManagementAgent.nrfConfig |
The NRF endpoint set that CHF uses for NRF communication and failover.
|
|
grafanaDashboards.* |
nchfConvergedCharging.nrfManagementAgent |
The Grafana dashboard configuration used for NRF Management Agent observability. |
|
serviceMonitor.* |
nchfConvergedCharging.nrfManagementAgent |
The ServiceMonitor configuration used to expose NRF Management Agent metrics to Prometheus. |