<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Umesh Kumar on Medium]]></title>
        <description><![CDATA[Stories by Umesh Kumar on Medium]]></description>
        <link>https://medium.com/@umeshdotcloud?source=rss-ffed4a6b22dd------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*Z3mL5FJ-UXh_lzqZ7EzkdA.jpeg</url>
            <title>Stories by Umesh Kumar on Medium</title>
            <link>https://medium.com/@umeshdotcloud?source=rss-ffed4a6b22dd------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Thu, 12 Nov 2026 04:36:01 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@umeshdotcloud/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Overcoming URL Rewrite Roadblocks in Kubernetes (The Old Nginx way): Journey from AWS ECS to GCP…]]></title>
            <link>https://blog.thecloudside.com/overcoming-url-rewrite-roadblocks-in-kubernetes-the-old-nginx-way-journey-from-aws-ecs-to-gcp-8c790644b06b?source=rss-ffed4a6b22dd------2</link>
            <guid isPermaLink="false">https://medium.com/p/8c790644b06b</guid>
            <category><![CDATA[api-gateway]]></category>
            <category><![CDATA[cloud]]></category>
            <category><![CDATA[kubernetes]]></category>
            <category><![CDATA[nginx-proxy]]></category>
            <category><![CDATA[url-rewrite]]></category>
            <dc:creator><![CDATA[Umesh Kumar]]></dc:creator>
            <pubDate>Mon, 03 Apr 2023 11:58:17 GMT</pubDate>
            <atom:updated>2023-04-03T12:16:49.019Z</atom:updated>
            <content:encoded><![CDATA[<h3>Overcoming URL Rewrite Roadblocks in Kubernetes (The Old Nginx way): Journey from AWS ECS to GCP GKE</h3><p>One of our customers was undergoing a migration from their existing ECS cluster on AWS to Kubernetes (GKE) for their 20 microservices. One of the key challenges that we faced during this migration was handling the complex rewriting that was configured via AWS API Gateway.</p><p>In this blog post, we will discuss how we managed multiple URL redirects while moving a customer from AWS ECS to GKE, using a simple Nginx Proxy deployment and Config Maps in Kubernetes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*QjPeSaI7SuaZOSav" /><figcaption>Nginx proxy as deployment and exposed as HTTP(s) LB</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*sfEZ8bJEIca_OTuwoUOa1A.png" /><figcaption>We had about 100 of such rewriting covering all 20 microservice</figcaption></figure><p><strong>Challenge</strong></p><p>Our customer had multiple URL rewrites configured at their API Gateway to route requests within AWS ECS. These redirects were tightly integrated with the customer’s applications and their clients&#39; applications, which made it impossible to remove them completely unless code changes at both theirs and their 100s of clients&#39; applications. We needed to find a solution that would enable us to manage these redirects while migrating the customer to GKE without impacting their functionality.</p><p><strong>Solution</strong></p><p>Initially, we thought of using a Ngnix Ingress on the GKE cluster to solve for the rewrite. This failed as the ingress was not built to support such complex Rewrites (Path based rewrites where the value of the path will not remain the same while rewrites are happening). After evaluating various options, we decided to deploy a simple <strong>Nginx Proxy</strong> as a service in the Kubernetes cluster, which acted as an <strong>entry point</strong> for all incoming traffic. We then used old-school Nginx rewrite rules to handle the URL rewrites required by the customer. These rules were stored in <em>Config Maps</em>, which we updated whenever there was a change in the rewrite requirements.</p><p><strong>Deployment of Nginx Proxy: </strong>We deployed the Nginx Proxy as a Kubernetes Deployment with three replicas(HA). We used a ConfigMap to define the Nginx configuration file and mounted it as a volume in the Nginx container. The Nginx configuration file contained the rewrite rules required by the customer’s applications, which were defined using the <strong><em>Nginx Rewrite module</em></strong>. <a href="https://github.com/apnaklub-tech/k8s-env/blob/nginx-config/nginx.conf">nginx.conf</a></p><pre>user  nginx;<br>worker_processes  1;<br>error_log  /var/log/nginx/error.log warn;<br>pid        /var/run/nginx.pid;<br>events {<br>    worker_connections  1024;<br>}<br>http {<br>    include       /etc/nginx/mime.types;<br>    default_type  application/octet-stream;<br>    log_format  main  &#39;$remote_addr - $remote_user [$time_local] &quot;$request&quot; &#39;<br>    &#39;$status $body_bytes_sent &quot;$http_referer&quot; &#39;<br>    &#39;&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot; trace: &quot;$http_x_trace_id&quot; proxy: &quot;$proxy_host&quot; time: $request_time&#39;;<br>    access_log  /var/log/nginx/access.log  main;<br>    sendfile        on;<br>    keepalive_timeout  60;<br>    proxy_set_header X-Real-IP  $remote_addr;<br>    #proxy_set_header X-Real-IP-LK  $var;<br>    proxy_set_header X-Forwarded-For http://cloudside.dev;<br>    proxy_set_header X-Forwarded-Proto  $scheme;<br>    proxy_connect_timeout 240;<br>    proxy_send_timeout 240;<br>    proxy_read_timeout 240;<br><br>    server {<br><br>        listen 80;<br>        server_name cloudside.dev;<br><br>        ############ Nginx health checking path<br>        location /index.html {<br>            root   /usr/share/nginx/html;<br>            index  index.html index.htm;<br>        }<br>        ############ Service 1 rewrites<br>        location /xyz/svc1 {<br>            rewrite ^/xyz/svc1$ /svc1$ break;<br>            proxy_pass http://svc1;<br>        }<br>         ############ Service 2 rewrites<br>        location = /xyz/pqr/svc2 {<br>            rewrite ^/xyz/pqr/svc2(.*)$ /svc2/pqr$1 break;<br>            proxy_pass http://svc2;<br>        }<br>         ########### Service 3 rewrites<br>        location = /rest/svc3/v1/webhook {<br>            rewrite ^/rest/svc3/v1/webhook(.*)$ /svc3/v1/webhook$1 break;<br>            proxy_pass http://svc3;<br>        }<br>    }<br>    include /etc/nginx/conf.d/*.conf;<br>}</pre><p>The above configuration file shows how we handled the URL rewrite for the customer’s applications. We used the rewrite directive to modify the incoming request URL, and then passed it to the corresponding Kubernetes service using proxy_pass.</p><p><strong>Use of Config Maps:</strong> We used Config Maps to store the Nginx configuration file as a key-value pair. This enabled us to update the configuration file whenever there was a change in the rewrite requirements, without having to redeploy the Nginx Proxy.</p><pre>kubectl create configmap nginx-configmap --from-file=nginx.conf</pre><p>or write the yaml</p><pre>apiVersion: v1<br>kind: ConfigMap<br>metadata:<br>  name: nginx-conf<br>data:<br>  nginx.conf: |<br>    user  nginx;<br>    worker_processes  1;<br>    error_log  /var/log/nginx/error.log warn;<br>    pid        /var/run/nginx.pid;<br>    events {<br>        worker_connections  1024;<br>    }<br>    http {<br>        include       /etc/nginx/mime.types;<br>        default_type  application/octet-stream;<br>        log_format  main  &#39;$remote_addr - $remote_user [$time_local] &quot;$request&quot; &#39;<br>        &#39;$status $body_bytes_sent &quot;$http_referer&quot; &#39;<br>        &#39;&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot; trace: &quot;$http_x_trace_id&quot; proxy: &quot;$proxy_host&quot; time: $request_time&#39;;<br>        access_log  /var/log/nginx/access.log  main;<br>        sendfile        on;<br>        keepalive_timeout  60;<br>        proxy_set_header X-Real-IP  $remote_addr;<br>        #proxy_set_header X-Real-IP-LK  $var;<br>        proxy_set_header X-Forwarded-For http://cloudside.dev;<br>        proxy_set_header X-Forwarded-Proto  $scheme;<br>        proxy_connect_timeout 240;<br>        proxy_send_timeout 240;<br>        proxy_read_timeout 240;<br>    <br>        server {<br>    <br>            listen 80;<br>            server_name cloudside.dev;<br>    <br>            ############ Nginx health checking path<br>            location /index.html {<br>                root   /usr/share/nginx/html;<br>                index  index.html index.htm;<br>            }<br>    <br>            ############ Service 1 rewrites<br>            location /xyz/svc1 {<br>                rewrite ^/xyz/svc1$ /svc1$ break;<br>                proxy_pass http://svc1;<br>            }<br>    <br>            ############ Service 2 rewrites<br>            location = /xyz/pqr/svc2 {<br>                rewrite ^/xyz/pqr/svc2(.*)$ /svc2/pqr$1 break;<br>                proxy_pass http://svc2;<br>            }<br>    <br>            ########### Service 3 rewrites<br>            location = /rest/svc3/v1/webhook {<br>                rewrite ^/rest/svc3/v1/webhook(.*)$ /svc3/v1/webhook$1 break;<br>                proxy_pass http://svc3;<br>            }<br>        }<br>        include /etc/nginx/conf.d/*.conf;<br>    }</pre><p>If we want to make any changes to the config map, we need to update the config map and do a rolling restart to the Nginx deployment to pick up the latest config map. We have 3 replicas of the proxy running hence the rolling restart of deployment will update the config map without any downtime. If you make a <em>syntax</em> error in the config map, the rolling update will fail and the new Nginx pod will not come up resulting in your production traffic not being affected.</p><p>While this approach is not ideal for managing service rewrites in the long term, it can be of great help during a transition to a full-fledged Gateway implementation. In my opinion, <a href="https://gateway-api.sigs.k8s.io/">Gateway</a> will soon replace ingress in Kubernetes with some great functionalities in the works.</p><p>Happy Engineering on <a href="https://medium.com/u/4f3f4ee0f977">Google Cloud</a>!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8c790644b06b" width="1" height="1" alt=""><hr><p><a href="https://blog.thecloudside.com/overcoming-url-rewrite-roadblocks-in-kubernetes-the-old-nginx-way-journey-from-aws-ecs-to-gcp-8c790644b06b">Overcoming URL Rewrite Roadblocks in Kubernetes (The Old Nginx way): Journey from AWS ECS to GCP…</a> was originally published in <a href="https://blog.thecloudside.com/">The Cloudside View</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Issues faced with Anthos Installation to VMware vSphere]]></title>
            <link>https://blog.thecloudside.com/issues-faced-with-anthos-installation-to-vmware-vsphere-9816fbba2da0?source=rss-ffed4a6b22dd------2</link>
            <guid isPermaLink="false">https://medium.com/p/9816fbba2da0</guid>
            <category><![CDATA[anthos-issues]]></category>
            <category><![CDATA[google-cloud-platform]]></category>
            <category><![CDATA[anthos-on-vmware]]></category>
            <category><![CDATA[vmware]]></category>
            <category><![CDATA[cloud]]></category>
            <dc:creator><![CDATA[Umesh Kumar]]></dc:creator>
            <pubDate>Wed, 02 Mar 2022 06:54:10 GMT</pubDate>
            <atom:updated>2022-03-02T09:03:10.581Z</atom:updated>
            <content:encoded><![CDATA[<h3>Issues faced with Anthos Installation On VMware vSphere</h3><h4>Errors &amp; Solutions — Anthos on VMware</h4><p>This is part of the series of posts for setting up Anthos on VMware environment. Take a look at the step by step guide for the <a href="https://blog.thecloudside.com/anthos-cluster-on-vmware-vsphere-856e5868b1f3">initial deployment of Anthos on VMware</a>. In this post, I have consolidated all the issues and errors I faced during the installation of Admin Workstation VM, Admin Cluster, Seesaw LB deployment, and User Cluster along with debugging steps and solutions.</p><h4>Installation Errors of Admin Workstation VM</h4><p>**</p><blockquote><strong>Error:</strong> ComputeResource is not assignable to type mo.ClusterComputeResource” during deployment</blockquote><blockquote><strong>Solutions:</strong> Your cluster has only <strong>one</strong> ESXi host. Please add another host to your cluster and you will be able to move pass this error.</blockquote><p>****</p><blockquote><strong>Error:</strong> resource pool not found</blockquote><blockquote><strong>Solutions:</strong> You will encounter this error if you have not created a resource pool on <strong>vSphere Enterprise Plus </strong>license. If you are on <strong>vSphere Standard </strong>license, you can’t create the resource pool as resource pool creation requires DRS support. DRS support is not availbe in standard license. What can you do now?</blockquote><blockquote>You can fill in <em>resourcePool: &quot;your_folder/your_cluster/Resources/&quot;</em></blockquote><blockquote>Note: the slash(/) at the end is about 3 hours troubleshooting if you are not a VMware expert :)</blockquote><h4>Installation Errors of Admin Cluster</h4><p>**</p><blockquote><strong>Error:</strong> [FAILURE] Test VM: VCenter access and permission: unable to curl vSphere session endpoint</blockquote><blockquote><strong>Solutions:</strong> This errors is usually encountered when your vCenter endpoint (vcenter.cloudside.in) is not reachbale from the test VM created in check-config file. When your endpoint is a private endpoint and you have not defined a local DNS server, you will face this. To<strong> solve this</strong>, we need to update the <strong>dnsServers:</strong> field under <strong>hostConfig</strong> entry in <a href="https://gist.github.com/umesh-cloudside/8d164f8dbe613e68a07ba3cac8356b5d">admin-cluster.yaml</a> for our endpoint to be available in the network.</blockquote><blockquote>You can also do a nslookup test from the admin workstation VM to check which DNS server your system is using.</blockquote><blockquote>nslookup vcenter.cloudside.in</blockquote><blockquote><em>you must update the </em>Admin workstation<em> DNS servers manually at this moment for all operations on the admin workstation to work.</em></blockquote><p>****</p><blockquote><strong><em>Error:</em></strong> <strong>CreateError:</strong> Failed to check if machine gke-admin-xxx exists: failed to create vsphere client: Post “https://vcenter.cloudside.in/sdk&quot;:</blockquote><blockquote>dial tcp: lookup vcenter.cloudside.in on 198.51.100.1:53: no such host</blockquote><blockquote><strong><em>Solutions:</em></strong><em> The solutions for this error is same as </em><strong><em>above explained error</em></strong><em>,</em> [FAILURE] Test VM: VCenter access and permission: unable to curl vSphere session endpoint</blockquote><h4>Installation Errors of Seesaw LB VM for User Cluster</h4><blockquote><strong><em>Error:</em></strong> Seesaw LB VM creation <strong>timeouts</strong> as the creation of the template is taking too long on vCenter.</blockquote><blockquote>gkectl create loadbalancer command is failing before the LB VM can be created.</blockquote><blockquote><strong><em>Solutions:</em></strong><em> This error could occure if you are using HDD in your physical host datastore. In my case, the base OS image </em><strong>ubuntu_containerd<em> </em></strong><em>was stored in a different datastore on different ESXi host compaired to the user cluster creation host. The transfer time of the OS image from one datastore to another was taking alot of time and failing this operation. I has resource constrains on original host where admin cluster was running. Thats why I had to install the user cluster on anthoer host in vCenter datacenter.</em></blockquote><blockquote><em>To </em><strong><em>solve</em></strong><em> this issue,</em></blockquote><blockquote>1. I updated the <strong>datastore</strong> value in <em>admin-cluster.yaml</em>to another host datastore(server2_datastore1). This would mean that if the VM template for base OS are not found on vCenter datacenter, gkectl will upload them again based on updated settings.</blockquote><blockquote>2. <strong>DELETE</strong> the old VM template files from old (server1_datastore1) datastore. Now run the validate configs command:</blockquote><pre><strong>sudo gkectl check-config --config admin-cluster.yaml --alsologtostderr --v=5</strong></pre><blockquote><em>This will upload the new VM templates to server2_datastore1 datastore. Now when you rerun the create Seesaw LB VM command, it will create the VM before gkectkl timeout.</em></blockquote><h4>General cleanups you have to do before rerunning the admin and user cluster create commands.</h4><ul><li>Delete the admin cluster data disk manually from vCenter portal. You can find the location of this under field <strong>dataDisk:</strong> on <a href="https://gist.github.com/umesh-cloudside/8d164f8dbe613e68a07ba3cac8356b5d">admin-cluster.yaml</a></li><li><strong>ISSUE:data disk admin-cluster-disk.vmdk already exists</strong>. After the HDD related timeout(gkectl create loadbalancer failures), the vCenter still creates the VM when the files are copied from one DS to another DS. You should delete that resource from vCenter portal before rerunning the create command.</li><li>The Anthos deployment also creates a local k8s cluster on the admin workstation. Sometimes due to any timeout failures, this cluster doesn’t get deleted automatically. to clean up this, use sudo docker stop gkectl-control-planeand sudo docker rm gkectl-control-plane<strong><em>commands.</em></strong></li><li>If user-cluster create command results in any error, please delete the already created resources using</li></ul><pre>sudo gkectl --kubeconfig kubeconfig delete cluster --cluster=user-cluster-name --force</pre><ul><li>gkectl creates a snapshot of the local cluster if the admin cluster create command results in a failure. If you are not able to debug the exact issues from gkectl logs, you can tap into the snapshot of the local cluster. (snapshot is saved in the current directory). From the snapshot, you can check the <strong>gkectlLogs </strong>folder.</li></ul><p>A lot of other such issues are already documented in <a href="https://cloud.google.com/anthos/clusters/docs/on-prem/1.10/known-issues/">official known issues guide</a>.</p><p>I hope this was helpful for you! happy reading and good luck solving your issues.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9816fbba2da0" width="1" height="1" alt=""><hr><p><a href="https://blog.thecloudside.com/issues-faced-with-anthos-installation-to-vmware-vsphere-9816fbba2da0">Issues faced with Anthos Installation to VMware vSphere</a> was originally published in <a href="https://blog.thecloudside.com/">The Cloudside View</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Anthos Cluster on VMware vSphere]]></title>
            <link>https://blog.thecloudside.com/anthos-cluster-on-vmware-vsphere-856e5868b1f3?source=rss-ffed4a6b22dd------2</link>
            <guid isPermaLink="false">https://medium.com/p/856e5868b1f3</guid>
            <category><![CDATA[anthos-on-vmware]]></category>
            <category><![CDATA[anthos]]></category>
            <category><![CDATA[google-cloud-platform]]></category>
            <category><![CDATA[kubernetes]]></category>
            <category><![CDATA[cloud]]></category>
            <dc:creator><![CDATA[Umesh Kumar]]></dc:creator>
            <pubDate>Tue, 01 Mar 2022 06:43:11 GMT</pubDate>
            <atom:updated>2022-03-02T07:09:26.143Z</atom:updated>
            <content:encoded><![CDATA[<h4>Installation and configuration of Anthos Cluster on vSphere</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fHTlpRp39FjGh2mrMdnVoA.png" /></figure><p>Anthos is relatively new and I had to go through a considerable amount of trial and error and a lot of gotcha moments while setting up Anthos in VMWare environment. I am sure the documentation will improve with time and with more customer adoption. Meanwhile, I thought it would be useful to publish my experiences in a series of posts.</p><p>In this post, we will cover the following</p><ul><li>VMWare pre-requisites</li><li>Deploy the Admin Workstation</li><li>Create and configure the admin cluster</li><li>Create and configure a user cluster</li></ul><p>Let’s get started! :)</p><h4>Getting your vSphere environment ready</h4><p>Google defines the minimum hardware requirements for Anthos deployment <a href="https://cloud.google.com/anthos/clusters/docs/on-prem/1.9/how-to/vsphere-requirements">here</a>. Please make sure you are not short on computing/disk/network resources.</p><p>a few additional things that you would miss is how your Vcenter settings are configured.</p><ol><li>vCenter Server <strong>Standard </strong>license is supported and you <strong>don’t need</strong> to have <strong>DRS</strong> enabled on the vCenter cluster (it&#39;s good if you have it).</li><li>Please create a <strong>folder, cluster, </strong>and a <strong>resourcePool. </strong>I know you can’t create a <strong>resourcePool </strong>if you are using a standard license, don’t worry! I have got you covered with a workaround in the config section below.</li><li>If you can, use SSD storage for your <strong>datastore </strong>as HDD slows down the overall performance of your Anthos cluster as the etcd (distributed data store for k8s) operations will be slower, ultimately resulting in slower response time from kube API server.</li><li>If you have a local DNS server and NTP server, note down the IPs as they will be required during configurations.</li><li>Make sure your cluster has internet access or bare minimum access to <a href="https://cloud.google.com/anthos/clusters/docs/on-prem/1.9/how-to/firewall-rules#allowlist_addresses">these google APIs</a>.</li><li>Finally, install <a href="https://cloud.google.com/anthos/clusters/docs/on-prem/1.9/downloads#193-gke4"><strong>gkeadm</strong></a> in your system.</li></ol><h4>Let&#39;s deploy the <strong>Admin Workstation</strong></h4><p>By including the admin workstation in the Anthos setup, google tried to minimize the errors you will make while <strong>creating</strong> and <strong>managing</strong> Anthos Admin and User clusters.</p><p>This VM is where you will write/<em>edit</em> the Admin and user cluster configurations. I am going to follow Google’s <a href="https://cloud.google.com/anthos/clusters/docs/on-prem/1.9/how-to/admin-workstation-quickstart#generate_templates_for_your_configuration_files">deployment guide</a> for Anthos going forward and highlight a few places where you may have confusion filling in the correct information.</p><p>Generate your templates:</p><pre><strong>./gkeadm create config</strong></pre><p>Check your current directory, you will have these 2 files (credential.yaml, admin-ws-config.yaml)created for you. Incredential.yaml file, fill in your vCenter username and password. Please make sure these creds have <a href="https://cloud.google.com/anthos/clusters/docs/on-prem/1.9/how-to/vsphere-requirements#vcenter-user-account-privileges">sufficient permissions</a> to create vCenter resources.</p><p>admin-ws-config.yaml file is where you set your workstation config. Follow this <a href="https://cloud.google.com/anthos/clusters/docs/on-prem/1.9/how-to/admin-workstation-quickstart#fill_in_admin-ws-configyaml">GCP guide</a> for it.</p><blockquote>How do you fill in <strong>resourcePool </strong>information if you are on Standard License</blockquote><p>resourcePool: “<em>your-folder/your-cluster/</em><strong>Resources/</strong>”</p><p>You can refer my admin-ws-config.yamlfile below</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/3bafb613b9473b8445a3877b2bec3525/href">https://medium.com/media/3bafb613b9473b8445a3877b2bec3525/href</a></iframe><p>Create your admin workstation, and automatically create service accounts:</p><pre><strong>./gkeadm create admin-workstation --auto-create-service-accounts</strong></pre><p>this should get you going and create the admin workstation and the required service account for Admin and User clusters. <strong><em>SSH into the admin workstation</em></strong> and verify that you have admin and user cluster config files plus the service account JSON files.</p><p>We will now prepare for setting up the LB configs and subsequently Admin cluster.</p><h4>Setting up LB configs</h4><p>We are using a <a href="https://cloud.google.com/anthos/clusters/docs/on-prem/1.9/how-to/seesaw-load-balance-quickstart"><strong><em>bundled</em></strong></a> <a href="https://cloud.google.com/anthos/clusters/docs/on-prem/1.9/how-to/setup-load-balance">Loadbalancing approach</a> for our setup(Seesaw LB). This is a good approach as we offload complete management of the LB back to Anthos. We, however, have to provide a small network configuration. let’s fill it in</p><p>We need the following IPs reserved for the LB setup for both Admin and User Cluster</p><ul><li><em>Admin Cluster Seesaw LB</em>: <strong>Node IPs</strong> to be filled in admin-seesaw-ipblock.yaml <strong>controlPlaneVIP </strong>and <strong>masterIP</strong> in admin-cluster.yaml</li></ul><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/aa8e617b8ff6be2f8f9422ab9549e234/href">https://medium.com/media/aa8e617b8ff6be2f8f9422ab9549e234/href</a></iframe><ul><li>User Cluster Seesaw LB: <strong>Node IPs</strong> to be filled in user-seesaw-ipblock.yaml <strong>controlPlaneVIP, masterIP</strong> and <strong>ingressVIP</strong> in user-cluster.yaml</li></ul><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/a37769899359004993a7e8dec23db66c/href">https://medium.com/media/a37769899359004993a7e8dec23db66c/href</a></iframe><p>We will be deploying the LB VM after the config checks are completed for the Admin cluster. let’s go ahead with Admin cluster creation.</p><h4>Let&#39;s deploy the Admin Cluster</h4><p>This is the brain of your Anthos cluster. essentially, Anthos is making you create a Kubernetes cluster(Admin Cluster) to manage another Kubernetes cluster (User Cluster) where you deploy your apps.</p><ol><li>If you are using the <strong>ipMode</strong> as <strong>static</strong>, let’s fill in admin-cluster-ipblock.yaml.you can skip this if your IP allocation mode is dynamic. we need at <a href="https://cloud.google.com/anthos/clusters/docs/on-prem/1.9/how-to/admin-cluster-quickstart#specify_static_ips_for_your_admin_cluster"><em>least </em><strong><em>5</em></strong><em> IPs</em></a> for admin cluster configuration. If your ipblock file has <strong>hostconfig </strong>entry, please remove it as this has been moved to the main admin-cluster.yamlfile.</li></ol><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/c28e9b2698946b974f91fd5475e9a6c1/href">https://medium.com/media/c28e9b2698946b974f91fd5475e9a6c1/href</a></iframe><p>2. Let&#39;s fill inadmin-cluster.yaml.Please fill in <strong>hostConfig </strong>section if your config file doesn’t have it.</p><p>I have added my comments with # on top of all important config, please follow along to create the cluster.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/1dce9c01aee6e29005db020d975a8e54/href">https://medium.com/media/1dce9c01aee6e29005db020d975a8e54/href</a></iframe><p>3. Its time to validate the configs we have filled:</p><pre><strong>sudo gkectl check-config --config admin-cluster.yaml --alsologtostderr --v=5</strong></pre><ul><li>This will check for all the prerequisites and would let you know of any misconfiguration.</li><li>The <strong>–alsologtostderr</strong> flag will show you the detailed logs of how and what checks are being performed. The output is actually difficult to read, but you would manage :)</li><li>After the initial tests are passed, this goes ahead and<em> creates a VM</em> and runs the startup script of the admin cluster on this VM to check if the environment is correctly configured.</li><li>While this is running, you can check that a VM named <em>check-config</em> gets created in your vCenter portal and gets deleted automatically once the startup script fails or succeeds.</li><li>Fix any issue you might have encountered.</li><li>This finally results in “<strong>All validation results were SUCCESS”</strong>.</li></ul><p>4. Successful config validations lead us to prepare our environment for creating the Admin cluster. Run gkectl <a href="https://cloud.google.com/anthos/clusters/docs/on-prem/1.9/how-to/create-admin-cluster#prepare">prepare</a> to initialize your vSphere environment:</p><pre><strong>gkectl prepare --config admin-cluster.yaml --skip-validation-all</strong></pre><ul><li>This downloads the uploads VM template <strong><em>gke-on-prem-ubuntu-1.x.x-gke.4</em></strong> and <strong><em>gke-on-prem-cos-1.x.x-gke.4 </em></strong>to the <em>datastore</em> in your vSphere. These VM templates contain<strong><em> </em>“ubuntu_containerd”</strong> and “<strong><em>cos”</em></strong> OS images.</li><li>The default OS image used for admin cluster is <strong>ubuntu_containerd </strong>but you can choose to use google’s own <strong>“cos” i.e container optimized OS with Docker.</strong></li><li>The <strong>–skip-validation-all</strong> flag will skip the validations tests that you have already performed in the previous step.</li></ul><p>5. After prepare, we will create the LB VM for the admin cluster. We are using <a href="https://cloud.google.com/anthos/clusters/docs/on-prem/1.9/how-to/seesaw-load-balance-quickstart">Seesaw LB</a>.</p><pre><strong>gkectl create loadbalancer --config admin-cluster.yaml alsologtostderr --v=5</strong></pre><ul><li>This would create and <em>configure</em> the Seesaw LB VM.</li><li>A successful creation would save a file named seesaw-for-gke-admin.yaml in your current directory. Admin cluster will use this file to connect and configure the LB part.</li></ul><p>6. Finally, let&#39;s create the admin cluster</p><pre><strong>gkectl create admin --config admin-cluster.yaml alsologtostderr --v=5</strong></pre><ul><li>This would take about 20–40 min depending upon the storage used in your vCenter environment. I was using HDD and it took about 35–40 min for this command to complete.</li><li>This creates the <strong>Admin cluster control plane</strong> VM and two VMs to run all k8s addons. Addons include things like GCP’s operations suite, Grafana, Prometheus, etc.(If enabled).</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mrkvNCQj6koA97SHj1yMgA.png" /></figure><ul><li>This automatically configures the Seesaw LB to be used with the Anthos admin cluster.</li><li>Once this successfully creates the admin cluster, it saves the admin kubeconfig file as <strong>kubeconfig</strong></li><li>Verify that your admin cluster is up and running by listing the nodes</li></ul><pre><strong>kubectl get nodes --kubeconfig kubeconfig</strong></pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CAr_E5eSSAgonL-iLdy0QA.png" /><figcaption>admin cluster nodes, showing master VM and addon nodes</figcaption></figure><p><strong>Congratulation!</strong> you have the <strong><em>brain</em></strong> of your Anthos cluster ready.</p><h4>Let’s deploy the User Cluster and complete the setup</h4><p>User cluster is where you run your apps. This is indeed a k8s cluster in itself just that it is operationally managed by the admin cluster.</p><p>For every user cluster, the admin cluster creates a <strong>User cluster control plane </strong>that runs<strong> </strong>the Kubernetes API server, the scheduler, and several controllers for the user cluster.</p><ol><li>Now, let’s start with updating the user-cluster-ipblock.yaml.for now, we are creating only a 3 node cluster but it&#39;s good to have more IPs reserved for the user cluster as you might need more user clusters to support your deployment.</li></ol><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/ac28773f127b40e04b1f4dfda8479825/href">https://medium.com/media/ac28773f127b40e04b1f4dfda8479825/href</a></iframe><p>2. Let’s fill inuser-cluster.yaml.Please fill in <strong>hostConfig </strong>section if your config file doesn’t have it. <em>hostConfig</em> is no longer supported in <strong>user-cluster-ipblock.yaml</strong>file.</p><ul><li>This If the user-cluster is going to be in the same environment as the admin cluster, please skip filling any information under vCenter until you want to make some changes to this global setting. (for ex: using a different datastore)</li><li>Anthos now also supports creating user clusters in <a href="https://cloud.google.com/anthos/clusters/docs/on-prem/1.9/how-to/create-user-cluster-in-separate-datacenter">different vCenter environments</a>, and for this, you have to make changes in the vCenter config.</li><li>Please make you keep the VM sizes to the min of what is defined in the config file below. config check will return errors if you configured less RAM/CPU.</li></ul><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/ed1c3b4825cb57469e6f0ae437b75a98/href">https://medium.com/media/ed1c3b4825cb57469e6f0ae437b75a98/href</a></iframe><p>3. Its time to validate the configs we have filled:</p><pre><strong>sudo gkectl check-config --kubeconfig <em>kubeconfig</em></strong> <strong>--config <em>user-cluster.yaml</em> --alsologtostderr --v=5</strong></pre><ul><li>The only difference from the admin cluster config check is that we are using a flag <strong>— kubeconfig <em>kubeconfig </em></strong>to point the Admin k8s Cluster<strong>.</strong></li><li>It does the same checks as the admin cluster with a startup script of user-cluster related operations.</li></ul><p>4. After <em>check-config</em>, there is no <em>prepare</em> command here as we already have the VM templates in vCenter. we will create the LB VM for the user cluster.</p><pre><strong>gkectl create loadbalancer --kubeconfig <em>kubeconfig </em>--config <em>user-cluster.yaml</em> alsologtostderr --v=5</strong></pre><ul><li>This would create and <em>configure</em> the Seesaw LB VM.</li><li>A successful creation would save a file named seesaw-for-your-user-cluster.yaml in your current directory. The user cluster will use this file to connect and configure the LB part.</li></ul><p>5. let’s create the user cluster</p><pre><strong>gkectl create cluster --config user-cluster.yaml alsologtostderr --v=5</strong></pre><ul><li>you should use the <strong>— skip-validation-all </strong>flag to skip the time-taking config checks if you successfully run the check-config command.</li><li>As admin cluster creation, it would take 20–40 min depending upon the storage used in your vCenter environment.</li><li>This will create a <strong>User cluster control plane VM </strong>which is controlled by the Admin cluster for all operations</li><li>The also create <strong><em>3</em></strong> (defined in config file) <strong><em>node pools</em></strong> for running our applications.</li><li>Once this successfully creates the user cluster, it saves the user kubeconfig file as <strong>user-cluster-kubeconfig</strong></li><li>Verify that your user cluster is up and running by listing the nodes</li></ul><pre><strong>kubectl get nodes --kubeconfig user-cluster-kubeconfig </strong></pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*obB49c_bpobVb1-UgD7LtQ.png" /><figcaption>user-cluster-node-pool</figcaption></figure><p>If you look at the nodes, you would notice it does not show the kube-api master because it is part of the admin cluster. This is listed in nodes of admin cluster as <strong>User cluster control plane (</strong>host4 in screenshot<strong>)</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Q1XqK-G2tF740mL7mg-x5Q.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZG-WFf6iILjw223twslfhQ.png" /><figcaption>user-cluster master node screenshot from vCenter portal</figcaption></figure><p><strong>Congratulation! Now you can deploy your apps to the user cluster.</strong></p><p>**As a next step, you can connect these clusters to the GCP console using the GCP service “<a href="http://feedbackconnect/"><strong>Connect”</strong></a><strong>. </strong>I will be writing a post on this shortly and will update the URL here.**</p><p>**I will also be writing about how to set up automated CI/CD to your Anthos Cluster using CloudBuild. I will update the URL here.**</p><p>I have consolidated the errors I faced during this deployment in this blog — <a href="https://blog.thecloudside.com/issues-faced-with-anthos-installation-to-vmware-vsphere-9816fbba2da0"><strong>Errors &amp; Solutions — Anthos on VMware</strong></a></p><p>Now is the time to explore more about Anthos services. Apart from official docs, you can take help from this <a href="https://medium.com/google-cloud/google-cloud-anthos-series-23b9a35e9179">Anthos Series Blogs</a>.</p><p>1. <a href="https://medium.com/google-cloud/google-cloud-anthos-series-part4-e23172b61ec9">Anthos Service Mesh</a> by <a href="https://medium.com/u/2d47f7f3f8e2">Anchit Nishant</a></p><p>2. <a href="https://medium.com/google-cloud/google-cloud-anthos-series-part5-a17ce89ddc7a">Anthos Config Mangement</a> by <a href="https://medium.com/u/2d47f7f3f8e2">Anchit Nishant</a></p><p>I hope this post was helpful in your quest of installing the Anthos cluster on VMware in addition to the <a href="https://cloud.google.com/anthos/clusters/docs/on-prem/1.9/how-to/vsphere-requirements">official guide</a>.</p><p>Cheers!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=856e5868b1f3" width="1" height="1" alt=""><hr><p><a href="https://blog.thecloudside.com/anthos-cluster-on-vmware-vsphere-856e5868b1f3">Anthos Cluster on VMware vSphere</a> was originally published in <a href="https://blog.thecloudside.com/">The Cloudside View</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Extending GCP Cloud DNS to On-prem with Multiple VPCs]]></title>
            <link>https://blog.thecloudside.com/extending-gcp-cloud-dns-to-on-prem-with-multiple-vpcs-3632f2aa5108?source=rss-ffed4a6b22dd------2</link>
            <guid isPermaLink="false">https://medium.com/p/3632f2aa5108</guid>
            <category><![CDATA[gcp]]></category>
            <category><![CDATA[dns-forwarding]]></category>
            <category><![CDATA[cloud]]></category>
            <category><![CDATA[network]]></category>
            <dc:creator><![CDATA[Umesh Kumar]]></dc:creator>
            <pubDate>Thu, 24 Jun 2021 07:55:45 GMT</pubDate>
            <atom:updated>2021-12-15T14:31:47.455Z</atom:updated>
            <content:encoded><![CDATA[<p>Cloud DNS is a managed DNS service from Google Cloud and we will be working with Private Hosted Zone through this blog. In one of our recent engagements, we were migrating a mobile payments platform from on-prem to GCP.</p><p>This is a hybrid environment. The back-office applications will remain on-prem for the time being and all the core applications will get migrated to GKE. We are working with 3 environments i.e Dev, stage, and Production created as 3 projects on GCP with each one having its own VPC. <em>The task at hand is to connect these 3 environments with on-prem in a secure way where service level communication should happen privately and with service names and not IP addresses.</em></p><blockquote>We have <a href="https://cloud.google.com/network-connectivity/docs/vpn/how-to/creating-ha-vpn">used Cloud VPN (HA)</a> for network-level communication from each project back to on-prem. Discovery of services by their names will be completed by use of Cloud DNS forwarders.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*j6nP68qeix17MWIt.png" /><figcaption>Made with <a href="http://: https://excalidraw.com/">Excalidraw</a></figcaption></figure><p>Let’s get into it</p><h3>What is already in place? You should check this list and have these details ready</h3><ul><li>Network communication between On-prem and GCP via Cloud VPN from all 3 projects</li><li>A local DNS server on-prem (which hosts the on-prem services). In our case, the DNS server used is DNS hosted on Windows server 2016.</li><li>List of on-prem hosted internal domains (For ex: we have umesh.local as the main domain on on-prem)</li><li>The IP address of DNS server on-prem</li><li>List of domains that you will host on GCP (For ex: we will create a private hosted zone dev.umesh.gcp, stage.umesh.gcp and prod.umesh.gcp on Cloud DNS in respective projects)</li></ul><p><strong>What do we need to create on GCP?</strong></p><ul><li><strong>Cloud DNS private hosted zone</strong> in <strong>each</strong> project (dev.umesh.gcp in dev, stage.umesh.gcp in stage and prod.umesh.gcp in production. Choose the appropriate VPC while configuring them). <em>Note: I am going to use gcloud commands to create them, you can do this from the GCP console too.</em></li></ul><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/f803f2a11649298fca31afbd836c212c/href">https://medium.com/media/f803f2a11649298fca31afbd836c212c/href</a></iframe><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/0*ZsQL0SmDmGVgnBbr.png" /><figcaption>Created private hosted zone in Dev project.</figcaption></figure><p><strong>Repeat this step for the other 2 projects by changing the values for project id, name, DNS name, and network name.</strong></p><ul><li>Cloud DNS forwarding zone (<em>Under Option: Forward queries to another server</em>) for on-prem umesh.local domain. This has to be created in only one project(in our case, prod) and not all of the projects. We will be using DNS peeing from this project(Prod) to all other projects (Dev and Stage)</li></ul><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/a577a9c200d95be5cb6d0acba066376e/href">https://medium.com/media/a577a9c200d95be5cb6d0acba066376e/href</a></iframe><figure><img alt="" src="https://cdn-images-1.medium.com/max/814/0*iSZHiplVnEdo9_wK.png" /><figcaption>Created forwarding zone in Prod project</figcaption></figure><p>You can’t add records to this forwarding zone as the data comes from your on-prem DNS. Keep in mind that you can add multiple DNS server ips if the on-prem server(s) are hosted that way.</p><blockquote>Normally this should be created in all the projects. but this is where we have some limitations (or designed this way) from GCP. Offical from Google: <em>“queries from any VPC network have the same IP range 35.199.192.0/19 as the source. Therefore, responses can’t be routed correctly unless you have separate environments on-premises”</em>. <a href="https://cloud.google.com/dns/docs/best-practices#use-dns-peering-to-avoid-outbound-forwarding-from-multiple_vpc-networks">Read more</a></blockquote><ul><li><strong>Cloud DNS peering zones</strong>. Since DNS peering unidirectionally forwards DNS requests, for our case, we have created a forwarding zone in the prod project, so we will have to create DNS peering connections from Dev and Stage projects VPC (called DNS consumer network) to Prod project VPC (DNS producer network). If you want all networks to discover anything and everything in the whole network setup, create a DNS Peering zone in all 3 projects so they all become consumers and producers.</li></ul><p><strong><em>In this example, we will go ahead and create 2 peering zone in dev and stage projects</em></strong></p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/fcf9618ff249a6c0abc753009f4870d2/href">https://medium.com/media/fcf9618ff249a6c0abc753009f4870d2/href</a></iframe><figure><img alt="" src="https://cdn-images-1.medium.com/max/815/0*KY5DWzVFfvzd-REX.png" /><figcaption>Created peering zone in Dev project</figcaption></figure><p><strong>Repeat this for the stage project.</strong></p><ul><li>The next step is to create <strong>DNS policies in all 3 projects</strong> for your respective VPC. You can configure one DNS server policy for each VPC network. you have control over both inbound server policy and outbound server policy. In our use case, we are required to create an inbound server policy.</li></ul><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/15aa2bb053c658f0ffcf5df9c7f614a8/href">https://medium.com/media/15aa2bb053c658f0ffcf5df9c7f614a8/href</a></iframe><figure><img alt="" src="https://cdn-images-1.medium.com/max/1008/1*3kEO9rpbrakD8T9FcNbYgg.png" /><figcaption>Cloud DNS policy details page</figcaption></figure><p><a href="https://cloud.google.com/dns/docs/overview?authuser=1&amp;_ga=2.159345466.-1829978130.1597767587&amp;_gac=1.193417567.1614769180.Cj0KCQiAhP2BBhDdARIsAJEzXlE6Iy3pQYsbtrOBNHO9qFSwDJh39JxQRTklZpjiIdu0Jj9zOfqj5XkaAkIREALw_wcB#dns-server-policy">you can read more about DNS policies here</a></p><p>At this stage, by creating private zones in each project, forwarding zone in one of the projects (prod), creating peering zone in dev and stage VPC, and then adding inbound DNS server policy, we have made sure that the GCP side of systems is well connected to route requests to appropriate on-prem DNS servers.</p><p><strong>What do we require to configure on <em>on-prem</em>?</strong></p><ul><li>There are a couple of things we need to perform on the on-prem side. The first one is to add DNS forwarders IPs for all 3 GCP networks on 3 GCP projects. How do we get DNS server IPs for hosted Cloud DNS zones?</li></ul><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/5a10c3482ee871373f39a6336333ef66/href">https://medium.com/media/5a10c3482ee871373f39a6336333ef66/href</a></iframe><p>you run this command in <strong>each of the projects</strong> and it will list you one IP for each subnet in your VPC. Take note of <strong>all these IPs</strong> as you have to add this to the On-prem DNS server as DNS forwarder IP.</p><p><a href="https://www.readandexecute.com/how-to/server-2016/dns/configure-dns-forwarders-windows-server-2016/">You can use this article to see how to add forwarders to the windows server</a></p><ul><li>The second one is to configure your on-premises routers and firewalls to permit traffic from <strong>Google’s 35.199.192.0/19</strong> IP address range. Cloud DNS uses the 35.199.192.0/19 source range for all customers. This range is only accessible from a Google Cloud VPC network or from an on-premises network connected to a VPC network.</li></ul><p>With this in place, you will be able to discover domains hosted on-prem (umesh.local) from GCPs in any private hosted zone (dev.umesh.gcp, stage.umesh.gcp and prod.umesh.gcp) and vice versa.</p><p><strong>Helpful Resources</strong></p><ol><li><a href="https://cloud.google.com/dns/docs/best-practices#hybrid-architecture-using-multiple-vpc-networks">hybrid-architecture-using-multiple-vpc-networks</a></li><li><a href="https://cloud.google.com/dns/docs/troubleshooting">Troubleshooting</a></li><li><a href="https://cloud.google.com/dns/docs/troubleshooting#forwarding-queries-from-consumer-vpc-to-producer-vpc-not-working">Issues with DNS Peering</a></li></ol><p>Thanks for reading this, hope it helped you in some way. Happy Networking on Google Cloud</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3632f2aa5108" width="1" height="1" alt=""><hr><p><a href="https://blog.thecloudside.com/extending-gcp-cloud-dns-to-on-prem-with-multiple-vpcs-3632f2aa5108">Extending GCP Cloud DNS to On-prem with Multiple VPCs</a> was originally published in <a href="https://blog.thecloudside.com/">The Cloudside View</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Internals of Snowball Edge | How to Setup, Configure and work with Snowball Edge & Client]]></title>
            <link>https://blog.searce.com/internals-of-snowball-edge-how-to-setup-configure-and-work-with-snowball-edge-client-e94a55960b64?source=rss-ffed4a6b22dd------2</link>
            <guid isPermaLink="false">https://medium.com/p/e94a55960b64</guid>
            <category><![CDATA[s3]]></category>
            <category><![CDATA[snowball]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[storage]]></category>
            <category><![CDATA[redshift]]></category>
            <dc:creator><![CDATA[Umesh Kumar]]></dc:creator>
            <pubDate>Tue, 11 Feb 2020 12:32:12 GMT</pubDate>
            <atom:updated>2020-02-16T09:31:35.016Z</atom:updated>
            <content:encoded><![CDATA[<p>There are few AWS services you would rarely get a chance to work with if you deal mostly with startups (cutting edge and born in the cloud) and small and medium-sized businesses. One of these services is Direct Connect and the other one is why you are reading this article.</p><p>This time, we are in the process of migrating a huge scale data warehouse off Netezza to AWS Redshift. The data reside in the on-prem data center and is enough in size for us to ask for a Snowball edge.</p><p>The data center team received the snowball and its time we connect it to power and switch it on.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MuBZtkQEeLhb3isPuvWWgQ.jpeg" /><figcaption>The blue button on the front side starts the snowball.</figcaption></figure><p>Let&#39;s get to the next part when the snowball has booted up and shows the LOCKED state. Now we will talk a bit about the networking capabilities the snowball supports. It has 3 ports, 10 Gb — RJ45, 25 Gb — SFP+, 40 Gb — QSFP+. If you would like to use SFP+ or QSFP+, you should have your own <strong>SFP transceiver</strong> as the Snowball ships with no cable other then power.</p><p>The connections tab on Snowball shows the option to choose which port you are configuring. We used SFP+ and configured the interface with a static IP. (you should be ready with static IP, netmask and gateway details upfront for the port you are going to use). Now its time we start with Unlocking the snowball. <a href="https://docs.aws.amazon.com/snowball/latest/developer-guide/specifications.html">A detailed guide is available here on AWS docs.</a></p><p>I will walk through the steps/commands we used for unlocking, initializing, setup and configuring the Snowball edge. I hope you have a machine to work with the snowball, part of the local network in the datacenter. The machine is with the latest AWS CLI or Snowball client. <a href="https://docs.aws.amazon.com/snowball/latest/developer-guide/using-client.html">More on how to configure the CLI or client is available here</a>.</p><p>We will start by configuring a local snowball profile. It&#39;s good to have this profile otherwise we have to pass the <em>manifest file and unlock code </em>with every command. We should have the <em>Manifest file</em> and <em>Unlock Code</em> obtained from the Snowball page on the AWS console.</p><p>Start with |<strong><em>snowballEdge configure|</em></strong></p><blockquote>Snowball Edge Manifest Path: <em>Path/to/manifest/file</em></blockquote><blockquote>Unlock Code: <em>29 character unlock code</em></blockquote><blockquote>Default Endpoint: <a href="https://192.0.2.0/">https://10.0.2.</a>197</blockquote><blockquote><em>Note: If you want to configure mutliple profiles for Snowball, use the tag</em><strong> — profile </strong>nameoftheprofile<em> and pass the same profile tag for all the following commands)</em></blockquote><p><strong>|<em>snowballEdge unlock-device</em>|</strong></p><blockquote>Your Snowball Edge device is unlocking. You may determine the unlock state of your device using the describe-device command. Your Snowball Edge device will be available for use when it is in the UNLOCKED state.</blockquote><p>This will unlock your snowball in about 5 mins given your <em>manifest file</em> and <em>unlock code</em> are correctly entered while configuring the profile. To check the status we can look at the snowball screen or run |<strong><em>snowballEdge describe-device|</em></strong></p><p>Once the device unlocks, we can start with the next set of commands which will be used for actual data transfer.</p><p><strong>For us to write data to snowball using CLI or SDK, we first need to obtain the <em>access keys</em> and <em>secret access key</em> from the snowball. We would also need the <em>ca-bundle</em> .pem file for the https connection.</strong></p><p><strong><em>|snowballEdge list-access-keys|</em></strong></p><blockquote>{ “AccessKeyIds” : [ “AKIAIOSFODNN7EXAMPLE” ] }</blockquote><p>Once we have the <em>access key</em>, we can pass this as in argument to get the <em>secret access key</em></p><p><strong>|snowballEdge get-secret-access-key — access-key-id </strong><strong><em>Access Key|</em></strong></p><blockquote>[snowballEdge]<br>aws_access_key_id = AKIAIOSFODNN7EXAMPLE<br>aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY</blockquote><p>It&#39;s good to save these outputs in a file as we will need these <em>keys </em>for further use.</p><p>Run <strong>|snowballEdge get-secret-access-key — access-key-id </strong><strong><em>Access Key &gt;local-access-key.txt|</em></strong></p><p>This local-access-key.txt is saved in the current user directory of the respective OS.</p><p>Let&#39;s also obtain the <strong><em>ca-bundle</em></strong> file</p><p><strong>|snowballEdge list-certificates|</strong></p><blockquote>{<br> “Certificates” : [ {<br> “CertificateArn” : “arn:aws:snowball-device:::certificate/78EXAMPLE516EXAMPLEf538EXAMPLEa7”,<br> “SubjectAlternativeNames” : [ “192.0.2.0” ]<br> } ]<br>}</blockquote><p>This will give us the AWS arn for the certificate of our snowball endpoint. We will now use this arn to obtain the certificate.</p><p><strong>|snowballEdge get-certificate — certificate-arn arn:aws:snowball-device:::certificate/78EXAMPLE516EXAMPLEf538EXAMPLEa7|</strong></p><blockquote>— — -BEGIN CERTIFICATE — — -<br>Certificate<br> — — -END CERTIFICATE — — -</blockquote><p>copy this certificate file with .pem using</p><p><strong>|</strong>snowballEdge get-certificate — certificate-arn arn:aws:snowball-device:::certificate/78EXAMPLE516EXAMPLEf538EXAMPLEa7<strong> <em>&gt;ca-bundle.pem|</em></strong></p><p>Now we are ready with the credentials for the CLI to work with the snowball. One of the points we missed was about services that run on snowball and what is useful in our case. For us, we are only using the storage part(S3) of snowball and not the compute or IOT part which is also available in some regions.</p><p>Amazon S3 and Amazon EC2 services are always on by default and rest other we can start if we would like to use them. You can verify the status of a service by running <strong>|snowballEdge describe-device|</strong> <a href="https://docs.aws.amazon.com/snowball/latest/developer-guide/using-client-commands.html">More on this here</a>.</p><blockquote>In this section, we will work with transferring the data to snowball edge using the AWS CLI.</blockquote><p>We will start by configuring the AWS CLI profile with access key and secret key obtained in previous steps.</p><p><strong>|aws configure — profile demo1|</strong></p><p>fill in the access key and secret key you have obtained from the Snowball.</p><blockquote><strong>Note: </strong><em>Remember to pass the access key and secret key we have obtained from Snowball device and </em><strong><em>not use the one you might have downloaded from AWS IAM. We normally configure the AWS Profile with access keys from AWS IAM.</em></strong></blockquote><p>If you have successfully configured the AWS profile, you can run the AWS S3 commands to interact with the snowball.</p><p><strong>|aws s3 ls| </strong>will return you the name of the bucket the snowball has shipped with. This is not the actual bucket on S3, it is root folder in snowball where you will transfer the data.</p><p>Test sending some data to this bucket. It&#39;s good to create some <em>test folder </em>and not use the root folder(the name of the bucket).</p><p><strong>|aws s3 cp <em>/home/searce.png /bucket-name/test-folder/|</em></strong></p><p>here you go, the file must be copied to the test folder. You can verify this by <strong>|aws s3 ls <em>/bucket-name/test-folder|</em></strong></p><p>I wrap this here, We have one more article coming up on how we used <strong>AWS DMS and SCT to <em>actually transfer</em> data from Netezza to Redshift.</strong> I will add the article link <strong><em>here</em></strong> when it is available.</p><p>I hope this reading gives you some confidence going into your first snowball use case. Have fun migrating data to AWS :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e94a55960b64" width="1" height="1" alt=""><hr><p><a href="https://blog.searce.com/internals-of-snowball-edge-how-to-setup-configure-and-work-with-snowball-edge-client-e94a55960b64">Internals of Snowball Edge | How to Setup, Configure and work with Snowball Edge &amp; Client</a> was originally published in <a href="https://blog.searce.com/">Searce</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[AWS Landing Zone — A Plethora of best practices for multi-account setup]]></title>
            <link>https://medium.com/ankercloud-engineering/aws-landing-zone-a-plethora-of-best-practices-for-multi-account-setup-6e159bab325f?source=rss-ffed4a6b22dd------2</link>
            <guid isPermaLink="false">https://medium.com/p/6e159bab325f</guid>
            <category><![CDATA[aws-security]]></category>
            <category><![CDATA[landingzone]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[enterprise-architecture]]></category>
            <category><![CDATA[aws-control-tower]]></category>
            <dc:creator><![CDATA[Umesh Kumar]]></dc:creator>
            <pubDate>Wed, 23 Oct 2019 15:36:34 GMT</pubDate>
            <atom:updated>2019-10-24T13:31:38.178Z</atom:updated>
            <content:encoded><![CDATA[<h3>AWS Landing Zone — A Plethora of best practices for multi-account setup</h3><p>The pace of innovation at AWS is rapid. It is difficult to keep up with new features, enhancements, services that come in every day, let alone knowing the best practices associated with them. Simply put, AWS with hundreds of services across 23 different categories is a complex world and AWS knows, to operate with such breadth and depth using best practices is challenging for any customer.</p><p>AWS Landing Zone was launched in mid-2018 and has been unnoticed (my guess based on no/low community discussions) by customers/partners until AWS re:Invent 2018 when AWS Control Tower was <a href="https://aws.amazon.com/blogs/enterprise-strategy/aws-control-tower-and-aws-security-hub-powerful-enterprise-twins/">announced</a>.</p><blockquote>AWS Landing Zone is a nice blend of granular, centralized control over your cloud workloads and consistent level of security and compliance across all your AWS accounts.</blockquote><p>I am not going to explain how to implement AWS Landing Zone as AWS’s guide is detailed. However, we will discuss the requirements for the landing zone and a simplified view of what it contains. Let&#39;s dig in!</p><p><strong>When to <em>implement </em>Landing Zone?</strong></p><p>Working with a single account becomes difficult as your environment grows because multiple teams in the same account would trespass on one another due to their different responsibilities and resource needs. <em>You may also have completely different business units or products or security profiles or compliance control which require different accounts</em>. In such scenarios, you need to design and configure a base environment that lays out the account structure, security rules, default network settings, and other foundational services. This base environment is called <em>Landing Zone.</em></p><p><strong><em>Key elements</em> of Landing Zone architecture</strong></p><figure><img alt="4 AWS accounts with Landing Zone deployment in Organizations account using Account Vending Machine(AVM)" src="https://cdn-images-1.medium.com/max/657/1*aP8yJ_kQiFs9JjBcbQT_9Q.png" /><figcaption>4 AWS accounts with Landing Zone deployment in Organizations account using Account Vending Machine(AVM). Source: <a href="https://aws.amazon.com/solutions/aws-landing-zone/">AWS Solutions Page</a></figcaption></figure><h3>A plethora of best practices?</h3><ul><li><strong>Organizations master account:</strong> It provisions and manages member accounts under AWS Organizations Service.</li><li><strong>Core accounts in an Organizational Unit:</strong> It provides essential functions that are common to all the accounts under the Organizations, such as Log Archive, Security management, and Shared Services like the directory service.</li><li><strong>Team/Group accounts in Organizational Units:</strong> These are designated for individual business units at the granularity of the team or group level. For example, a set of Team accounts may consist of the team’s Shared Services account, Development account, Pre-Production account, and Production account.</li><li><strong>Developer accounts:</strong> These are “sandboxes” for an individual’s learning and experimentation.</li><li><strong>Connectivity:</strong> This is set up with default networking patterns between the accounts and with external data centers.</li><li><strong>Security Baseline:</strong></li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/434/1*DQA2lJ02NFz0Q5KeeQV5sA.png" /><figcaption>Multiple other AWS services such as AWS SSO, Code* Services, Gaurd Duty and KMS are used for the complete solution.</figcaption></figure><p>Looking at these best practices, we realize how this <em>“Infrastructure as code”</em> solution can be beneficial when dealing with multiple accounts.</p><p>Still, Implementing this solution itself requires a deep understanding of AWS services and AWS stats that in the <a href="http://www.awslandingzone.com/guides/aws-landing-zone-implementation-guide.pdf"><em>Landing Zone Implementation Guide</em></a>.</p><p>Don’t worry! AWS was also mindful of these challenges, and they were quick to automate the whole solution as a managed service named <a href="https://aws.amazon.com/controltower/features/"><strong>AWS Control Tower</strong></a><strong>. </strong>(PS: A lot of AWS services started out as a solution to a particular use case in the form of a cloud formation template(s) and then launched as a managed service)</p><blockquote><strong>In short, AWS Control Tower automates the setup of all these plethoras of best practices.</strong> A few clicks here and there, you are on your way to setup a baseline infrastructure in AWS with best practices at the core.</blockquote><p><strong>Resources</strong></p><ol><li><a href="https://aws.amazon.com/controltower/"><em>Get started with AWS Control Tower here</em></a></li><li>If you want to deploy Landing Zone on your own and learn a few more things about AWS services, read the <a href="http://www.awslandingzone.com/guides/aws-landing-zone-implementation-guide.pdf"><strong><em>implementation guide</em></strong></a> and <a href="http://www.awslandingzone.com/guides/aws-landing-zone-user-guide.pdf"><strong><em>user guide.</em></strong></a></li></ol><p>Thanks for your time!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6e159bab325f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/ankercloud-engineering/aws-landing-zone-a-plethora-of-best-practices-for-multi-account-setup-6e159bab325f">AWS Landing Zone — A Plethora of best practices for multi-account setup</a> was originally published in <a href="https://medium.com/ankercloud-engineering">Ankercloud Engineering</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[AWS Transit-Gateway Internals & Working]]></title>
            <link>https://blog.searce.com/aws-transit-gateway-internals-working-ac419b3dfcdb?source=rss-ffed4a6b22dd------2</link>
            <guid isPermaLink="false">https://medium.com/p/ac419b3dfcdb</guid>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[aws-ec2]]></category>
            <category><![CDATA[vpc]]></category>
            <category><![CDATA[transit-gateway]]></category>
            <category><![CDATA[networking]]></category>
            <dc:creator><![CDATA[Umesh Kumar]]></dc:creator>
            <pubDate>Thu, 06 Dec 2018 11:10:46 GMT</pubDate>
            <atom:updated>2018-12-18T06:49:29.143Z</atom:updated>
            <content:encoded><![CDATA[<p>AWS re: Invent 2018 had a lot of new services to be called COOL, well if you have satellite( :) ), you don’t need ground datacenter to process data. (<a href="https://aws.amazon.com/ground-station/">ground station</a>). Combination of Robomaker and Alexa can be groundbreaking if used properly. A whole lot of things to talk about. Today, I am writing about a rather less fancy service they launched (CISCO, Where are you), “AWS Transit-Gateway”.</p><p>AWS VPC has been one of the strong networking backbone for EC2 to perform the way it does but VPC capabilities don’t always cater to the networking requirements enterprises ask. They always need a central gateway where a firewall has to know &amp; manage what packets are flowing in the environment and how. Ultimately enterprises used third party solutions like CISCO CSR router to achieve this. Read about the earlier <a href="https://aws.amazon.com/blogs/aws/aws-solution-transit-vpc/">AWS Solution — Transit VPC</a></p><p>let’s discuss AWS Transit-gateway and how it works. Below image explains pretty much what it is .</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*gF8kR72-YI73ztUy.png" /><figcaption>You simply connect each Amazon VPC or VPN or Direct Connect(coming soon) to the AWS Transit Gateway and it will route traffic to and from each VPC or VPN or Direct Connect.</figcaption></figure><p>Let’s get to the working of AWS Transit-Gateway.</p><p>We had a customer in the past where we deployed CISCO CSR to achieve the transitive nature of the network. They had 4 different external apps hosted in 4 different VPC which needed to communicate privately with another app on-prem through VPN. Their compliance required was there will be just one endpoint for VPN and all of the traffic between apps has to flow through the firewall sitting at a central location (VPC) on AWS. Let’s see how we would deploy this today using the Transit-Gateway.</p><ol><li>We have 2 custom VPC’s with each having one subnet. I have created 1 instance in each VPC(subnet). One of the VM is part of 10.0.0.0/16 network (IP:10.0.1.188) and another one being part of 20.0.0.0/16 network (IP:20.0.1.110)</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*N3DiIRYrycmp33ceELGhCQ.png" /><figcaption>2 Instance running on different VPCs</figcaption></figure><p>2. Transit-Gateway is available under the VPC-Dashboard. We will start by creating our first gateway. Enabling DNS support will be useful as finding the applications with their hostname/FQDN. Click create on the bottom right.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*khZowceXKaMxe0jbtpI6Bw.png" /><figcaption><em>Most of the options are auto selected, based on your use you can uncheck the radio button</em></figcaption></figure><p>3. Let’s create <strong>Transit-Gateway Attachments</strong> now. These attachments are nothing but the connections to VPC’s. We need to create a different attachment for each VPC with the transit-gateway. <em>Each VPC requires to have a separate attachment.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*s9scFQm4dA8A_o9xj6Tb5w.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4LbpXu-738x4vF19Aj37sg.png" /><figcaption>One important thing to note here is the selection of subnets. We can choose which subnets should participate in the transit-gateway attachment.</figcaption></figure><p>4. Once we have created the attachments for both VPC, they will be available in this windows.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bCE8P9uNgfgxf5frAKKOww.png" /><figcaption>We choose attachment type as VPC, If we are connecting with the VPN connection, we have to choose customer gateway and specify tunnel details.</figcaption></figure><p>5. Now, If you have checked the “default route table association” in the first step, no need to modify the Default RT at transit gateway end but we need to modify the VPC’s route table and create the route via transit-gateway. Remember to modify the route table for both the VPC.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8OskcuwB6FLgyyVTCOpupQ.png" /><figcaption>In the Destination column, specify the network range of other VPC (In our case 20.0.0.0/16 since we are creating routes from 10.0.0.0/16 VPC route table</figcaption></figure><p>6. The final step, let’s test out connection and ping the 20.0.0.0/16 network from 10.0.0.0/16 network.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/840/1*7pm8DFQDNHnBzrf4vz6YGw.png" /><figcaption>Server 1 in VPC 1 with private IP 10.0.1.188 is able to ping Server 2 in VPC 2 with private IP 20.0.1.110</figcaption></figure><p>BOOM! No VPC-Perring, We are able to communicate different VPC using the transit-gateway.</p><p>Well, interestingly you can share transit gateway with other AWS accounts or AWS Organization using <a href="https://aws.amazon.com/blogs/aws/new-use-an-aws-transit-gateway-to-simplify-your-network-architecture/"><strong><em>AWS Resource Access Manager</em></strong></a></p><p>What else about transit-gateway?</p><h4>BENEFITS</h4><ol><li>Simplified connectivity</li><li>Better visibility and network control</li><li>Availability of On-demand network bandwidth</li></ol><h4>LIMITATIONS</h4><ol><li>Routing between Amazon VPCs with overlapping CIDRs is not supported.</li><li>Spoke VPC can’t refer security group of other spokes connected to the gateway.</li><li>Maximum network bandwidth per VPN connection in the transit mesh is limited to 1.25Gbps. You can use ECMP to get higher VPN bandwidth. Bandwidth limit per VPC attachment is 50Gbps burst.</li></ol><p>Check this <a href="https://pages.awscloud.com/rs/112-TZM-766/images/2018_1218-NET_Slide-Deck.pdf?mkt_tok=eyJpIjoiWm1ObU1XSTJabUk0TjJJeiIsInQiOiJ3U1kwN0hXbkRwbEZvVjJyTlFhK1Zpd0dOQTMrQlBxS2x2cHo0dVI2a0lIT2QxdkdQcmZyR2RsSXlmTnBKc1JzTDVwSDc3R0tFMTFuOURmREVmNGNCa1J0ZEtEb3RMRkxNOUcwU2Zucm1aSU15NmRKWjRVRVNyS2xVbThvNDRwVEFkcUFLeU1xcG5YYXhLWm9sanArYVE9PSJ9"><em>AWSome slide</em></a> from AWS to understand where transit gateway can be used.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ac419b3dfcdb" width="1" height="1" alt=""><hr><p><a href="https://blog.searce.com/aws-transit-gateway-internals-working-ac419b3dfcdb">AWS Transit-Gateway Internals &amp; Working</a> was originally published in <a href="https://blog.searce.com/">Searce</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>