From 690352caa769fb40c69541244e54d034b6e0e259 Mon Sep 17 00:00:00 2001 From: Vishwanath Hiremath Date: Wed, 11 Sep 2024 09:52:27 -0700 Subject: [PATCH 1/4] how to guide for private bicep registries Signed-off-by: Vishwanath Hiremath --- .../howto-private-bicep-registry/index.md | 73 +++++++++++++++++++ .../snippets/env.bicep | 44 +++++++++++ 2 files changed, 117 insertions(+) create mode 100644 docs/content/guides/recipes/howto-private-bicep-registry/index.md create mode 100644 docs/content/guides/recipes/howto-private-bicep-registry/snippets/env.bicep diff --git a/docs/content/guides/recipes/howto-private-bicep-registry/index.md b/docs/content/guides/recipes/howto-private-bicep-registry/index.md new file mode 100644 index 000000000..47be3f901 --- /dev/null +++ b/docs/content/guides/recipes/howto-private-bicep-registry/index.md @@ -0,0 +1,73 @@ +--- +type: docs +title: "How-To: Pull Bicep Recipes from private OCI container registry." +linkTitle: "Private bicep registries" +description: "Learn how to setup your Radius environment to use Bicep Recipe templates published to a private OCI container registry." +weight: 500 +categories: "How-To" +tags: ["recipes", "bicep"] +--- + +This how-to guide will describe how to: + +- Configure a Radius environment to utilize Bicep Recipe templates that are stored in a private OCI (Open Container Initiative) complaint container registry. This setup will ensure the templates are securely stored and managed within private OCI registry. + +### Prerequisites + +Before you get started, you'll need to make sure you have the following tools and resources: + +- [rad CLI]({{< ref "installation#step-1-install-the-rad-cli" >}}) +- [Bicep VSCode extension]({{< ref "installation#step-2-install-the-vs-code-extension" >}}) +- [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) +- [Radius initialized with `rad init`]({{< ref howto-environment >}}) + +## Step 1: Setting up private OCI container registry authentication. +Radius supports three authentication methods for accessing private container registries: +- Basic Authentication: This method uses a username and password for authentication and is applicable to all OCI complaint registries. Obtain the username and password details used to login to private registry. +- Azure Workload Identity: This federated identity-based authentication is used for connecting to Azure Container Registry (ACR). [Here]({{< ref howto-azure-provider-wi >}}) is the guide to setup Azure Workload Identity for Radius. Obtain `clientId` and `tenant ID` used during the setup. +- AWS IRSA: This federated identity-based authentication is used for accessing Amazon Elastic Container Registry (ECR). [Here]({{< ref howto-aws-provider-irsa >}}) is the guide to setup the AWS IRSA for Radius. Obtain `roleARN` from the role created during the setup. + +## Step 2: Define a secret store resource + +Create a [Radius Secret Store]({{< ref "/guides/author-apps/secrets/overview" >}}) to manage and securely store the secerts information required for authenticating with a private registry. Define the namespace for the cluster that will contain your [Kubernetes Secret](https://kubernetes.io/docs/concepts/configuration/secret/) with the `resource` property. And specify the type of secret e.g. basicAuthentication,azureWorkloadIdeneity, awsIRSA. + +> While this example shows a Radius-managed secret store where Radius creates the underlying secrets infrastructure, you can also bring your own existing secrets. Refer to the [secrets documentation]({{< ref "/guides/author-apps/secrets/overview" >}}) for more information. + +Secretstore example for secret type `awsIRSA`: +{{< rad file="snippets/env.bicep" embed=true marker="//SECRETSTORE" >}} + +## Step 3: Configure authentication for private bicep registries and add a Bicep recipe. + +`recipeConfig` allows you to configure how Recipes should be setup and run. One available option is to specify the registry secrets for pulling Bicep recipes from private registries. For more information refer to the [Radius Environment schema]({{< ref environment-schema >}}) page. + +In your `env.bicep` file add an Environment resource, along with Recipe configuration which leverages the previously defined secret store for private OCI registry authentication. + +{{< rad file="snippets/env.bicep" embed=true marker="//ENV" >}} + + +## Step 5: Deploy your Radius Environment + +Deploy your new Radius Environment: + +``` +rad deploy ./env.bicep +``` + +## Done + +Your Radius Environment is now ready to utilize your Radius Recipes stored inside your private registry. For more information on Radius Recipes visit the [Recipes overview page]({{< ref "/guides/recipes/overview" >}}). + +## Cleanup + +You can delete a Radius Environment by running the following command: + +``` +rad env delete my-env +``` + +## Further reading + +- [Recipes overview]({{< ref "/guides/recipes/overview" >}}) +- [Radius Environments]({{< ref "/guides/deploy-apps/environments/overview" >}}) +- [`rad recipe CLI reference`]({{< ref rad_recipe >}}) +- [`rad env CLI reference`]({{< ref rad_env >}}) \ No newline at end of file diff --git a/docs/content/guides/recipes/howto-private-bicep-registry/snippets/env.bicep b/docs/content/guides/recipes/howto-private-bicep-registry/snippets/env.bicep new file mode 100644 index 000000000..cefd84e59 --- /dev/null +++ b/docs/content/guides/recipes/howto-private-bicep-registry/snippets/env.bicep @@ -0,0 +1,44 @@ +//ENV +resource env 'Applications.Core/environments@2023-10-01-preview' = { + name: 'my-env' + properties: { + compute: { + kind: 'kubernetes' + namespace: 'my-namespace' + } + recipeConfig: { + bicep:{ + authentication:{ + // The hostname of your container registry, such as 'docker.io' or '.azurecr.io' + '.dkr.ecr..amazonaws.com':{ + secret: registrySecrets.id + } + } + } + } + recipes: { + 'Applications.Messaging/rabbitMQQueues': { + default: { + templateKind: 'bicep' + templatePath: '.dkr.ecr..amazonaws.com/test-private-ecr:2.0' + } + } + } + } +} +//ENV + +//SECRETSTORE +resource registrySecrets 'Applications.Core/secretStores@2023-10-01-preview' = { + name: 'registry-secrets' + properties: { + resource: 'registry-secrets/ecr' + type: 'awsIRSA' + data: { + roleARN: { + value: 'arn:aws:iam:::role/test-role' + } + } + } +} +//SECRETSTORE From 8b48cb9fe2431e7d8e9555cd98a732349ab3d43e Mon Sep 17 00:00:00 2001 From: Vishwanath Hiremath Date: Wed, 11 Sep 2024 17:19:46 -0700 Subject: [PATCH 2/4] addressing comments Signed-off-by: Vishwanath Hiremath --- .../howto-private-bicep-registry/index.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/content/guides/recipes/howto-private-bicep-registry/index.md b/docs/content/guides/recipes/howto-private-bicep-registry/index.md index 47be3f901..aa6e2b441 100644 --- a/docs/content/guides/recipes/howto-private-bicep-registry/index.md +++ b/docs/content/guides/recipes/howto-private-bicep-registry/index.md @@ -8,9 +8,9 @@ categories: "How-To" tags: ["recipes", "bicep"] --- -This how-to guide will describe how to: +This guide will describe how to: -- Configure a Radius environment to utilize Bicep Recipe templates that are stored in a private OCI (Open Container Initiative) complaint container registry. This setup will ensure the templates are securely stored and managed within private OCI registry. +- Configure a Radius environment to utilize Bicep Recipe templates that are stored in a private OCI (Open Container Initiative) complaint container registry. This setup will ensure the templates are securely stored within a private OCI registry and accessed by Radius using required credentials. ### Prerequisites @@ -21,26 +21,26 @@ Before you get started, you'll need to make sure you have the following tools an - [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) - [Radius initialized with `rad init`]({{< ref howto-environment >}}) -## Step 1: Setting up private OCI container registry authentication. +## Step 1: Obtain private OCI container registry authentication credentials Radius supports three authentication methods for accessing private container registries: -- Basic Authentication: This method uses a username and password for authentication and is applicable to all OCI complaint registries. Obtain the username and password details used to login to private registry. +- Basic Authentication: This method uses a username and password for authentication and is applicable to all OCI complaint registries. Obtain the `username` and `password` details used to login to private registry. - Azure Workload Identity: This federated identity-based authentication is used for connecting to Azure Container Registry (ACR). [Here]({{< ref howto-azure-provider-wi >}}) is the guide to setup Azure Workload Identity for Radius. Obtain `clientId` and `tenant ID` used during the setup. - AWS IRSA: This federated identity-based authentication is used for accessing Amazon Elastic Container Registry (ECR). [Here]({{< ref howto-aws-provider-irsa >}}) is the guide to setup the AWS IRSA for Radius. Obtain `roleARN` from the role created during the setup. ## Step 2: Define a secret store resource -Create a [Radius Secret Store]({{< ref "/guides/author-apps/secrets/overview" >}}) to manage and securely store the secerts information required for authenticating with a private registry. Define the namespace for the cluster that will contain your [Kubernetes Secret](https://kubernetes.io/docs/concepts/configuration/secret/) with the `resource` property. And specify the type of secret e.g. basicAuthentication,azureWorkloadIdeneity, awsIRSA. +Create a [Radius Secret Store]({{< ref "/guides/author-apps/secrets/overview" >}}) to securely store and manage the secrets information required for authenticating with a private registry. Define the namespace for the cluster that will contain your [Kubernetes Secret](https://kubernetes.io/docs/concepts/configuration/secret/) with the `resource` property and specify the type of secret e.g. `basicAuthentication`, `azureWorkloadIdeneity`, `awsIRSA`. > While this example shows a Radius-managed secret store where Radius creates the underlying secrets infrastructure, you can also bring your own existing secrets. Refer to the [secrets documentation]({{< ref "/guides/author-apps/secrets/overview" >}}) for more information. -Secretstore example for secret type `awsIRSA`: +Secret store example for secret type `awsIRSA`: {{< rad file="snippets/env.bicep" embed=true marker="//SECRETSTORE" >}} -## Step 3: Configure authentication for private bicep registries and add a Bicep recipe. +## Step 3: Configure authentication for private bicep registries and add a Bicep recipe -`recipeConfig` allows you to configure how Recipes should be setup and run. One available option is to specify the registry secrets for pulling Bicep recipes from private registries. For more information refer to the [Radius Environment schema]({{< ref environment-schema >}}) page. +`recipeConfig` allows you to configure how Recipes should be setup and run. One available option is to specify the registry secrets for pulling Bicep Recipes from private registries. For more information refer to the [Radius Environment schema]({{< ref environment-schema >}}) page. -In your `env.bicep` file add an Environment resource, along with Recipe configuration which leverages the previously defined secret store for private OCI registry authentication. +In your `env.bicep` file add an Environment resource that includes a `recipeConfig` which leverages the previously defined secret store for private OCI registry authentication. {{< rad file="snippets/env.bicep" embed=true marker="//ENV" >}} From 12b6281590f1c5a2d506cc6c4cf7c9e7c4e65320 Mon Sep 17 00:00:00 2001 From: Vishwanath Hiremath Date: Wed, 11 Sep 2024 17:35:21 -0700 Subject: [PATCH 3/4] addressing comments Signed-off-by: Vishwanath Hiremath --- .../env-deploy-output.png | Bin 0 -> 36002 bytes .../howto-private-bicep-registry/index.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/content/guides/recipes/howto-private-bicep-registry/env-deploy-output.png diff --git a/docs/content/guides/recipes/howto-private-bicep-registry/env-deploy-output.png b/docs/content/guides/recipes/howto-private-bicep-registry/env-deploy-output.png new file mode 100644 index 0000000000000000000000000000000000000000..cc2d19951c3c9a45ca53f1729cae87566fd1c353 GIT binary patch literal 36002 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�L1+^Kl$p9>}p4xMd3i$k8EmAY8oc}}k z#lC9Hn>U`PV@2a$IIe&O=emWXOE-VbXV0q#Uyg$xXm+zZti}%E4np0~a~Q`{ zIt+i;e;Ev?K9AQ-%JwVo6~t{Q8;F!M2mfR*G&M-B4gGfejfv|b@l%HQos<0rNmj~CR~d^&FHLw04S+*U6=Gzt`Qj_&;}D;+RM&0E#I*|Q2dUTvCU#%OK$Fk!6=dZn3rp{5``?kgQW?`vevMN-Xg+~rYy15+!^ zeSRZ{-L2ZVPmoe|g@0NM2GC+)+r80MRtMh`u9}%>WV}OPn#-Xa^5nbsD>oQ=<|D1a zkFz@5QHbpn<0fU}F5Xjb9*UnDErmFfG`Viu*xHh=xPCR^El~V>_xV%*SYPT-KvcX^ z%Mq>apNo^Me*SInN1E4VN7dn|6HRwDM0Y5VUQa&$z2~0|3VnBCw1(_Aa3p=F(!Krn ztwdfngW6w%tt|4lfV|Y^cx5L(CRHY20&ie~@c3DMxoqU^hKK|2E1-4B)RLeK;y14T zjHL1BD!cF(7M#sfW#sT|Mfvadbd{X~tdGUwb&z)r;hcYe@IUp&FdMjEneS1HF+)|? z38hrVPyhn$ZO}?Gnthv2;;|QV?vMirGq4gDb_AAW{qu%T{;yX6OZ$hI*ZyKlR$>R& zT|S{dw!8R7E-0r`LTX)F9z9ndT3sBLgpJ=!P<;~0#&hK(#iT@HuY+ED=)+5=Y;0_L z?$NM1KA~Gzs#~hB&cpw`SKR#f2$QT#Z*IfP>~wSf<3Io7 z2Yo(@;s7znsoI?gN=0S{3i5+Nyf=bCUbW$qZr&S|2WJ24(mgU4y6Hm1`?%K&$JM6+ z(Da%LI63$HAUn%HUDVxEdZ181>~!4Vmsl}Z$+!5=(def;$zB1hn}} ## Done Your Radius Environment is now ready to utilize your Radius Recipes stored inside your private registry. For more information on Radius Recipes visit the [Recipes overview page]({{< ref "/guides/recipes/overview" >}}). From 8cd313e874eafaf29c2e49e580ee979b3d898f60 Mon Sep 17 00:00:00 2001 From: Vishwanath Hiremath Date: Wed, 11 Sep 2024 17:37:09 -0700 Subject: [PATCH 4/4] addressing comments Signed-off-by: Vishwanath Hiremath --- .../guides/recipes/howto-private-bicep-registry/index.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/content/guides/recipes/howto-private-bicep-registry/index.md b/docs/content/guides/recipes/howto-private-bicep-registry/index.md index a867ae84d..a97b0f4cd 100644 --- a/docs/content/guides/recipes/howto-private-bicep-registry/index.md +++ b/docs/content/guides/recipes/howto-private-bicep-registry/index.md @@ -52,8 +52,7 @@ Deploy your new Radius Environment: ``` rad deploy ./env.bicep ``` -{{< image src="env-deploy-output.png" width=700px alt="Screenshot of environment deployment output" >}} -## Done +{{< image src="env-deploy-output.png" width=700px alt="Screenshot of environment deployment output" >}}
Your Radius Environment is now ready to utilize your Radius Recipes stored inside your private registry. For more information on Radius Recipes visit the [Recipes overview page]({{< ref "/guides/recipes/overview" >}}).