Install the JFrog Crossplane Providers

Install Crossplane, create the registry pull Secret, and deploy the JFrog Crossplane providers.

Install Crossplane and the JFrog Crossplane providers on your Kubernetes cluster. At the end of this procedure, each provider you install reports INSTALLED=True and HEALTHY=True.

Prerequisites

Make sure you have the following before you start.

RequirementDetails
KubernetesYou need permission to install CustomResourceDefinitions (CRDs) and cluster role-based access control (RBAC).
HelmHelm 3.
CrossplaneVersion 2.0 or later. Validated with the Crossplane Helm chart 2.4.2.
JFrog PlatformSaaS or self-managed. The JFrog Platform must be reachable from the provider pods.
JFrog access tokenThe token needs permissions for the resources you manage. Use an admin token for platform-wide configuration. API keys and passwords aren't supported. You use the token when you configure credentials.
Registry credentialsCredentials for releases-authenticated-docker.jfrog.io. The registry is authenticated. Step 1: Create the Registry Pull Secret shows how to store these credentials in a Secret.

Install Crossplane

Install Crossplane with Helm in the crossplane-system namespace:

helm repo add crossplane-stable https://charts.crossplane.io/stable && helm repo update
helm upgrade --install crossplane crossplane-stable/crossplane \
  --namespace crossplane-system --create-namespace --version 2.4.2 --wait
kubectl -n crossplane-system get pods      # crossplane and crossplane-rbac-manager Running

Expected result: The crossplane and crossplane-rbac-manager pods are Running.

Step 1: Create the Registry Pull Secret

All provider packages and images come from the authenticated registry releases-authenticated-docker.jfrog.io.

  1. Create a pull Secret with the registry credentials issued to you by JFrog:

    kubectl -n crossplane-system create secret docker-registry jfrog-registry \
      --docker-server=releases-authenticated-docker.jfrog.io \
      --docker-username="<your-registry-username>" \
      --docker-password="<your-registry-password-or-token>"

    Replace the following:

    • <your-registry-username>: The registry username issued to you by JFrog.
    • <your-registry-password-or-token>: The registry password or token issued to you by JFrog.

Step 2: Deploy the DeploymentRuntimeConfig and Providers

  1. Apply the following DeploymentRuntimeConfig and Provider manifest:

    apiVersion: pkg.crossplane.io/v1beta1
    kind: DeploymentRuntimeConfig
    metadata:
      name: jfrog-providers
    spec:
      deploymentTemplate:
        spec:
          selector: {}                       # required
          template:
            spec:
              imagePullSecrets:
                - name: jfrog-registry
              containers:
                - name: package-runtime      # must be exactly this name
                  args: ["--poll=10m"]       # optional flags, see "Provider flags"
                  resources:
                    requests: {cpu: 100m, memory: 256Mi}
                    limits: {memory: 1Gi}
    ---
    apiVersion: pkg.crossplane.io/v1
    kind: Provider
    metadata:
      name: provider-artifactory
    spec:
      package: releases-authenticated-docker.jfrog.io/jfrog/crossplane-provider-artifactory:v0.0.1
      packagePullSecrets: [{name: jfrog-registry}]
      runtimeConfigRef: {name: jfrog-providers}

    The args field takes optional provider flags. For the flags used to tune the providers, see Provider Flags in Tune the Providers.

  2. Repeat the Provider definition for provider-xray, provider-project, and provider-platform. Change the name and the image path for each provider:

    • releases-authenticated-docker.jfrog.io/jfrog/crossplane-provider-<xray|project|platform>:v0.0.1

Follow these guidelines when you deploy providers:

  • Install only the providers you need. The providers operate independently.
  • Always pin a specific version tag.
  • Allocate more memory to provider-artifactory when you manage many objects. It includes over 430 CRDs.

Step 3: Check Provider Health

Run the following commands to check the providers:

kubectl get providers            # INSTALLED=True, HEALTHY=True
kubectl -n crossplane-system get pods
kubectl wait --for=condition=Healthy provider --all --timeout=10m

Expected result: Each provider reports INSTALLED=True and HEALTHY=True.

If a provider doesn't become healthy, see Troubleshoot the JFrog Crossplane Providers.

Next Steps


Did this page help you?