<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Guides on Crossplane</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/</link><description>Recent content in Guides on Crossplane</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 01 Jan 0001 00:00:00 +0000</lastBuildDate><atom:link href="https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/index.xml" rel="self" type="application/rss+xml"/><item><title>Disaster Recovery with Crossplane</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/disaster-recovery/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/disaster-recovery/</guid><description>&lt;p>AWS wrote a guide covering disaster recovery with Crossplane. The guide covers
using Crossplane to provision resources and Velero for Kubernetes backup and
recovery.&lt;/p>
&lt;p>&lt;a href="https://aws.amazon.com/blogs/opensource/disaster-recovery-when-using-crossplane-for-infrastructure-provisioning-on-aws/">Read the guide on AWS&lt;/a>.&lt;/p></description></item><item><title>Metrics</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/metrics/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/metrics/</guid><description>&lt;p>Crossplane produces &lt;a href="https://prometheus.io/docs/introduction/overview/#what-are-metrics">Prometheus style metrics&lt;/a> for effective monitoring and alerting in your environment.
These metrics are essential for helping to identify and resolve potential issues.
This page offers explanations of all these metrics gathered from Crossplane.
Understanding these metrics helps you maintain the health and performance of your resources.
Please note that this document focuses on Crossplane specific metrics and doesn&amp;rsquo;t cover standard Go metrics.&lt;/p>
&lt;p>To enable the export of metrics it&amp;rsquo;s necessary to configure the &lt;code>--set metrics.enabled=true&lt;/code> option in the &lt;a href="https://github.com/crossplane/crossplane/blob/main/cluster/charts/crossplane/README.md#configuration">helm chart&lt;/a>.&lt;/p></description></item><item><title>Function Patch and Transform</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/function-patch-and-transform/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/function-patch-and-transform/</guid><description>&lt;p>Function Patch and Transform allows you to write a Composition that specifies
managed resource (MR) templates, and uses &amp;ldquo;patch and transform&amp;rdquo; operations to
fill them out. Crossplane fills the templates out with values copied from a
claim or composite resource (XR).&lt;/p>
&lt;p>A &lt;a href="#create-a-patch">patch&lt;/a> copies a value from one resource and &lt;em>patches&lt;/em> it
onto another resource. A &lt;a href="#transform-a-patch">transform&lt;/a> modifies the values
before applying the patch.&lt;/p>
&lt;div class="admonition tip d-flex flex-column mx-4 p-0">
&lt;div class="admonition-title">
&lt;svg class="bi flex-shrink-0" role="img" aria-label="tip:">&lt;use
xlink:href="#check"/>&lt;/svg>
&lt;span class="ps-1">Tip&lt;/span>
&lt;/div>
&lt;div class="admonition-content">
&lt;p>All Compositions used Patch and Transform before Crossplane added
support for composition functions.&lt;/p></description></item><item><title>Releasing Crossplane Extensions</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/extensions-release-process/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/extensions-release-process/</guid><description>&lt;h2 id="distributing-crossplane-extensions">Distributing Crossplane extensions &lt;a class="anchor-link" id="distributing-crossplane-extensions" href="#distributing-crossplane-extensions" aria-label="Link to this section: Distributing Crossplane extensions">&lt;/a>&lt;/h2>
&lt;p>Crossplane provides a packaging specification for extending a Crossplane
instance with APIs and business logic for composing resources.&lt;/p>
&lt;p>Building a Crossplane extension involves creating OCI images in the &lt;a href="https://github.com/crossplane/crossplane/blob/main/contributing/specifications/xpkg.md">xpkg&lt;/a>
format. Authors and maintainers of Crossplane extensions must push their
packages to an OCI registry before users can reference and use them.&lt;/p>
&lt;p>The release process for Crossplane extensions grew organically in the community
and developed its own conventions and common configurations. Authors of these
extensions should follow this guide to enable automation for building
and pushing their packages as part of their git workflow.&lt;/p></description></item><item><title>Write a Composition Function in Go</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/write-a-composition-function-in-go/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/write-a-composition-function-in-go/</guid><description>&lt;p>Composition functions (or just functions, for short) are custom programs that
template Crossplane resources. Crossplane calls composition functions to
determine what resources it should create when you create a composite resource
(XR). Read the
&lt;a href="https://deploy-preview-1077--crossplane.netlify.app/v1.20/concepts/compositions/">concepts&lt;/a>
page to learn more about composition functions.&lt;/p>
&lt;p>You can write a function to template resources using a general purpose
programming language. Using a general purpose programming language allows a
function to use advanced logic to template resources, like loops and
conditionals. This guide explains how to write a composition function in
&lt;a href="https://go.dev">Go&lt;/a>.&lt;/p></description></item><item><title>Write a Composition Function in Python</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/write-a-composition-function-in-python/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/write-a-composition-function-in-python/</guid><description>&lt;p>Composition functions (or just functions, for short) are custom programs that
template Crossplane resources. Crossplane calls composition functions to
determine what resources it should create when you create a composite resource
(XR). Read the
&lt;a href="https://deploy-preview-1077--crossplane.netlify.app/v1.20/concepts/compositions/">concepts&lt;/a>
page to learn more about composition functions.&lt;/p>
&lt;p>You can write a function to template resources using a general purpose
programming language. Using a general purpose programming language allows a
function to use advanced logic to template resources, like loops and
conditionals. This guide explains how to write a composition function in
&lt;a href="https://python.org">Python&lt;/a>.&lt;/p></description></item><item><title>Import Existing Resources</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/import-existing-resources/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/import-existing-resources/</guid><description>&lt;p>If you have resources that are already provisioned in a Provider,
you can import them as managed resources and let Crossplane manage them.
A managed resource&amp;rsquo;s &lt;a href="https://deploy-preview-1077--crossplane.netlify.app/v1.20/concepts/managed-resources/#managementpolicies">&lt;code>managementPolicies&lt;/code>&lt;/a>
field enables importing external resources into Crossplane.&lt;/p>
&lt;p>Crossplane can import resources either &lt;a href="#import-resources-manually">manually&lt;/a>
or &lt;a href="#import-resources-automatically">automatically&lt;/a>.&lt;/p>
&lt;h2 id="import-resources-manually">Import resources manually &lt;a class="anchor-link" id="import-resources-manually" href="#import-resources-manually" aria-label="Link to this section: Import resources manually">&lt;/a>&lt;/h2>
&lt;p>Crossplane can discover and import existing Provider resources by matching the
&lt;code>crossplane.io/external-name&lt;/code> annotation in a managed resource.&lt;/p>
&lt;p>To import an existing external resource in a Provider, create a new managed
resource with the &lt;code>crossplane.io/external-name&lt;/code> annotation. Set the annotation
value to the name of the resource in the Provider.&lt;/p></description></item><item><title>Crossplane with Workload Identity</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/crossplane-with-workload-identity/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/crossplane-with-workload-identity/</guid><description>&lt;p>When running Crossplane on managed Kubernetes clusters (EKS, AKS, GKE), you can use Kubernetes Workload Identity to grant Crossplane access to pull packages from private cloud container registries. This allows Crossplane to install providers, functions, and configurations from registries like AWS ECR, Azure ACR, and Google Artifact Registry without managing static credentials.&lt;/p>
&lt;div class="admonition important d-flex flex-column mx-4 p-0">
&lt;div class="admonition-title">
&lt;svg class="bi flex-shrink-0" role="img" aria-label="important:">&lt;use
xlink:href="#exclamation"/>&lt;/svg>
&lt;span class="ps-1">Important&lt;/span>
&lt;/div>
&lt;div class="admonition-content">
&lt;p>This guide configures the &lt;strong>Crossplane package manager&lt;/strong> to pull packages from private registries. Packages reference container images that run as separate pods (providers and functions).&lt;/p></description></item><item><title>Change Logs</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/change-logs/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/change-logs/</guid><description>&lt;p>The &amp;ldquo;change logs&amp;rdquo; feature is designed to help users of Crossplane Providers to
understand what changes a provider is making to the resources it&amp;rsquo;s managing.
Whenever a provider creates, updates, or deletes a managed resource, an entry
explaining the details of the change is recorded in the provider&amp;rsquo;s change log.&lt;/p>
&lt;p>Change logs are important for awareness of the changes that a provider is
making to its managed resources. Due to the nature of Crossplane&amp;rsquo;s active
reconciliation, it&amp;rsquo;s possible for a provider to make changes to managed
resources without any user interaction. Consider the scenario when someone
updates a resource outside of Crossplane, for example via the AWS console or
&lt;code>gcloud&lt;/code> CLI. When Crossplane detects this configuration drift it will
enforce its source of truth to eventually correct this unexpected change
without any user interaction.&lt;/p></description></item><item><title>Vault as an External Secret Store</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/vault-as-secret-store/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/vault-as-secret-store/</guid><description>&lt;p>This guide walks through the steps required to configure Crossplane and
its Providers to use &lt;a href="https://www.vaultproject.io/">Vault&lt;/a> as an &lt;a href="https://github.com/crossplane/crossplane/blob/main/design/design-doc-external-secret-stores.md">External Secret Store&lt;/a> (&lt;code>ESS&lt;/code>) with &lt;a href="https://github.com/crossplane-contrib/ess-plugin-vault">ESS Plugin Vault&lt;/a>.&lt;/p>
&lt;div class="admonition warning d-flex flex-column mx-4 p-0">
&lt;div class="admonition-title">
&lt;svg class="bi flex-shrink-0" role="img" aria-label="warning:">&lt;use
xlink:href="#fire"/>&lt;/svg>
&lt;span class="ps-1">Warning&lt;/span>
&lt;/div>
&lt;div class="admonition-content">
&lt;p>External Secret Stores are an alpha feature.&lt;/p>
&lt;p>They&amp;rsquo;re not recommended for production use. Crossplane disables External Secret
Stores by default.&lt;/p>
&lt;/div>
&lt;/div>
&lt;p>Crossplane uses sensitive information including Provider credentials, inputs to
managed resources and connection details.&lt;/p>
&lt;p>The &lt;a href="https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/vault-injection/">Vault credential injection guide&lt;/a> details
using Vault and Crossplane for Provider credentials.&lt;/p></description></item><item><title>Vault Credential Injection</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/vault-injection/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/vault-injection/</guid><description>&lt;blockquote>
&lt;p>This guide is adapted from the &lt;a href="https://learn.hashicorp.com/tutorials/vault/kubernetes-minikube">Vault on Minikube&lt;/a> and &lt;a href="https://learn.hashicorp.com/tutorials/vault/kubernetes-sidecar">Vault Kubernetes
Sidecar&lt;/a> guides.&lt;/p>&lt;/blockquote>
&lt;p>Most Crossplane providers support supplying credentials from at least the
following sources:&lt;/p>
&lt;ul>
&lt;li>Kubernetes Secret&lt;/li>
&lt;li>Environment Variable&lt;/li>
&lt;li>Filesystem&lt;/li>
&lt;/ul>
&lt;p>A provider may optionally support additional credentials sources, but the common
sources cover a wide variety of use cases. One specific use case that&amp;rsquo;s popular
among organizations that use &lt;a href="https://www.vaultproject.io/">Vault&lt;/a> for secrets management is using a sidecar
to inject credentials into the filesystem. This guide will demonstrate how to
use the &lt;a href="https://learn.hashicorp.com/tutorials/vault/kubernetes-sidecar">Vault Kubernetes Sidecar&lt;/a> to provide credentials for &lt;a href="https://github.com/crossplane-contrib/provider-upjet-gcp">provider-gcp&lt;/a>
and &lt;a href="https://github.com/crossplane-contrib/provider-upjet-aws">provider-aws&lt;/a>.&lt;/p></description></item><item><title>Multi-Tenant Crossplane</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/multi-tenant/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/multi-tenant/</guid><description>&lt;p>This guide describes how to use Crossplane effectively in multi-tenant
environments by utilizing Kubernetes primitives and compatible policy
enforcement projects in the cloud native ecosystem.&lt;/p>
&lt;h2 id="summary">Summary &lt;a class="anchor-link" id="summary" href="#summary" aria-label="Link to this section: Summary">&lt;/a>&lt;/h2>
&lt;p>Infrastructure operators in multi-tenant Crossplane environments typically
utilize composition and Kubernetes RBAC to define lightweight, standardized
policies that dictate what level of self-service developers are given when
requesting infrastructure. This is primarily achieved through exposing abstract
resource types at the namespace scope, defining &lt;code>Roles&lt;/code> for teams and
individuals within that namespace, and patching the &lt;code>spec.providerConfigRef&lt;/code> of
the underlying managed resources so that they use a specific &lt;code>ProviderConfig&lt;/code>
and credentials when provisioned from each namespace. Larger organizations, or
those with more complex environments, may choose to incorporate third-party
policy engines, or scale to multiple Crossplane clusters. The following sections
describe each of these scenarios in greater detail.&lt;/p></description></item><item><title>Configuring Crossplane with Argo CD</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/crossplane-with-argo-cd/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/crossplane-with-argo-cd/</guid><description>&lt;p>&lt;a href="https://argoproj.github.io/cd/">Argo CD&lt;/a> and &lt;a href="https://crossplane.io">Crossplane&lt;/a>
are a great combination. Argo CD provides GitOps while Crossplane turns any Kubernetes
cluster into a Universal Control Plane for all of your resources. Configuration details are
required in order for the two to work together properly.
This doc will help you understand these requirements. It is recommended to use
Argo CD version 2.4.8 or later with Crossplane.&lt;/p>
&lt;p>Argo CD synchronizes Kubernetes resource manifests stored in a Git repository
with those running in a Kubernetes cluster (GitOps). Argo CD has different ways to configure
how it tracks resources. With Crossplane, you need to configure Argo CD
to use Annotation based resource tracking. See the &lt;a href="https://argo-cd.readthedocs.io/en/latest/user-guide/resource_tracking/">Argo CD docs&lt;/a> for additional detail.&lt;/p></description></item><item><title>Self-Signed CA Certs</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/self-signed-ca-certs/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/self-signed-ca-certs/</guid><description>&lt;blockquote>
&lt;p>Using self-signed certificates isn&amp;rsquo;t advised in production, it&amp;rsquo;s
recommended to only use self-signed certificates for testing.&lt;/p>&lt;/blockquote>
&lt;p>When Crossplane loads Configuration and Provider Packages from private
registries, it must be configured to trust the CA and Intermediate certs.&lt;/p>
&lt;p>Crossplane needs to be installed via the Helm chart with the
&lt;code>registryCaBundleConfig.name&lt;/code> and &lt;code>registryCaBundleConfig.key&lt;/code> parameters
defined. See &lt;a href="https://deploy-preview-1077--crossplane.netlify.app/v1.20/software/install/">Install Crossplane&lt;/a>.&lt;/p>
&lt;h2 id="configure">Configure &lt;a class="anchor-link" id="configure" href="#configure" aria-label="Link to this section: Configure">&lt;/a>&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>Create a CA Bundle (A file containing your Root and Intermediate
certificates in a specific order). This can be done with any text editor or
from the command line, so long as the resulting file contains all required crt
files in the proper order. In many cases, this will be either a single
self-signed Root CA crt file, or an Intermediate crt and Root crt file. The
order of the crt files should be from lowest to highest in signing order.
For example, if you have a chain of two certificates below your Root
certificate, you place the bottom level Intermediate cert at the beginning of
the file, then the Intermediate cert that singed that cert, then the Root cert
that signed that cert.&lt;/p></description></item><item><title>Troubleshoot Crossplane</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/troubleshoot-crossplane/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/guides/troubleshoot-crossplane/</guid><description>&lt;h2 id="requested-resource-not-found">Requested Resource Not Found &lt;a class="anchor-link" id="requested-resource-not-found" href="#requested-resource-not-found" aria-label="Link to this section: Requested Resource Not Found">&lt;/a>&lt;/h2>
&lt;p>If you use the Crossplane CLI to install a &lt;code>Provider&lt;/code> or
&lt;code>Configuration&lt;/code> (for example, &lt;code>crossplane xpkg install provider xpkg.crossplane.io/crossplane-contrib/provider-aws-s3:v1.21.1&lt;/code>) and get &lt;code>the server could not find the requested resource&lt;/code> error, more often than not, that&amp;rsquo;s an
indicator that the Crossplane CLI you&amp;rsquo;re using is outdated. In other words
some Crossplane API has been graduated from alpha to beta or stable and the old
plugin isn&amp;rsquo;t aware of this change.&lt;/p></description></item></channel></rss>