{"id":1548,"date":"2024-02-26T14:24:00","date_gmt":"2024-02-26T14:24:00","guid":{"rendered":"http:\/\/patriciocerda.com\/?p=1548"},"modified":"2024-02-26T14:24:00","modified_gmt":"2024-02-26T14:24:00","slug":"kasten-air-gapped-installation-with-aws-elastic-container-private-registry","status":"publish","type":"post","link":"https:\/\/patriciocerda.com\/?p=1548","title":{"rendered":"Kasten Air-Gapped installation with AWS Elastic Container Private Registry"},"content":{"rendered":"<p>Hi everyone.\u00a0 A very common requests to deploy Kasten in production Kubernetes environments, is the use of a Private Registry and deploying Kasten in AirGap mode.\u00a0 In this post I&#8217;ll explain the process and steps to push the Kasten images to a Private Registry using AWS Elastic Container Registry (ECR) and then how to install Kasten in an AWS EKS cluster using the images from the AWS ECR private registry.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Contenidos<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/patriciocerda.com\/?p=1548\/#Requirements\" >Requirements<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/patriciocerda.com\/?p=1548\/#Push_Kasten_Images_to_AWS_ECR\" >Push Kasten Images to AWS ECR<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/patriciocerda.com\/?p=1548\/#Installing_Kasten_K10_in_AirGap_mode\" >Installing Kasten K10 in AirGap mode<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/patriciocerda.com\/?p=1548\/#Pre-requisites\" >Pre-requisites<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/patriciocerda.com\/?p=1548\/#Kasten_Installation\" >Kasten Installation<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Requirements\"><\/span>Requirements<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>An AWS EKS cluster already deployed with a supported Kubernetes version.\u00a0\u00a0 For a real Air-Gap scenario, this should be a private EKS Cluster, without outbound internet access.<\/li>\n<li>A private AWS ECR registry to keep the K10 images.\u00a0 In\u00a0 every AWS account, there is a <a href=\"https:\/\/docs.aws.amazon.com\/AmazonECR\/latest\/userguide\/Registries.html\" target=\"_blank\" rel=\"noopener\">default ECR private registry<\/a>.\u00a0 The URL for your default private registry is <code class=\"code\">https:\/\/<\/code><code class=\"code\"><code class=\"replaceable\">aws_account_id<\/code>.dkr.ecr.<code class=\"replaceable\">us-west-2<\/code>.amazonaws.com.<\/code><\/li>\n<li>AWS user account and proper privileges to access the ECR Private Registry.<\/li>\n<li>A Linux or Windows machine with Internet Access and access to AWS ECR.\u00a0 This machine must have AWS CLI and Docker client installed.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Push_Kasten_Images_to_AWS_ECR\"><\/span>Push Kasten Images to AWS ECR<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>In order to push the Kasten Images to AWS ECR, follow the following steps (more information in the <a href=\"https:\/\/docs.kasten.io\/latest\/install\/offline.html\" target=\"_blank\" rel=\"noopener\">official Kasten documentation<\/a>):<\/p>\n<ul>\n<li>Authenticate with the AWS ECR Private Registry using an authorization token (For more information about authentication options, check the <a href=\"https:\/\/docs.aws.amazon.com\/AmazonECR\/latest\/userguide\/registry_auth.html\" target=\"_blank\" rel=\"noopener\">AWS ECR documentation<\/a>).\u00a0\u00a0 The following command\u00a0 updates your Docker configuration so then you can connect with Elastic Container Registry\u00a0 in your AWS Account to push and pull images.<\/li>\n<\/ul>\n<style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-1 > .CodeMirror, .fusion-syntax-highlighter-1 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-1 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-1 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-1 fusion-syntax-highlighter-theme-light\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:var(--awb-color3);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_1\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_1\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_1\" data-readOnly=\"nocursor\" data-lineNumbers=\"1\" data-lineWrapping=\"\" data-theme=\"default\" data-mode=\"text\/x-sh\">aws ecr get-login-password --region ${REGION} | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com\n\n#For example:\naws ecr get-login-password --region eu-west-3 | docker login --username AWS --password-stdin 12345678910.dkr.ecr.eu-west-3.amazonaws.com<\/textarea><\/div>\n<ul>\n<li>Before pushing the Kasten images to the ECR private Registry, you need to create an AWS ECR repository for every image you are going to push.\n<ul>\n<li>To get a list of Kasten images to be pulled\/pushed run the following command:<br \/>\n<style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-2 > .CodeMirror, .fusion-syntax-highlighter-2 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-2 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-2 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-2 fusion-syntax-highlighter-theme-light\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:var(--awb-color3);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_2\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_2\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_2\" data-readOnly=\"nocursor\" data-lineNumbers=\"1\" data-lineWrapping=\"\" data-theme=\"default\" data-mode=\"text\/x-sh\">docker run --rm -it gcr.io\/kasten-images\/k10offline:6.5.5 list-images<\/textarea><\/div><\/li>\n<li>Then create the AWS ECR repositories with the following commands:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-3 > .CodeMirror, .fusion-syntax-highlighter-3 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-3 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-3 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-3 fusion-syntax-highlighter-theme-light\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:var(--awb-color3);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_3\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_3\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_3\" data-readOnly=\"nocursor\" data-lineNumbers=\"1\" data-lineWrapping=\"\" data-theme=\"default\" data-mode=\"text\/x-sh\">aws ecr create-repository --region eu-west-3 --repository-name admin\naws ecr create-repository --region eu-west-3 --repository-name aggregatedapis\naws ecr create-repository --region eu-west-3 --repository-name auth\naws ecr create-repository --region eu-west-3 --repository-name bloblifecyclemanager\naws ecr create-repository --region eu-west-3 --repository-name catalog\naws ecr create-repository --region eu-west-3 --repository-name configmap-reload\naws ecr create-repository --region eu-west-3 --repository-name controllermanager\naws ecr create-repository --region eu-west-3 --repository-name crypto\naws ecr create-repository --region eu-west-3 --repository-name dashboardbff\naws ecr create-repository --region eu-west-3 --repository-name datamover\naws ecr create-repository --region eu-west-3 --repository-name dex\naws ecr create-repository --region eu-west-3 --repository-name emissary\naws ecr create-repository --region eu-west-3 --repository-name events\naws ecr create-repository --region eu-west-3 --repository-name executor\naws ecr create-repository --region eu-west-3 --repository-name frontend\naws ecr create-repository --region eu-west-3 --repository-name garbagecollector\naws ecr create-repository --region eu-west-3 --repository-name grafana\naws ecr create-repository --region eu-west-3 --repository-name init\naws ecr create-repository --region eu-west-3 --repository-name jobs\naws ecr create-repository --region eu-west-3 --repository-name k10fieldtools\naws ecr create-repository --region eu-west-3 --repository-name k10multicluster\naws ecr create-repository --region eu-west-3 --repository-name k10tools\naws ecr create-repository --region eu-west-3 --repository-name kanister-tools\naws ecr create-repository --region eu-west-3 --repository-name kanister\naws ecr create-repository --region eu-west-3 --repository-name logging\naws ecr create-repository --region eu-west-3 --repository-name metering\naws ecr create-repository --region eu-west-3 --repository-name metric-sidecar\naws ecr create-repository --region eu-west-3 --repository-name prometheus\naws ecr create-repository --region eu-west-3 --repository-name repositories\naws ecr create-repository --region eu-west-3 --repository-name restorectl\naws ecr create-repository --region eu-west-3 --repository-name state\naws ecr create-repository --region eu-west-3 --repository-name upgrade\naws ecr create-repository --region eu-west-3 --repository-name vbrintegrationapi<\/textarea><\/div>\n<p>&nbsp;<\/p>\n<ul>\n<li>The next step is pull the Kasten K10 images locally. The following command will execute the <code>k10offline<\/code> tool and use docker-in-docker (via <a href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/dockerd\/\" rev=\"en_rl_none\">docker.sock<\/a>) to download all K10 images into the local machine&#8217;s registry.<\/li>\n<\/ul>\n<style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-4 > .CodeMirror, .fusion-syntax-highlighter-4 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-4 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-4 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-4 fusion-syntax-highlighter-theme-light\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:var(--awb-color3);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_4\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_4\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_4\" data-readOnly=\"nocursor\" data-lineNumbers=\"1\" data-lineWrapping=\"\" data-theme=\"default\" data-mode=\"text\/x-sh\">docker run --rm -it -v \/var\/run\/docker.sock:\/var\/run\/docker.sock \\\n    gcr.io\/kasten-images\/k10offline:6.5.5 pull images<\/textarea><\/div>\n<p>&nbsp;<\/p>\n<ul>\n<li>Finally, we push the Kasten K10 images to the AWS ECR private registry.\u00a0 The following command will pull all K10 images into your local repository, re-tag them for a repository located in AWS and push them to this specified registry.<\/li>\n<\/ul>\n<style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-5 > .CodeMirror, .fusion-syntax-highlighter-5 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-5 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-5 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-5 fusion-syntax-highlighter-theme-light\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:var(--awb-color3);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_5\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_5\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_5\" data-readOnly=\"nocursor\" data-lineNumbers=\"1\" data-lineWrapping=\"\" data-theme=\"default\" data-mode=\"text\/x-sh\">docker run --rm -ti -v \/var\/run\/docker.sock:\/var\/run\/docker.sock \\\n    -v ${HOME}\/.docker:\/root\/.docker \\\n    gcr.io\/kasten-images\/k10offline:6.5.5 pull images --newrepo ${AWS_ACCOUNT_ID}.dkr.ecr.${REGION}.amazonaws.com\n\ndocker run --rm -ti -v \/var\/run\/docker.sock:\/var\/run\/docker.sock \\\n    -v ${HOME}\/.docker:\/root\/.docker \\\n    gcr.io\/kasten-images\/k10offline:6.5.5 pull images --newrepo 12345678910.dkr.ecr.eu-west-3.amazonaws.com<\/textarea><\/div>\n<p>&nbsp;<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Installing_Kasten_K10_in_AirGap_mode\"><\/span>Installing Kasten K10 in AirGap mode<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Once we already have the Kasten K10 images pushed to the required private Registry, we can proceed with the Kasten K10 installation in AirGap mode.\u00a0 For this example, we will deploy Kasten K10 using <strong>Basic authentication<\/strong>.\u00a0 For more authentication options, please refer to <a href=\"https:\/\/docs.kasten.io\/latest\/access\/authentication.html\" target=\"_blank\" rel=\"noopener\">Kasten documentation<\/a>.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Pre-requisites\"><\/span>Pre-requisites<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li>Add the Kasten Helm charts repository<\/li>\n<\/ul>\n<style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-6 > .CodeMirror, .fusion-syntax-highlighter-6 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-6 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-6 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-6 fusion-syntax-highlighter-theme-light\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:var(--awb-color3);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_6\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_6\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_6\" data-readOnly=\"nocursor\" data-lineNumbers=\"1\" data-lineWrapping=\"\" data-theme=\"default\" data-mode=\"text\/x-sh\">helm repo add kasten https:\/\/charts.kasten.io\/<\/textarea><\/div>\n<ul>\n<li>Run the pre-flight Checks.\u00a0 As we want to install Kasten in AirGap mode using a Private Registry, the pre-flight check should be run using the following command (don&#8217;t forget to authenticate against the private registry first):<\/li>\n<\/ul>\n<style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-7 > .CodeMirror, .fusion-syntax-highlighter-7 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-7 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-7 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-7 fusion-syntax-highlighter-theme-light\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:var(--awb-color3);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_7\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_7\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_7\" data-readOnly=\"nocursor\" data-lineNumbers=\"1\" data-lineWrapping=\"\" data-theme=\"default\" data-mode=\"text\/x-sh\">curl https:\/\/docs.kasten.io\/tools\/k10_primer.sh | bash \/dev\/stdin -i repo.example.com\/k10tools:6.5.5\n\nFor example\ncurl https:\/\/docs.kasten.io\/tools\/k10_primer.sh | bash \/dev\/stdin -i 12345678910.dkr.ecr.eu-west-3.amazonaws.com\/k10tools:6.5.5<\/textarea><\/div>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.05.16.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-1554\" src=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.05.16-300x292.png\" alt=\"\" width=\"300\" height=\"292\" srcset=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.05.16-200x195.png 200w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.05.16-300x292.png 300w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.05.16-400x389.png 400w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.05.16-600x584.png 600w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.05.16-768x748.png 768w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.05.16-800x779.png 800w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.05.16-1024x997.png 1024w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.05.16-1200x1168.png 1200w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.05.16-1536x1495.png 1536w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Create a namespace for Kasten<\/li>\n<\/ul>\n<style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-8 > .CodeMirror, .fusion-syntax-highlighter-8 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-8 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-8 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-8 fusion-syntax-highlighter-theme-light\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:var(--awb-color3);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_8\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_8\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_8\" data-readOnly=\"nocursor\" data-lineNumbers=\"1\" data-lineWrapping=\"\" data-theme=\"default\" data-mode=\"text\/x-sh\">kubectl create namespace kasten-io<\/textarea><\/div>\n<ul>\n<li>Generate <a class=\"reference external\" href=\"https:\/\/httpd.apache.org\/docs\/2.4\/programs\/htpasswd.html\">htpasswd<\/a> credentials (required for basic authentication) by either using an online <a class=\"reference external\" href=\"http:\/\/www.htaccesstools.com\/htpasswd-generator\/\">tool<\/a> or via the <cite>htpasswd.<\/cite><\/li>\n<\/ul>\n<style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-9 > .CodeMirror, .fusion-syntax-highlighter-9 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-9 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-9 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-9 fusion-syntax-highlighter-theme-light\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:var(--awb-color3);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_9\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_9\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_9\" data-readOnly=\"nocursor\" data-lineNumbers=\"1\" data-lineWrapping=\"\" data-theme=\"default\" data-mode=\"text\/x-sh\">LOGIN=$(htpasswd   -n admin)<\/textarea><\/div>\n<ul>\n<li>Set environment variables to provide the AWS Access Key and AWS Secret Access Key.\u00a0 To know the minumum permissions required for the AWS keys used to install Kasten, please check the <a href=\"https:\/\/docs.kasten.io\/latest\/install\/aws\/aws.html#installing-k10\" target=\"_blank\" rel=\"noopener\">Kasten documentation<\/a>:<\/li>\n<\/ul>\n<style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-10 > .CodeMirror, .fusion-syntax-highlighter-10 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-10 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-10 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-10 fusion-syntax-highlighter-theme-light\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:var(--awb-color3);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_10\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_10\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_10\" data-readOnly=\"nocursor\" data-lineNumbers=\"1\" data-lineWrapping=\"\" data-theme=\"default\" data-mode=\"text\/x-sh\">AWS_ACCESS_KEY_ID=EEEEEEEEEEEEEEEEEEEE\nAWS_SECRET_ACCESS_KEY=dsflkasjdklfjq3948523234opwfjlsjfdDikej4<\/textarea><\/div>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Kasten_Installation\"><\/span>Kasten Installation<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Now that we have the Kasten images in the AWS ECR private registry, and that we&#8217;ve already completed the pre-requisites, we can install Kasten with the following Helm command:<\/p>\n<style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-11 > .CodeMirror, .fusion-syntax-highlighter-11 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-11 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-11 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-11 fusion-syntax-highlighter-theme-light\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:var(--awb-color3);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_11\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_11\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_11\" data-readOnly=\"nocursor\" data-lineNumbers=\"1\" data-lineWrapping=\"\" data-theme=\"default\" data-mode=\"text\/x-sh\">helm   install k10 kasten\/k10 --namespace=kasten-io --version=6.5.5 \\\n --set secrets.awsAccessKeyId=\"${AWS_ACCESS_KEY_ID}\" \\\n --set secrets.awsSecretAccessKey=\"${AWS_SECRET_ACCESS_KEY}\" \\\n --set metering.mode=airgap \\\n --set global.airgapped.repository=12345678910.dkr.ecr.eu-west-3.amazonaws.com \\\n --set secrets.dockerConfig=$(base64 -w 0   < ${HOME}\/.docker\/config.json) \\\n --set global.imagePullSecret=\"k10-ecr\" \\\n --set externalGateway.create=true \\\n --set auth.basicAuth.enabled=true \\\n --set auth.basicAuth.htpasswd=\"${LOGIN}\"<\/textarea><\/div>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.09.21.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-1555\" src=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.09.21-300x248.png\" alt=\"\" width=\"300\" height=\"248\" srcset=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.09.21-200x165.png 200w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.09.21-300x248.png 300w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.09.21-400x330.png 400w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.09.21-600x496.png 600w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.09.21-768x634.png 768w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.09.21-800x661.png 800w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.09.21-1024x846.png 1024w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.09.21-1200x991.png 1200w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.09.21.png 1334w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>This Helm command includes the following parameters:<\/p>\n<div>\n<ul>\n<li>set global.airgapped.repository=12345678910.dkr.ecr.eu-west-3.amazonaws.com\n<ul>\n<li>This parameter allows to provide the URL for the private container registry, in this case an AWS ECR private registry.\u00a0\u00a0 This parameter alone doesn&#8217;t enable the Air-Gap mode in Kasten, but just allows us to provide the URL for a private container registry instead of using the default registry used to install Kasten.\u00a0 It means that we can use this Private Container Registry and still have an AWS EKS cluster with internet access.<\/li>\n<\/ul>\n<\/li>\n<li>\n<div>\n<div>set secrets.dockerConfig=$(base64 -w 0 &lt; ${HOME}\/.docker\/config.json)<\/div>\n<\/div>\n<ul>\n<li>If the Container Registry that has been provided with the <code class=\"docutils literal notranslate\"><span class=\"pre\">global.airgapped.repository<\/span><\/code> parameter is private, credentials for that repository can be provided using <code class=\"docutils literal notranslate\"><span class=\"pre\">secrets.dockerConfig<\/span><\/code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">global.imagePullSecret<\/span><\/code> flags.\u00a0 This parameter basically provides access to the docker config.json file, which contains the required credentials to access the Private Container Registry (Check the <a href=\"https:\/\/patriciocerda.com\/?p=1548#Push_Kasten_Images_to_AWS_ECR\"><strong>Push Kasten Images to AWS ECR<\/strong><\/a> section)<\/li>\n<\/ul>\n<\/li>\n<li>\n<div>\n<div>set global.imagePullSecret=&#8221;k10-ecr&#8221;<\/div>\n<\/div>\n<ul>\n<li>The Helm chart by default will create a secret with the name <code class=\"docutils literal notranslate\"><span class=\"pre\">k10-ecr<\/span><\/code> with the value that has been provided for <code class=\"docutils literal notranslate\"><span class=\"pre\">secrets.dockerConfig<\/span><\/code>.\u00a0 For this secret to be used when Helm is pulling the images from the Private Container Registry to install Kasten, we must include this parameter.<\/li>\n<\/ul>\n<\/li>\n<li>set metering.mode=airgap\n<ul>\n<li>This parameter allows to run K10 in a network without the ability to connect to the internet, enabling the Kasten Air-gapped mode.<\/li>\n<li>Important: If <code class=\"docutils literal notranslate\"><span class=\"pre\">metering.mode=airgap<\/span><\/code> is not set in an offline cluster, some functionality will be disabled, including the license validation.\u00a0 We will get other multiple error messages too.<\/li>\n<\/ul>\n<\/li>\n<li>set externalGateway.create=true\n<ul>\n<li>This parameter enables the use of a Load Balancer to access the Kasten Dashboard.<\/li>\n<\/ul>\n<\/li>\n<li>\n<div>\n<div>set auth.basicAuth.enabled=true<\/div>\n<\/div>\n<ul>\n<li>This parameter enables the use of <a href=\"https:\/\/docs.kasten.io\/latest\/access\/authentication.html#basic-authentication\" target=\"_blank\" rel=\"noopener\">Basic Authentication<\/a>.<\/li>\n<\/ul>\n<\/li>\n<li>\n<div>\n<div>set auth.basicAuth.htpasswd=&#8221;${LOGIN}&#8221;<\/div>\n<\/div>\n<ul>\n<li>This parameter provides the admin password to access Kasten dashboard.\u00a0 This was set previously in the pre-requisites section.<\/li>\n<\/ul>\n<\/li>\n<li>\n<div>\n<div>set secrets.awsAccessKeyId=&#8221;${AWS_ACCESS_KEY_ID}&#8221;<\/div>\n<\/div>\n<ul>\n<li>This parameter provides the AWS Access Key ID using environment variables.<\/li>\n<\/ul>\n<\/li>\n<li>\n<div>\n<div>set secrets.awsSecretAccessKey=&#8221;${AWS_SECRET_ACCESS_KEY}&#8221;<\/div>\n<\/div>\n<ul>\n<li>This parameter provides the AWS Secret Access Key using environment variables.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Now we can monitor the installation of Kasten, making sure all pods are up and running with the following command:<\/p>\n<style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-12 > .CodeMirror, .fusion-syntax-highlighter-12 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-12 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-12 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-12 fusion-syntax-highlighter-theme-light\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:var(--awb-color3);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_12\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_12\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_12\" data-readOnly=\"nocursor\" data-lineNumbers=\"1\" data-lineWrapping=\"\" data-theme=\"default\" data-mode=\"text\/x-sh\">watch kubectl get pods -n kasten-io<\/textarea><\/div>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.15.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-1556\" src=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.15-300x182.png\" alt=\"\" width=\"300\" height=\"182\" srcset=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.15-200x121.png 200w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.15-300x182.png 300w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.15-400x243.png 400w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.15-600x364.png 600w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.15-768x466.png 768w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.15-800x486.png 800w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.15-1024x622.png 1024w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.15.png 1087w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Once all pods are running, we can check the IP address of the Load Balancer created to provide access to Kasten dashboard.<\/p>\n<style type=\"text\/css\" scopped=\"scopped\">.fusion-syntax-highlighter-13 > .CodeMirror, .fusion-syntax-highlighter-13 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-13 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-13 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }<\/style><div class=\"fusion-syntax-highlighter-container fusion-syntax-highlighter-13 fusion-syntax-highlighter-theme-light\" style=\"opacity:0;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;font-size:14px;border-width:1px;border-style:solid;border-color:var(--awb-color3);\"><div class=\"syntax-highlighter-copy-code\"><span class=\"syntax-highlighter-copy-code-title\" data-id=\"fusion_syntax_highlighter_13\" style=\"font-size:14px;\">Copy to Clipboard<\/span><\/div><label for=\"fusion_syntax_highlighter_13\" class=\"screen-reader-text\">Syntax Highlighter<\/label><textarea class=\"fusion-syntax-highlighter-textarea\" id=\"fusion_syntax_highlighter_13\" data-readOnly=\"nocursor\" data-lineNumbers=\"1\" data-lineWrapping=\"\" data-theme=\"default\" data-mode=\"text\/x-sh\">kubectl get services -n kasten-io<\/textarea><\/div>\n<p><a href=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.52.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-1557\" src=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.52-300x84.png\" alt=\"\" width=\"300\" height=\"84\" srcset=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.52-200x56.png 200w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.52-300x84.png 300w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.52-400x111.png 400w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.52-600x167.png 600w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.52-768x214.png 768w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.52-800x223.png 800w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.52-1024x285.png 1024w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.52-1200x334.png 1200w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.10.52-1536x428.png 1536w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Finally we connect to Kasten K10 dashboard using a browser and the IP address got in the previous step.\u00a0 For authentication we use the user &#8220;admin&#8221; and the password set previously with htpasswd.<\/p>\n<p><a href=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.12.51.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-1558\" src=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.12.51-300x104.png\" alt=\"\" width=\"300\" height=\"104\" srcset=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.12.51-200x69.png 200w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.12.51-300x104.png 300w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.12.51-400x139.png 400w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.12.51-600x208.png 600w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.12.51-768x266.png 768w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.12.51-800x277.png 800w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.12.51-1024x355.png 1024w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.12.51-1200x416.png 1200w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.12.51-1536x532.png 1536w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.13.45.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-1559\" src=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.13.45-300x150.png\" alt=\"\" width=\"300\" height=\"150\" srcset=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.13.45-200x100.png 200w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.13.45-300x150.png 300w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.13.45-400x201.png 400w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.13.45-540x272.png 540w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.13.45-600x301.png 600w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.13.45-768x385.png 768w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.13.45-800x401.png 800w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.13.45-1024x513.png 1024w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.13.45-1200x602.png 1200w, https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/Captura-de-pantalla-2024-02-26-a-las-15.13.45-1536x770.png 1536w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hi everyone.\u00a0 A very common requests to deploy Kasten in<\/p>\n","protected":false},"author":1,"featured_media":1552,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[53,28,25,26,27],"tags":[86,35,34,37,87,36,33,32,29,31],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kasten Air-Gapped installation with AWS Elastic Container Private Registry - vLatam<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/patriciocerda.com\/?p=1548\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kasten Air-Gapped installation with AWS Elastic Container Private Registry - vLatam\" \/>\n<meta property=\"og:description\" content=\"Hi everyone.\u00a0 A very common requests to deploy Kasten in\" \/>\n<meta property=\"og:url\" content=\"https:\/\/patriciocerda.com\/?p=1548\" \/>\n<meta property=\"og:site_name\" content=\"vLatam\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-26T14:24:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/IntroBlog1548.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"pcerda\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"pcerda\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/patriciocerda.com\/?p=1548\",\"url\":\"https:\/\/patriciocerda.com\/?p=1548\",\"name\":\"Kasten Air-Gapped installation with AWS Elastic Container Private Registry - vLatam\",\"isPartOf\":{\"@id\":\"https:\/\/patriciocerda.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/patriciocerda.com\/?p=1548#primaryimage\"},\"image\":{\"@id\":\"https:\/\/patriciocerda.com\/?p=1548#primaryimage\"},\"thumbnailUrl\":\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/IntroBlog1548.png\",\"datePublished\":\"2024-02-26T14:24:00+00:00\",\"author\":{\"@id\":\"https:\/\/patriciocerda.com\/#\/schema\/person\/613aa192d7dbcedcd20e08318891aa2a\"},\"breadcrumb\":{\"@id\":\"https:\/\/patriciocerda.com\/?p=1548#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/patriciocerda.com\/?p=1548\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/patriciocerda.com\/?p=1548#primaryimage\",\"url\":\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/IntroBlog1548.png\",\"contentUrl\":\"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/IntroBlog1548.png\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/patriciocerda.com\/?p=1548#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/patriciocerda.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kasten Air-Gapped installation with AWS Elastic Container Private Registry\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/patriciocerda.com\/#website\",\"url\":\"https:\/\/patriciocerda.com\/\",\"name\":\"vLatam\",\"description\":\"El Blog de Patricio Cerda\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/patriciocerda.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/patriciocerda.com\/#\/schema\/person\/613aa192d7dbcedcd20e08318891aa2a\",\"name\":\"pcerda\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/patriciocerda.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/patriciocerda.com\/wp-content\/litespeed\/avatar\/ce92117b9294544adeaad229a8fbac13.jpg?ver=1776772888\",\"contentUrl\":\"https:\/\/patriciocerda.com\/wp-content\/litespeed\/avatar\/ce92117b9294544adeaad229a8fbac13.jpg?ver=1776772888\",\"caption\":\"pcerda\"},\"url\":\"https:\/\/patriciocerda.com\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kasten Air-Gapped installation with AWS Elastic Container Private Registry - vLatam","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/patriciocerda.com\/?p=1548","og_locale":"en_US","og_type":"article","og_title":"Kasten Air-Gapped installation with AWS Elastic Container Private Registry - vLatam","og_description":"Hi everyone.\u00a0 A very common requests to deploy Kasten in","og_url":"https:\/\/patriciocerda.com\/?p=1548","og_site_name":"vLatam","article_published_time":"2024-02-26T14:24:00+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/IntroBlog1548.png","type":"image\/png"}],"author":"pcerda","twitter_card":"summary_large_image","twitter_misc":{"Written by":"pcerda","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/patriciocerda.com\/?p=1548","url":"https:\/\/patriciocerda.com\/?p=1548","name":"Kasten Air-Gapped installation with AWS Elastic Container Private Registry - vLatam","isPartOf":{"@id":"https:\/\/patriciocerda.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/patriciocerda.com\/?p=1548#primaryimage"},"image":{"@id":"https:\/\/patriciocerda.com\/?p=1548#primaryimage"},"thumbnailUrl":"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/IntroBlog1548.png","datePublished":"2024-02-26T14:24:00+00:00","author":{"@id":"https:\/\/patriciocerda.com\/#\/schema\/person\/613aa192d7dbcedcd20e08318891aa2a"},"breadcrumb":{"@id":"https:\/\/patriciocerda.com\/?p=1548#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/patriciocerda.com\/?p=1548"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/patriciocerda.com\/?p=1548#primaryimage","url":"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/IntroBlog1548.png","contentUrl":"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/IntroBlog1548.png","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/patriciocerda.com\/?p=1548#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/patriciocerda.com\/"},{"@type":"ListItem","position":2,"name":"Kasten Air-Gapped installation with AWS Elastic Container Private Registry"}]},{"@type":"WebSite","@id":"https:\/\/patriciocerda.com\/#website","url":"https:\/\/patriciocerda.com\/","name":"vLatam","description":"El Blog de Patricio Cerda","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/patriciocerda.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/patriciocerda.com\/#\/schema\/person\/613aa192d7dbcedcd20e08318891aa2a","name":"pcerda","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/patriciocerda.com\/#\/schema\/person\/image\/","url":"https:\/\/patriciocerda.com\/wp-content\/litespeed\/avatar\/ce92117b9294544adeaad229a8fbac13.jpg?ver=1776772888","contentUrl":"https:\/\/patriciocerda.com\/wp-content\/litespeed\/avatar\/ce92117b9294544adeaad229a8fbac13.jpg?ver=1776772888","caption":"pcerda"},"url":"https:\/\/patriciocerda.com\/?author=1"}]}},"jetpack_featured_media_url":"https:\/\/patriciocerda.com\/wp-content\/uploads\/2024\/02\/IntroBlog1548.png","_links":{"self":[{"href":"https:\/\/patriciocerda.com\/index.php?rest_route=\/wp\/v2\/posts\/1548"}],"collection":[{"href":"https:\/\/patriciocerda.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/patriciocerda.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/patriciocerda.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/patriciocerda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1548"}],"version-history":[{"count":5,"href":"https:\/\/patriciocerda.com\/index.php?rest_route=\/wp\/v2\/posts\/1548\/revisions"}],"predecessor-version":[{"id":1560,"href":"https:\/\/patriciocerda.com\/index.php?rest_route=\/wp\/v2\/posts\/1548\/revisions\/1560"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/patriciocerda.com\/index.php?rest_route=\/wp\/v2\/media\/1552"}],"wp:attachment":[{"href":"https:\/\/patriciocerda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1548"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/patriciocerda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1548"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/patriciocerda.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1548"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}