<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Getting Started on Crossplane</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/</link><description>Recent content in Getting Started 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/getting-started/index.xml" rel="self" type="application/rss+xml"/><item><title>Crossplane Introduction</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/introduction/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/introduction/</guid><description>&lt;p>Crossplane connects your Kubernetes cluster to external,
non-Kubernetes resources, and allows platform teams to build custom Kubernetes
APIs to consume those resources.&lt;/p>
&lt;!-- vale gitlab.SentenceLength = NO -->
&lt;p>Crossplane creates Kubernetes
&lt;a href="https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/">Custom Resource Definitions&lt;/a>
(&lt;code>CRDs&lt;/code>) to represent the external resources as native
&lt;a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/">Kubernetes objects&lt;/a>.
As native Kubernetes objects, you can use standard commands like &lt;code>kubectl create&lt;/code>
and &lt;code>kubectl describe&lt;/code>. The full
&lt;a href="https://kubernetes.io/docs/reference/using-api/">Kubernetes API&lt;/a> is available
for every Crossplane resource.&lt;/p>
&lt;!-- vale gitlab.SentenceLength = YES -->
&lt;p>Crossplane also acts as a
&lt;a href="https://kubernetes.io/docs/concepts/architecture/controller/">Kubernetes Controller&lt;/a>
to watch the state of the external resources and provide state enforcement. If
something modifies or deletes a resource outside of Kubernetes, Crossplane reverses
the change or recreates the deleted resource.&lt;/p></description></item><item><title>AWS Quickstart</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-aws/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-aws/</guid><description>&lt;p>Connect Crossplane to AWS to create and manage cloud resources from Kubernetes
with&lt;br>
&lt;a href="https://github.com/crossplane-contrib/provider-upjet-aws">provider-upjet-aws&lt;/a>.&lt;/p>
&lt;p>This guide is in two parts:&lt;/p>
&lt;ul>
&lt;li>Part 1 walks through installing Crossplane, configuring the provider to
authenticate to AWS and creating a &lt;em>Managed Resource&lt;/em> in AWS directly from your
Kubernetes cluster. This shows Crossplane can communicate with AWS.&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-aws-part-2/">Part 2&lt;/a> shows how to build and access a
custom API with Crossplane.&lt;/li>
&lt;/ul>
&lt;h2 id="prerequisites">Prerequisites &lt;a class="anchor-link" id="prerequisites" href="#prerequisites" aria-label="Link to this section: Prerequisites">&lt;/a>&lt;/h2>
&lt;p>This quickstart requires:&lt;/p></description></item><item><title>Azure Quickstart</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-azure/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-azure/</guid><description>&lt;p>Connect Crossplane to Azure to create and manage cloud resources from Kubernetes
with&lt;br>
&lt;a href="https://github.com/crossplane-contrib/provider-upjet-azure">provider-upjet-azure&lt;/a>.&lt;/p>
&lt;p>This guide is in two parts:&lt;/p>
&lt;ul>
&lt;li>Part 1 walks through installing Crossplane, configuring the provider to
authenticate to Azure and creating a &lt;em>Managed Resource&lt;/em> in Azure directly from
your Kubernetes cluster. This shows Crossplane can communicate with Azure.&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-azure-part-2/">Part 2&lt;/a> shows how to build and access a
custom API with Crossplane.&lt;/li>
&lt;/ul>
&lt;h2 id="prerequisites">Prerequisites &lt;a class="anchor-link" id="prerequisites" href="#prerequisites" aria-label="Link to this section: Prerequisites">&lt;/a>&lt;/h2>
&lt;p>This quickstart requires:&lt;/p></description></item><item><title>AWS Quickstart Part 2</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-aws-part-2/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-aws-part-2/</guid><description>&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 is part 2 of a series.&lt;/p>
&lt;p>&lt;a href="https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-aws/">&lt;strong>Part 1&lt;/strong>&lt;/a> covers
to installing Crossplane and connect your Kubernetes cluster to AWS.&lt;/p>
&lt;/div>
&lt;/div>
&lt;p>This guide walks you through building and accessing a custom API with Crossplane.&lt;/p>
&lt;h2 id="prerequisites">Prerequisites &lt;a class="anchor-link" id="prerequisites" href="#prerequisites" aria-label="Link to this section: Prerequisites">&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Complete &lt;a href="https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-aws/">quickstart part 1&lt;/a> connecting Kubernetes
to AWS.&lt;/li>
&lt;li>an AWS account with permissions to create an AWS S3 storage bucket and a
DynamoDB instance&lt;/li>
&lt;/ul>
&lt;div class="accordion mb-3" id="skip-part-1-and-just-get-started-1823-Parent">
&lt;div class="accordion-item">
&lt;h2 class="accordion-header" id="skip-part-1-and-just-get-started-1823">
&lt;button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#skip-part-1-and-just-get-started-1823-Content" aria-expanded="false" aria-controls="skip-part-1-and-just-get-started-1823-Content">
Skip part 1 and just get started
&lt;/button>
&lt;/h2>
&lt;div id="skip-part-1-and-just-get-started-1823-Content" class="accordion-collapse collapse" aria-labelledby="skip-part-1-and-just-get-started-1823" data-bs-parent="#skip-part-1-and-just-get-started-1823-Parent">
&lt;div class="accordion-body rounded-bottom">
&lt;ol>
&lt;li>Add the Crossplane Helm repository and install Crossplane&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="ln" id="hl-0-1">&lt;a class="lnlinks" href="#hl-0-1">1&lt;/a>&lt;/span>&lt;span class="cl">helm repo add &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-2">&lt;a class="lnlinks" href="#hl-0-2">2&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>crossplane-stable https://charts.crossplane.io/stable
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-3">&lt;a class="lnlinks" href="#hl-0-3">3&lt;/a>&lt;/span>&lt;span class="cl">helm repo update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-4">&lt;a class="lnlinks" href="#hl-0-4">4&lt;/a>&lt;/span>&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-5">&lt;a class="lnlinks" href="#hl-0-5">5&lt;/a>&lt;/span>&lt;span class="cl">helm install crossplane &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-6">&lt;a class="lnlinks" href="#hl-0-6">6&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>crossplane-stable/crossplane &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-7">&lt;a class="lnlinks" href="#hl-0-7">7&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>--namespace crossplane-system &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-8">&lt;a class="lnlinks" href="#hl-0-8">8&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>--create-namespace
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>When the Crossplane pods finish installing and are ready, apply the AWS Provider&lt;/li>
&lt;/ol>
&lt;div class="highlight" label="provider" copy-lines="all">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="ln" id="hl-1-1">&lt;a class="lnlinks" href="#hl-1-1">1&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="l">cat &amp;lt;&amp;lt;EOF | kubectl apply -f -&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-2">&lt;a class="lnlinks" href="#hl-1-2">2&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">apiVersion&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">pkg.crossplane.io/v1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-3">&lt;a class="lnlinks" href="#hl-1-3">3&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Provider&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-4">&lt;a class="lnlinks" href="#hl-1-4">4&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-5">&lt;a class="lnlinks" href="#hl-1-5">5&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">provider-aws-s3&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-6">&lt;a class="lnlinks" href="#hl-1-6">6&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-7">&lt;a class="lnlinks" href="#hl-1-7">7&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">package&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">xpkg.crossplane.io/crossplane-contrib/provider-aws-s3:v1.21.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-8">&lt;a class="lnlinks" href="#hl-1-8">8&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">EOF&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>Create a file with your AWS keys&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-ini" data-lang="ini">&lt;span class="line">&lt;span class="ln" id="hl-2-1">&lt;a class="lnlinks" href="#hl-2-1">1&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="k">[default]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-2-2">&lt;a class="lnlinks" href="#hl-2-2">2&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="na">aws_access_key_id&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;lt;aws_access_key&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-2-3">&lt;a class="lnlinks" href="#hl-2-3">3&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="na">aws_secret_access_key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s">&amp;lt;aws_secret_key&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="4">
&lt;li>Create a Kubernetes secret from the AWS keys&lt;/li>
&lt;/ol>
&lt;div class="highlight" label="kube-create-secret" copy-lines="all">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="ln" id="hl-3-1">&lt;a class="lnlinks" href="#hl-3-1">1&lt;/a>&lt;/span>&lt;span class="cl">kubectl create secret &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-3-2">&lt;a class="lnlinks" href="#hl-3-2">2&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>generic aws-secret &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-3-3">&lt;a class="lnlinks" href="#hl-3-3">3&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>-n crossplane-system &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-3-4">&lt;a class="lnlinks" href="#hl-3-4">4&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>--from-file&lt;span class="o">=&lt;/span>&lt;span class="nv">creds&lt;/span>&lt;span class="o">=&lt;/span>./aws-credentials.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="5">
&lt;li>Create a &lt;em>ProviderConfig&lt;/em>&lt;/li>
&lt;/ol>
&lt;div class="highlight" label="providerconfig" copy-lines="all">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="ln" id="hl-4-1">&lt;a class="lnlinks" href="#hl-4-1"> 1&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="l">cat &amp;lt;&amp;lt;EOF | kubectl apply -f -&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-4-2">&lt;a class="lnlinks" href="#hl-4-2"> 2&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">apiVersion&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">aws.upbound.io/v1beta1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-4-3">&lt;a class="lnlinks" href="#hl-4-3"> 3&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ProviderConfig&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-4-4">&lt;a class="lnlinks" href="#hl-4-4"> 4&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-4-5">&lt;a class="lnlinks" href="#hl-4-5"> 5&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">default&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-4-6">&lt;a class="lnlinks" href="#hl-4-6"> 6&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-4-7">&lt;a class="lnlinks" href="#hl-4-7"> 7&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">credentials&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-4-8">&lt;a class="lnlinks" href="#hl-4-8"> 8&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">source&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Secret&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-4-9">&lt;a class="lnlinks" href="#hl-4-9"> 9&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">secretRef&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-4-10">&lt;a class="lnlinks" href="#hl-4-10">10&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">namespace&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">crossplane-system&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-4-11">&lt;a class="lnlinks" href="#hl-4-11">11&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">aws-secret&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-4-12">&lt;a class="lnlinks" href="#hl-4-12">12&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">key&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">creds&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-4-13">&lt;a class="lnlinks" href="#hl-4-13">13&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">EOF&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h2 id="install-the-dynamodb-provider">Install the DynamoDB Provider &lt;a class="anchor-link" id="install-the-dynamodb-provider" href="#install-the-dynamodb-provider" aria-label="Link to this section: Install the DynamoDB Provider">&lt;/a>&lt;/h2>
&lt;p>Part 1 only installed the AWS S3 Provider. This section deploys an S3 bucket
along with a DynamoDB Table.
Deploying a DynamoDB Table requires the DynamoDB Provider as well.&lt;/p></description></item><item><title>Azure Quickstart Part 2</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-azure-part-2/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-azure-part-2/</guid><description>&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 is part 2 of a series.&lt;/p>
&lt;p>&lt;a href="https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-azure/">&lt;strong>Part 1&lt;/strong>&lt;/a> covers
to installing Crossplane and connect your Kubernetes cluster to Azure.&lt;/p>
&lt;/div>
&lt;/div>
&lt;p>This guide walks you through building and accessing a custom API with Crossplane.&lt;/p>
&lt;h2 id="prerequisites">Prerequisites &lt;a class="anchor-link" id="prerequisites" href="#prerequisites" aria-label="Link to this section: Prerequisites">&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Complete &lt;a href="https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-azure/">quickstart part 1&lt;/a> connecting Kubernetes
to Azure.&lt;/li>
&lt;li>an Azure account with permissions to create an Azure Virtual Machine, Resource
Group and Virtual Networking.&lt;/li>
&lt;/ul>
&lt;div class="accordion mb-3" id="skip-part-1-and-just-get-started-439-Parent">
&lt;div class="accordion-item">
&lt;h2 class="accordion-header" id="skip-part-1-and-just-get-started-439">
&lt;button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#skip-part-1-and-just-get-started-439-Content" aria-expanded="false" aria-controls="skip-part-1-and-just-get-started-439-Content">
Skip part 1 and just get started
&lt;/button>
&lt;/h2>
&lt;div id="skip-part-1-and-just-get-started-439-Content" class="accordion-collapse collapse" aria-labelledby="skip-part-1-and-just-get-started-439" data-bs-parent="#skip-part-1-and-just-get-started-439-Parent">
&lt;div class="accordion-body rounded-bottom">
&lt;ol>
&lt;li>Add the Crossplane Helm repository and install Crossplane&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="ln" id="hl-0-1">&lt;a class="lnlinks" href="#hl-0-1">1&lt;/a>&lt;/span>&lt;span class="cl">helm repo add &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-2">&lt;a class="lnlinks" href="#hl-0-2">2&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>crossplane-stable https://charts.crossplane.io/stable
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-3">&lt;a class="lnlinks" href="#hl-0-3">3&lt;/a>&lt;/span>&lt;span class="cl">helm repo update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-4">&lt;a class="lnlinks" href="#hl-0-4">4&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="o">&amp;amp;&amp;amp;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-5">&lt;a class="lnlinks" href="#hl-0-5">5&lt;/a>&lt;/span>&lt;span class="cl">helm install crossplane &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-6">&lt;a class="lnlinks" href="#hl-0-6">6&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>crossplane-stable/crossplane &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-7">&lt;a class="lnlinks" href="#hl-0-7">7&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>--namespace crossplane-system &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-8">&lt;a class="lnlinks" href="#hl-0-8">8&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>--create-namespace
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>When the Crossplane pods finish installing and are ready, apply the Azure
Provider&lt;/li>
&lt;/ol>
&lt;div class="highlight" label="provider" copy-lines="all">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="ln" id="hl-1-1">&lt;a class="lnlinks" href="#hl-1-1">1&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="l">cat &amp;lt;&amp;lt;EOF | kubectl apply -f -&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-2">&lt;a class="lnlinks" href="#hl-1-2">2&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">apiVersion&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">pkg.crossplane.io/v1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-3">&lt;a class="lnlinks" href="#hl-1-3">3&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Provider&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-4">&lt;a class="lnlinks" href="#hl-1-4">4&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-5">&lt;a class="lnlinks" href="#hl-1-5">5&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">provider-azure-network&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-6">&lt;a class="lnlinks" href="#hl-1-6">6&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-7">&lt;a class="lnlinks" href="#hl-1-7">7&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">package&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">xpkg.crossplane.io/crossplane-contrib/provider-azure-network:v1.11.2&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-8">&lt;a class="lnlinks" href="#hl-1-8">8&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">EOF&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>Use the Azure CLI to create a service principal and save the JSON output as
&lt;code>azure-crednetials.json&lt;/code>&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-console" data-lang="console">&lt;span class="line">&lt;span class="ln" id="hl-0-1">&lt;a class="lnlinks" href="#hl-0-1">1&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="go">az ad sp create-for-rbac \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-2">&lt;a class="lnlinks" href="#hl-0-2">2&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="go">--sdk-auth \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-3">&lt;a class="lnlinks" href="#hl-0-3">3&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="go">--role Owner \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-4">&lt;a class="lnlinks" href="#hl-0-4">4&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="go">--scopes /subscriptions/&lt;span class="pe-2 editable" data-default="&amp;lt;subscription_id&amp;gt;" contentEditable="true">&lt;/span>&lt;svg class="bi text-white" width="1em" height="1em">&lt;use xlink:href="#pencil-square"/>&lt;/svg>
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;ol start="4">
&lt;li>Create a Kubernetes secret from the Azure JSON file.&lt;/li>
&lt;/ol>
&lt;div class="highlight" label="kube-create-secret" copy-lines="all">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="ln" id="hl-2-1">&lt;a class="lnlinks" href="#hl-2-1">1&lt;/a>&lt;/span>&lt;span class="cl">kubectl create secret &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-2-2">&lt;a class="lnlinks" href="#hl-2-2">2&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>generic azure-secret &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-2-3">&lt;a class="lnlinks" href="#hl-2-3">3&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>-n crossplane-system &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-2-4">&lt;a class="lnlinks" href="#hl-2-4">4&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>--from-file&lt;span class="o">=&lt;/span>&lt;span class="nv">creds&lt;/span>&lt;span class="o">=&lt;/span>./azure-credentials.json
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="5">
&lt;li>Create a &lt;em>ProviderConfig&lt;/em>&lt;/li>
&lt;/ol>
&lt;div class="highlight" label="providerconfig" copy-lines="all">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="ln" id="hl-3-1">&lt;a class="lnlinks" href="#hl-3-1"> 1&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="l">cat &amp;lt;&amp;lt;EOF | kubectl apply -f -&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-3-2">&lt;a class="lnlinks" href="#hl-3-2"> 2&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">apiVersion&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">azure.upbound.io/v1beta1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-3-3">&lt;a class="lnlinks" href="#hl-3-3"> 3&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-3-4">&lt;a class="lnlinks" href="#hl-3-4"> 4&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">default&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-3-5">&lt;a class="lnlinks" href="#hl-3-5"> 5&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ProviderConfig&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-3-6">&lt;a class="lnlinks" href="#hl-3-6"> 6&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-3-7">&lt;a class="lnlinks" href="#hl-3-7"> 7&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">credentials&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-3-8">&lt;a class="lnlinks" href="#hl-3-8"> 8&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">source&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Secret&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-3-9">&lt;a class="lnlinks" href="#hl-3-9"> 9&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">secretRef&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-3-10">&lt;a class="lnlinks" href="#hl-3-10">10&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">namespace&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">crossplane-system&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-3-11">&lt;a class="lnlinks" href="#hl-3-11">11&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">azure-secret&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-3-12">&lt;a class="lnlinks" href="#hl-3-12">12&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">key&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">creds&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-3-13">&lt;a class="lnlinks" href="#hl-3-13">13&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">EOF&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h2 id="create-a-custom-api">Create a custom API &lt;a class="anchor-link" id="create-a-custom-api" href="#create-a-custom-api" aria-label="Link to this section: Create a custom API">&lt;/a>&lt;/h2>
&lt;!-- vale alex.Condescending = NO -->
&lt;p>Crossplane allows you to build your own custom APIs for your users, abstracting
away details about the cloud provider and their resources. You can make your API
as complex or simple as you wish.&lt;/p></description></item><item><title>GCP Quickstart Part 2</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-gcp-part-2/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-gcp-part-2/</guid><description>&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 is part 2 of a series.&lt;/p>
&lt;p>&lt;a href="https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-gcp/">&lt;strong>Part 1&lt;/strong>&lt;/a> covers
to installing Crossplane and connect your Kubernetes cluster to GCP.&lt;/p>
&lt;/div>
&lt;/div>
&lt;p>This guide walks you through building and accessing a custom API with
Crossplane.&lt;/p>
&lt;h2 id="prerequisites">Prerequisites &lt;a class="anchor-link" id="prerequisites" href="#prerequisites" aria-label="Link to this section: Prerequisites">&lt;/a>&lt;/h2>
&lt;ul>
&lt;li>Complete &lt;a href="https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-gcp/">quickstart part 1&lt;/a> connecting Kubernetes
to GCP.&lt;/li>
&lt;li>a GCP account with permissions to create a GCP
&lt;a href="https://cloud.google.com/storage">storage bucket&lt;/a> and a
&lt;a href="https://cloud.google.com/pubsub">Pub/Sub topic&lt;/a>.&lt;/li>
&lt;/ul>
&lt;div class="accordion mb-3" id="skip-part-1-and-just-get-started-1235-Parent">
&lt;div class="accordion-item">
&lt;h2 class="accordion-header" id="skip-part-1-and-just-get-started-1235">
&lt;button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#skip-part-1-and-just-get-started-1235-Content" aria-expanded="false" aria-controls="skip-part-1-and-just-get-started-1235-Content">
Skip part 1 and just get started
&lt;/button>
&lt;/h2>
&lt;div id="skip-part-1-and-just-get-started-1235-Content" class="accordion-collapse collapse" aria-labelledby="skip-part-1-and-just-get-started-1235" data-bs-parent="#skip-part-1-and-just-get-started-1235-Parent">
&lt;div class="accordion-body rounded-bottom">
&lt;ol>
&lt;li>Add the Crossplane Helm repository and install Crossplane.&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="ln" id="hl-0-1">&lt;a class="lnlinks" href="#hl-0-1">1&lt;/a>&lt;/span>&lt;span class="cl">helm repo add &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-2">&lt;a class="lnlinks" href="#hl-0-2">2&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>crossplane-stable https://charts.crossplane.io/stable
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-3">&lt;a class="lnlinks" href="#hl-0-3">3&lt;/a>&lt;/span>&lt;span class="cl">helm repo update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-4">&lt;a class="lnlinks" href="#hl-0-4">4&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="o">&amp;amp;&amp;amp;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-5">&lt;a class="lnlinks" href="#hl-0-5">5&lt;/a>&lt;/span>&lt;span class="cl">helm install crossplane &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-6">&lt;a class="lnlinks" href="#hl-0-6">6&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>crossplane-stable/crossplane &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-7">&lt;a class="lnlinks" href="#hl-0-7">7&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>--namespace crossplane-system &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-8">&lt;a class="lnlinks" href="#hl-0-8">8&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>--create-namespace
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>When the Crossplane pods finish installing and are ready, apply the GCP
Provider.&lt;/li>
&lt;/ol>
&lt;div class="highlight" label="provider" copy-lines="all">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="ln" id="hl-1-1">&lt;a class="lnlinks" href="#hl-1-1">1&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="l">cat &amp;lt;&amp;lt;EOF | kubectl apply -f -&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-2">&lt;a class="lnlinks" href="#hl-1-2">2&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">apiVersion&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">pkg.crossplane.io/v1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-3">&lt;a class="lnlinks" href="#hl-1-3">3&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Provider&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-4">&lt;a class="lnlinks" href="#hl-1-4">4&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-5">&lt;a class="lnlinks" href="#hl-1-5">5&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">provider-gcp-storage&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-6">&lt;a class="lnlinks" href="#hl-1-6">6&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-7">&lt;a class="lnlinks" href="#hl-1-7">7&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">package&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">xpkg.crossplane.io/crossplane-contrib/provider-gcp-storage:v1.12.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-1-8">&lt;a class="lnlinks" href="#hl-1-8">8&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">EOF&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>Create a file called &lt;code>gcp-credentials.json&lt;/code> with your GCP service account
JSON file.&lt;/li>
&lt;/ol>
&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">
The
&lt;a href="https://cloud.google.com/iam/docs/creating-managing-service-account-keys">GCP documentation&lt;/a>
provides information on how to generate a service account JSON file.
&lt;/div>
&lt;/div>
&lt;ol start="4">
&lt;li>Create a Kubernetes secret from the GCP JSON file&lt;/li>
&lt;/ol>
&lt;div class="highlight" label="kube-create-secret" copy-lines="all">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="ln" id="hl-2-1">&lt;a class="lnlinks" href="#hl-2-1">1&lt;/a>&lt;/span>&lt;span class="cl">kubectl create secret &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-2-2">&lt;a class="lnlinks" href="#hl-2-2">2&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>generic gcp-secret &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-2-3">&lt;a class="lnlinks" href="#hl-2-3">3&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>-n crossplane-system &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-2-4">&lt;a class="lnlinks" href="#hl-2-4">4&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>--from-file&lt;span class="o">=&lt;/span>&lt;span class="nv">creds&lt;/span>&lt;span class="o">=&lt;/span>./gcp-credentials.json
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="5">
&lt;li>Create a &lt;em>ProviderConfig&lt;/em>
Include your
&lt;code>&lt;highlight-term id="1775223277290511390" data-label=providerconfig data-line=7>GCP project ID&lt;/highlight-term>&lt;/code> in the
&lt;em>ProviderConfig&lt;/em> settings.&lt;/li>
&lt;/ol>
&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">
Find your GCP project ID from the &lt;code>project_id&lt;/code> field of the
&lt;code>gcp-credentials.json&lt;/code> file.
&lt;/div>
&lt;/div>
&lt;div class="highlight" label="providerconfig" copy-lines="all">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="ln" id="hl-0-1">&lt;a class="lnlinks" href="#hl-0-1"> 1&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="l">cat &amp;lt;&amp;lt;EOF | kubectl apply -f -&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-2">&lt;a class="lnlinks" href="#hl-0-2"> 2&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">apiVersion&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">gcp.upbound.io/v1beta1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-3">&lt;a class="lnlinks" href="#hl-0-3"> 3&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ProviderConfig&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-4">&lt;a class="lnlinks" href="#hl-0-4"> 4&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-5">&lt;a class="lnlinks" href="#hl-0-5"> 5&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">default&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-6">&lt;a class="lnlinks" href="#hl-0-6"> 6&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-7">&lt;a class="lnlinks" href="#hl-0-7"> 7&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">projectID&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">&lt;span class="pe-2 editable" data-default="&amp;lt;PROJECT_ID&amp;gt;" contentEditable="true">&lt;/span>&lt;svg class="bi text-white" width="1em" height="1em">&lt;use xlink:href="#pencil-square"/>&lt;/svg>&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-8">&lt;a class="lnlinks" href="#hl-0-8"> 8&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">credentials&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-9">&lt;a class="lnlinks" href="#hl-0-9"> 9&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">source&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Secret&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-10">&lt;a class="lnlinks" href="#hl-0-10">10&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">secretRef&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-11">&lt;a class="lnlinks" href="#hl-0-11">11&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">namespace&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">crossplane-system&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-12">&lt;a class="lnlinks" href="#hl-0-12">12&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">gcp-secret&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-13">&lt;a class="lnlinks" href="#hl-0-13">13&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">key&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">creds&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-14">&lt;a class="lnlinks" href="#hl-0-14">14&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="l">EOF&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;/div>
&lt;h2 id="install-the-pubsub-provider">Install the PubSub Provider &lt;a class="anchor-link" id="install-the-pubsub-provider" href="#install-the-pubsub-provider" aria-label="Link to this section: Install the PubSub Provider">&lt;/a>&lt;/h2>
&lt;p>Part 1 only installed the GCP Storage Provider. This section deploys a
PubSub Topic along with a GCP storage bucket.
First install the GCP PubSub Provider.&lt;/p></description></item><item><title>GCP Quickstart</title><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-gcp/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-gcp/</guid><description>&lt;p>Connect Crossplane to GCP to create and manage cloud resources from Kubernetes
with&lt;br>
&lt;a href="https://github.com/crossplane-contrib/provider-upjet-gcp">provider-upjet-gcp&lt;/a>.&lt;/p>
&lt;p>This guide is in two parts:&lt;/p>
&lt;ul>
&lt;li>Part 1 walks through installing Crossplane, configuring the provider to
authenticate to GCP and creating a &lt;em>Managed Resource&lt;/em> in GCP directly from
your Kubernetes cluster. This shows Crossplane can communicate with GCP.&lt;/li>
&lt;li>&lt;a href="https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/provider-gcp-part-2/">Part 2&lt;/a> shows how to build and access a
custom API with Crossplane.&lt;/li>
&lt;/ul>
&lt;h2 id="prerequisites">Prerequisites &lt;a class="anchor-link" id="prerequisites" href="#prerequisites" aria-label="Link to this section: Prerequisites">&lt;/a>&lt;/h2>
&lt;p>This quickstart requires:&lt;/p></description></item><item><title/><link>https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/install-crossplane-include/</link><pubDate/><guid>https://deploy-preview-1077--crossplane.netlify.app/v1.20/getting-started/install-crossplane-include/</guid><description>&lt;h2 id="install-crossplane">Install Crossplane &lt;a class="anchor-link" id="install-crossplane" href="#install-crossplane" aria-label="Link to this section: Install Crossplane">&lt;/a>&lt;/h2>
&lt;p>Crossplane installs into an existing Kubernetes cluster.&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">
If you don&amp;rsquo;t have a Kubernetes cluster create one locally with &lt;a href="https://kind.sigs.k8s.io/">Kind&lt;/a>.
&lt;/div>
&lt;/div>
&lt;h3 id="install-the-crossplane-helm-chart">Install the Crossplane Helm chart &lt;a class="anchor-link" id="install-the-crossplane-helm-chart" href="#install-the-crossplane-helm-chart" aria-label="Link to this section: Install the Crossplane Helm chart">&lt;/a>&lt;/h3>
&lt;p>Helm enables Crossplane to install all its Kubernetes components through a &lt;em>Helm Chart&lt;/em>.&lt;/p>
&lt;p>Enable the Crossplane Helm Chart repository:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="ln" id="hl-0-1">&lt;a class="lnlinks" href="#hl-0-1">1&lt;/a>&lt;/span>&lt;span class="cl">helm repo add &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-2">&lt;a class="lnlinks" href="#hl-0-2">2&lt;/a>&lt;/span>&lt;span class="cl">&lt;span class="se">&lt;/span>crossplane-stable https://charts.crossplane.io/stable
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln" id="hl-0-3">&lt;a class="lnlinks" href="#hl-0-3">3&lt;/a>&lt;/span>&lt;span class="cl">helm repo update
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Run the Helm dry-run to see all the Crossplane components Helm installs.&lt;/p></description></item></channel></rss>