Is this related to a problem? Please describe.
Helm ReVal renders and validates customer Helm charts before they are deployed to BYOC
clusters as NVCF functions or NVCT tasks. Today every cluster gets the same fixed
validation policy, and ReVal has no information about which cluster a chart is destined
for. This causes two problems:
- Clusters with different security postures (single-tenant vs multi-tenant workloads)
cannot get different levels of Helm chart restriction.
- Clusters that run operators providing extra CRDs (for example, the LeaderWorkerSet
API used by NIM Factory) cannot accept Helm charts that reference those custom types,
because ReVal rejects unknown Kubernetes types.
NVIDIA Cloud Partners with complex function/task use cases and specialized Helm charts
are blocked by this today.
Describe the solution you'd like
Introduce a per-cluster "Helm validation policy" made up of:
- a
name field, one of Default (current ReVal validation rules apply) or
Unrestricted (only image validation is performed, no template validation), and
- an
allowedExtraKubernetesTypes list (group/version/kind/resource) describing
additional CRD-backed types the cluster's charts may include.
Clusters register with a policy at creation time (immutable after registration, since
loosening it later could be a security or compatibility risk). Users deploying a
function or task can request required extra types and/or a policy name as cluster
targeting fields; only clusters matching are selected, and Unrestricted clusters are
only selected when explicitly requested. The Helm ReVal service accepts a list of
policies to evaluate in a single request (instead of one request per cluster/policy) so
network- and validation-bound work is done once, and returns per-policy validity plus
errors. On the compute plane, the NVCA Operator receives the cluster's policy, updates
the miniservice controller's RBAC (Role) to allow the extra types, and passes the policy
to NVCA via a ConfigMap so installed CRD/policy mismatches can be detected at NVCA
startup instead of failing mid-deployment.
Default behavior for all existing clusters remains unchanged (Default policy, no
extra types) so this is fully backward compatible and opt-in.
Describe alternatives you've considered
- Per-request Helm chart validation caching instead of single-policy-list requests to
Helm ReVal: rejected for now because it adds complexity and requires security review
since customer data may include registry credentials; batching multiple policies into
one ReVal request avoids duplicate chart downloads without caching.
- Automatically granting operators all cluster-allowed types via the cluster policy
itself: rejected because Kubernetes Roles must be created at operator install/upgrade
time, so allowedExtraKubernetesTypes must be explicit operator Helm chart
configuration rather than derived automatically.
- Account-level (rather than cluster-level) validation policies: out of scope for this
effort, tracked separately.
Additional context
Implementation has already started based on an internal design document and is at
different stages of completion per service. TODO list below, organized by service,
with completed items checked off based on the current state of this repository.
Helm ReVal
ICMS (formerly SIS)
NVCF (cloud-functions)
NVCT (cloud-tasks)
NVCA / NVCA Operator
CLI (nvcf-cli)
Security
By submitting this issue, you agree to follow our code of conduct and our contributing guidelines.
Is this related to a problem? Please describe.
Helm ReVal renders and validates customer Helm charts before they are deployed to BYOC
clusters as NVCF functions or NVCT tasks. Today every cluster gets the same fixed
validation policy, and ReVal has no information about which cluster a chart is destined
for. This causes two problems:
cannot get different levels of Helm chart restriction.
API used by NIM Factory) cannot accept Helm charts that reference those custom types,
because ReVal rejects unknown Kubernetes types.
NVIDIA Cloud Partners with complex function/task use cases and specialized Helm charts
are blocked by this today.
Describe the solution you'd like
Introduce a per-cluster "Helm validation policy" made up of:
namefield, one ofDefault(current ReVal validation rules apply) orUnrestricted(only image validation is performed, no template validation), andallowedExtraKubernetesTypeslist (group/version/kind/resource) describingadditional CRD-backed types the cluster's charts may include.
Clusters register with a policy at creation time (immutable after registration, since
loosening it later could be a security or compatibility risk). Users deploying a
function or task can request required extra types and/or a policy name as cluster
targeting fields; only clusters matching are selected, and
Unrestrictedclusters areonly selected when explicitly requested. The Helm ReVal service accepts a list of
policies to evaluate in a single request (instead of one request per cluster/policy) so
network- and validation-bound work is done once, and returns per-policy validity plus
errors. On the compute plane, the NVCA Operator receives the cluster's policy, updates
the miniservice controller's RBAC (Role) to allow the extra types, and passes the policy
to NVCA via a ConfigMap so installed CRD/policy mismatches can be detected at NVCA
startup instead of failing mid-deployment.
Default behavior for all existing clusters remains unchanged (
Defaultpolicy, noextra types) so this is fully backward compatible and opt-in.
Describe alternatives you've considered
Helm ReVal: rejected for now because it adds complexity and requires security review
since customer data may include registry credentials; batching multiple policies into
one ReVal request avoids duplicate chart downloads without caching.
itself: rejected because Kubernetes Roles must be created at operator install/upgrade
time, so
allowedExtraKubernetesTypesmust be explicit operator Helm chartconfiguration rather than derived automatically.
effort, tracked separately.
Additional context
Implementation has already started based on an internal design document and is at
different stages of completion per service. TODO list below, organized by service,
with completed items checked off based on the current state of this repository.
Helm ReVal
/v1/validateto accept avalidationPolicieslist and return per-policyvalid/invalid + errors, keyed by request-supplied UUID
/v1/renderto accept a singlevalidationPolicyKubernetes type
JWT-based authn/z via the control-plane auth provider
for ICMS instance scheduling path)
ICMS (formerly SIS)
helmValidationPolicyon cluster registration/update endpoints; persist ashelm_validation_policy_name+allowed_extra_kubernetes_typesin the clusterCassandra tables; default all clusters to
Defaultwith no extra typeshelmValidationPolicyon all endpoints that return cluster datanamechanges after registration; only allowallowedExtraKubernetesTypesupdates/v1/validatecall from NVCF/NVCT into ICMS, called once perrequest with the deduplicated set of policies across filtered clusters
LaunchSpecification.HelmValidationPolicy(required typesmust be a subset of the cluster's allowed types; only select non-
Defaultclusters when explicitly requested)
warningsresponse field for clusters filtered out due to policy mismatchhelmreval:validatetoken scope to the ICMS OIDC clientNVCF (cloud-functions)
helmValidationPolicy(name+extraKubernetesTypes) on the functiondeployment specification, reject it for container-based functions
helmValidationPolicyto ICMS via the launch specificationNVCT (cloud-tasks)
helmValidationPolicy(name+extraKubernetesTypes) on the task GPUspecification, reject it for container-based tasks
helmValidationPolicyto ICMS via the launch specificationNVCA / NVCA Operator
allowedExtraKubernetesTypesto NVCA Operator Helm values; validate againstthe configured cluster policy
nvcaRole and to themini-service-restrictionsRole embedded in the
nvca-miniservice-rbacConfigMapNVCFBackendobject(
spec.clusterConfig.helmValidationPolicy)agent-configConfigMap (config.yamlkey), triggering an NVCA rollout on change - reuses the existing agent config
delivery mechanism rather than a new ConfigMap
allowedExtraKubernetesTypesAPI resource ispresent on the cluster; report unhealthy and exit if missing (CRD/policy mismatch
prevention)
CLI (nvcf-cli)
--validation-policyflag tonvcf-cli task create(
cmd/task.go,internal/client/tasks.go); todayhelmValidationPolicyis onlyreachable via the
--input-fileJSON payload, not a CLI flag--validation-policyflag tonvcf-cli deploy create/deploy update(cmd/deploy.go) and the corresponding deployment-spec client DTOSecurity
Defaultwith no allowed extra types;existing deployments are unaffected; opt-in required from both cluster
owners/operators (to loosen a cluster) and workload deployers (to target an
Unrestrictedcluster)By submitting this issue, you agree to follow our code of conduct and our contributing guidelines.