Cloud Provider Credentials Management in CAPI#
Cloud provider credentials in Cluster API (CAPI) environments are managed through objects in the management cluster.
Credential, ClusterIdentity, and Secret (related to ClusterIdentity) objects handle credential storage and management, while a dedicated ConfigMap object is used as a template to render configuration into child clusters.
Configuration Patterns#
The configuration follows two patterns:
- ClusterIdentity Pattern
- Uses a
ClusterIdentityresource that defines provider identity configuration - References a
Secretwith credentials -
Used by
AzureandvSpherein-tree providers -
Source Secret Pattern
- Uses only a
SecretwithoutClusterIdentity Secretcontains all cloud configuration data- Used by
OpenStackin-tree provider
In both cases ConfigMap with template code is used to render configuration into child clusters.
Credential Resource#
The Credential resource provides an abstraction layer by either:
- Referencing a
ClusterIdentitythroughidentityRef - Directly referencing a
Secret, depending on the pattern used
Template ConfigMap#
- Marked with
projectsveltos.io/template: "true"annotation - Contains Go template code for generating child cluster resources via the Sveltos templating system
- Template processing accesses cluster objects through:
- Built-in Sveltos variables (
Cluster,InfrastructureProvider) getResourcefunction for additionally exposed objects (InfrastructureProviderIdentity,InfrastructureProviderIdentitySecret)- The object name needs to follow a predictable naming pattern, such as the
ClusterIdentityobject (referenced viaidentityRefin theCredentialresource) name +-resource-templatesuffix. It must also be placed in same Namespace as theClusterIdentityobject it references
Templating System#
The templating system leverages:
Examples#
Provider-specific examples are available in *.credentials.yaml files here.
Let's take Azure provider as an example azure-credentials.yaml
ClusterIdentitySecret(related toClusterIdentity)CredentialConfigMap
Note
These examples assume the ConfigMap is included in a template. To use these examples directly via kubectl, please replace $$
(double dollar signs) with $ (single dollar sign)
Provider Registration#
Providers are registered through YAML configuration files mounted into a predefined path in the manager container at startup using ConfigMap.
Configuration Examples#
Provider configuration examples can be found here
Let's take Azure provider as an example azure.yml, as seen, the definition is straightforward.