ARC Helm Chart¶
This Helm chart deploys Artifact Conduit (ARC) - a Kubernetes-native system for artifact procurement and transfer across security zones with automated scanning and validation.
Prerequisites¶
- Kubernetes 1.28+
- Helm 3.8+
- cert-manager (for TLS certificate management)
- Argo Workflows (for artifact processing workflows)
Installation¶
Install from OCI Registry¶
ARC Helm charts are published to GitHub Container Registry as OCI artifacts.
# Pull and install the latest version
helm install arc oci://ghcr.io/opendefensecloud/charts/arc \
--namespace arc-system \
--create-namespace
# Install a specific version
helm install arc oci://ghcr.io/opendefensecloud/charts/arc --version 0.1.0 \
--namespace arc-system \
--create-namespace
# Install with custom values
helm install arc oci://ghcr.io/opendefensecloud/charts/arc \
--namespace arc-system \
--create-namespace \
-f custom-values.yaml
Install from Source¶
For development or testing, install directly from the source repository:
# Clone the repository
git clone https://github.com/opendefensecloud/artifact-conduit.git
cd artifact-conduit
# Install from local chart
helm install arc ./charts/arc --namespace arc-system --create-namespace
Install cert-manager (if not already installed)¶
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.yaml
Install Argo Workflows (if not already installed)¶
kubectl create namespace argo
kubectl apply -n argo -f https://github.com/argoproj/argo-workflows/releases/latest/download/install.yaml
Components¶
The chart deploys three main components:
- API Server - Extension API server providing custom resources
- Controller Manager - Reconciles Order and ArtifactWorkflow resources
- etcd - Dedicated storage backend for the API server
Configuration¶
Global Parameters¶
| Parameter | Description | Default |
|---|---|---|
global.imagePullSecrets |
Global image pull secrets | [] |
global.storageClass |
Global storage class | "" |
namespaceOverride |
Override namespace | "" |
createNamespace |
Create namespace if it doesn't exist | false |
API Server Parameters¶
| Parameter | Description | Default |
|---|---|---|
apiserver.enabled |
Enable API Server | true |
apiserver.replicaCount |
Number of replicas | 1 |
apiserver.image.repository |
Image repository | ghcr.io/opendefensecloud/arc-apiserver |
apiserver.image.tag |
Image tag | Chart appVersion |
apiserver.resources.limits.cpu |
CPU limit | 500m |
apiserver.resources.limits.memory |
Memory limit | 128Mi |
apiserver.service.type |
Service type | ClusterIP |
apiserver.service.port |
Service port | 443 |
Controller Manager Parameters¶
| Parameter | Description | Default |
|---|---|---|
controller.enabled |
Enable Controller Manager | true |
controller.replicaCount |
Number of replicas | 1 |
controller.image.repository |
Image repository | ghcr.io/opendefensecloud/arc-controller-manager |
controller.image.tag |
Image tag | Chart appVersion |
controller.args.leaderElect |
Enable leader election for HA | false |
controller.metrics.enabled |
Enable metrics endpoint | false |
controller.metrics.serviceMonitor.enabled |
Create ServiceMonitor for Prometheus | false |
etcd Parameters¶
| Parameter | Description | Default |
|---|---|---|
etcd.enabled |
Enable etcd | true |
etcd.replicaCount |
Number of replicas | 1 |
etcd.image.repository |
Image repository | quay.io/coreos/etcd |
etcd.image.tag |
Image tag | v3.6.6 |
etcd.persistence.enabled |
Enable persistence | true |
etcd.persistence.size |
Volume size | 1Gi |
etcd.persistence.storageClass |
Storage class | "" |
cert-manager Parameters¶
| Parameter | Description | Default |
|---|---|---|
certManager.enabled |
Enable cert-manager integration | true |
certManager.issuer.kind |
Issuer kind (Issuer or ClusterIssuer) | Issuer |
certManager.issuer.selfSigned |
Use self-signed issuer | true |
certManager.certificate.duration |
Certificate duration | 2160h |
Examples¶
Basic Installation¶
helm install arc oci://ghcr.io/opendefensecloud/charts/arc \
--namespace arc-system \
--create-namespace
High Availability Setup¶
# ha-values.yaml
controller:
replicaCount: 3
args:
leaderElect: true
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app.kubernetes.io/component: controller-manager
topologyKey: kubernetes.io/hostname
etcd:
replicaCount: 3
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app.kubernetes.io/component: etcd
topologyKey: kubernetes.io/hostname
helm install arc oci://ghcr.io/opendefensecloud/charts/arc -f ha-values.yaml
Enable Metrics with Prometheus¶
# metrics-values.yaml
controller:
metrics:
enabled: true
serviceMonitor:
enabled: true
additionalLabels:
prometheus: kube-prometheus
helm install arc oci://ghcr.io/opendefensecloud/charts/arc -f metrics-values.yaml
Custom Storage Class¶
# storage-values.yaml
global:
storageClass: fast-ssd
etcd:
persistence:
size: 10Gi
helm install arc oci://ghcr.io/opendefensecloud/charts/arc -f storage-values.yaml
Using External etcd¶
# external-etcd-values.yaml
etcd:
enabled: false
apiserver:
args:
etcdServers: "http://external-etcd:2379"
helm install arc oci://ghcr.io/opendefensecloud/charts/arc -f external-etcd-values.yaml
Upgrading¶
# Upgrade to the latest version
helm upgrade arc oci://ghcr.io/opendefensecloud/charts/arc --namespace arc-system
# Upgrade to a specific version
helm upgrade arc oci://ghcr.io/opendefensecloud/charts/arc --version 0.2.0 --namespace arc-system
Uninstalling¶
helm uninstall arc --namespace arc-system
Post-Installation¶
After installing ARC, you need to:
-
Verify Installation
kubectl get all -n arc-system kubectl get apiservice v1alpha1.arc.opendefense.cloud -
Create WorkflowTemplates Deploy Argo WorkflowTemplates that define how artifacts are processed. See examples/oci/cluster-workflow-template.yaml
-
Create ArtifactTypes Define supported artifact types (OCI images, Helm charts, etc.)
kubectl apply -f examples/oci/artifact-type.yaml -
Create Endpoints Define source and destination registries/repositories
kubectl apply -f examples/oci/order-and-endpoints.yaml -
Submit Orders Create Order resources to transfer artifacts
kubectl apply -f examples/order.yaml
Troubleshooting¶
API Server not ready¶
Check certificate issuance:
kubectl get certificate -n arc-system
kubectl describe certificate arc-apiserver-cert -n arc-system
Check API Server logs:
kubectl logs -n arc-system -l app.kubernetes.io/component=apiserver
Controller Manager issues¶
Check controller logs:
kubectl logs -n arc-system -l app.kubernetes.io/component=controller-manager -f
Check RBAC permissions:
kubectl auth can-i --as=system:serviceaccount:arc-system:arc-controller-manager --list
etcd connection issues¶
Check etcd status:
kubectl get statefulset -n arc-system
kubectl logs -n arc-system arc-etcd-0
Test connectivity:
kubectl run -it --rm debug --image=busybox --restart=Never -- wget -O- http://arc-etcd:2379/health
Migration from Kustomize¶
If you're currently using Kustomize to deploy ARC:
-
Export your current configuration:
kubectl get deployment,service,configmap -n arc-system -o yaml > current-config.yaml -
Map Kustomize overlays to Helm values:
- Image overrides →
*.image.repositoryand*.image.tag - Resource patches →
*.resources -
Replica counts →
*.replicaCount -
Create a values file with your customizations
-
Test with dry-run:
helm install arc oci://ghcr.io/opendefensecloud/charts/arc --dry-run --debug -f your-values.yaml -
Uninstall Kustomize deployment and install Helm chart
Contributing¶
Contributions are welcome! Please see the Contributing Guide.
License¶
Apache-2.0