<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Rahul Kiran Gaddam</title>
    <description>The latest articles on Forem by Rahul Kiran Gaddam (@rahgadda).</description>
    <link>https://forem.com/rahgadda</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F612934%2F7121e832-6993-408b-a1dc-7439ef49ab0a.jpeg</url>
      <title>Forem: Rahul Kiran Gaddam</title>
      <link>https://forem.com/rahgadda</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rahgadda"/>
    <language>en</language>
    <item>
      <title>Running Node App on Huggingface Spaces</title>
      <dc:creator>Rahul Kiran Gaddam</dc:creator>
      <pubDate>Mon, 08 Jan 2024 09:02:00 +0000</pubDate>
      <link>https://forem.com/rahgadda/running-node-app-on-huggingface-spaces-4f68</link>
      <guid>https://forem.com/rahgadda/running-node-app-on-huggingface-spaces-4f68</guid>
      <description>&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;We all wanted to showcase our work, unfortunately, we require a compute instance to run our application.&lt;/li&gt;
&lt;li&gt;Huggingface is used to store Machine Learning Models and Datasets. It has Spaces that can host your application to showcase your work.&lt;/li&gt;
&lt;li&gt;In this blog, we will try to learn if we can use it to host Node-based docker applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create your Account on Huggingface &lt;a href="https://huggingface.co/"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click your profile icon on the right-hand top corner and navigate to &lt;code&gt;New Space&lt;/code&gt;.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F1l2Dv3E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hv6125f5wj4e35lx2ti1.png" alt="New Space" width="222" height="204"&gt;
&lt;/li&gt;
&lt;li&gt;On the new space, select options as listed below
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5mWBBrG6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hlyxshrwzc5akupn42xu.png" alt="New Space Options" width="688" height="892"&gt;
&lt;/li&gt;
&lt;li&gt;In the &lt;code&gt;Readm.me&lt;/code&gt; file add update port details on which docker container is exposed
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UH872srM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kurt9lu9za68bdfbj73j.png" alt="Docker Port Details" width="201" height="153"&gt;
&lt;/li&gt;
&lt;li&gt;Create three files &lt;a href="https://huggingface.co/spaces/rahgadda/node-hello/blob/main/index.js"&gt;index.js&lt;/a&gt;, &lt;a href="https://huggingface.co/spaces/rahgadda/node-hello/blob/main/package.json"&gt;package.json&lt;/a&gt;, &lt;a href="https://huggingface.co/spaces/rahgadda/node-hello/blob/main/Dockerfile"&gt;Dockerfile&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;System will build the application and host it in your space. U can get the URL by navigating to &lt;code&gt;Space setting&lt;/code&gt; -&amp;gt; &lt;code&gt;Embed this Space&lt;/code&gt; -&amp;gt; &lt;code&gt;Direct URL&lt;/code&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ykE47JYb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zr5a2jn7hhp38zcoys4e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ykE47JYb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zr5a2jn7hhp38zcoys4e.png" alt="Space Settings" width="419" height="284"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bHEvpMFC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6tj1eczgh7jlgo7ecook.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bHEvpMFC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6tj1eczgh7jlgo7ecook.png" alt="URL" width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For reference check out my space &lt;a href="https://huggingface.co/spaces/rahgadda/node-hello/tree/main"&gt;here&lt;/a&gt; , &lt;a href="https://rahgadda-node-hello.hf.space/"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://huggingface.co/docs/hub/spaces-sdks-docker-first-demo"&gt;Official Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>huggingface</category>
      <category>webdev</category>
      <category>docker</category>
      <category>node</category>
    </item>
    <item>
      <title>Netmaker - Multi Cloud Networking</title>
      <dc:creator>Rahul Kiran Gaddam</dc:creator>
      <pubDate>Thu, 22 Sep 2022 14:44:36 +0000</pubDate>
      <link>https://forem.com/rahgadda/multi-cloud-networking-e1</link>
      <guid>https://forem.com/rahgadda/multi-cloud-networking-e1</guid>
      <description>&lt;h2&gt;
  
  
  Philosophy
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Now Multi cloud is the new reality, because not everything is available with every cloud provider.&lt;/li&gt;
&lt;li&gt;With this being new reality, we need a mechanism to connect cloud environments and create a internal and secured network.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://dev.to/rahgadda/installing-k8-on-arm64-4-cpu-24gb-ram-648"&gt;Here&lt;/a&gt; was my last post on installing kubernetes using &lt;code&gt;Oracle OCI cloud&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Instead of creating a single node, can we create a cluster? can we create this cluster between multiple regions? how will they communicate? &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Network Communication Is a &lt;strong&gt;PROBLEM&lt;/strong&gt; &amp;gt;&amp;gt;&amp;gt;&amp;gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/y1WDIwAZRSmru/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/y1WDIwAZRSmru/giphy.gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Answer for all these is VPN or we can try &lt;a href="https://www.netmaker.io/" rel="noopener noreferrer"&gt;Netmaker.io&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Netmaker works on &lt;code&gt;Client&lt;/code&gt; - &lt;code&gt;Server&lt;/code&gt; architecture like any other network connectivity resolution applications.&lt;/li&gt;
&lt;li&gt;We will have a &lt;code&gt;Netmaker Server&lt;/code&gt; installed on a server and &lt;code&gt;Netmaker Agent/Client&lt;/code&gt; installed on the others.&lt;/li&gt;
&lt;li&gt;Below installation is done on &lt;code&gt;OCI Arm64 - Oracle Linux&lt;/code&gt;, which could not be achieved by following steps &lt;a href="https://github.com/gravitl/netmaker" rel="noopener noreferrer"&gt;here&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Create &lt;code&gt;3 Node&lt;/code&gt; where &lt;code&gt;2 Node&lt;/code&gt; will act as &lt;code&gt;Agents/Clients&lt;/code&gt; and &lt;code&gt;1 Server&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;All nodes should have &lt;code&gt;Public IP&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Allow firewall for Ports &lt;strong&gt;443 (tcp): for Traefik&lt;/strong&gt; &amp;amp; &lt;strong&gt;51821-518XX (udp): for WireGuard&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Register below domains &lt;a href="//freenom.com"&gt;freenom&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;base-domain.extenssion&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;broker-&lt;strong&gt;base-domain.extenssion&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;api-&lt;strong&gt;base-domain.extenssion&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;dashboard-&lt;strong&gt;base-domain.extenssion&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa9ryfd9rkxc5s0pc3j5u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa9ryfd9rkxc5s0pc3j5u.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Server Installation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;I created below folders
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faq3hlojuergwkpbpibdq.png" alt="Image description"&gt;
&lt;/li&gt;
&lt;li&gt;Host
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="nv"&gt;PUBLIC_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; ifconfig.me&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;PRIVATE_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;hostname&lt;/span&gt; &lt;span class="nt"&gt;-I&lt;/span&gt; | &lt;span class="nb"&gt;cut&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; 1 &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;" "&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;DOMAIN_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"base-domain.extenssion"&lt;/span&gt;
&lt;span class="nv"&gt;MATCHES_IN_HOSTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nv"&gt;$PUBLIC_IP&lt;/span&gt; /etc/hosts&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

hostnamectl set-hostname &lt;span class="nv"&gt;$DOMAIN_NAME&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$MATCHES_IN_HOSTS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; 
&lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Host Details Already Exisits"&lt;/span&gt;
&lt;span class="k"&gt;else 
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Registering Host Details"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"==================================="&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nb"&gt;cat&lt;/span&gt; /dev/null &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /etc/hosts&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/hosts&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"::1         localhost localhost.localdomain localhost6 localhost6.localdomain6"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/hosts&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$PRIVATE_IP&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$PUBLIC_IP&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="nv"&gt;$DOMAIN_NAME&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/hosts&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"========Updated Details============"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nb"&gt;cat&lt;/span&gt; /etc/hosts
    &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"==================================="&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Firewall
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="c"&gt;# -- Disabling firewalld&lt;/span&gt;
systemctl disable firewalld

&lt;span class="c"&gt;# -- Enabling iptables&lt;/span&gt;
yum &lt;span class="nb"&gt;install &lt;/span&gt;iptables-services &lt;span class="nt"&gt;-y&lt;/span&gt;
systemctl start iptables
systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;iptables

&lt;span class="c"&gt;# -- Flushing iptables&lt;/span&gt;
iptables &lt;span class="nt"&gt;-F&lt;/span&gt;

&lt;span class="c"&gt;# -- Allowing everthing&lt;/span&gt;
iptables &lt;span class="nt"&gt;-A&lt;/span&gt; FORWARD &lt;span class="nt"&gt;-j&lt;/span&gt; ACCEPT
iptables &lt;span class="nt"&gt;-A&lt;/span&gt; INPUT &lt;span class="nt"&gt;-j&lt;/span&gt; ACCEPT
iptables &lt;span class="nt"&gt;-A&lt;/span&gt; OUTPUT &lt;span class="nt"&gt;-j&lt;/span&gt; ACCEPT

&lt;span class="c"&gt;# -- Saving&lt;/span&gt;
service iptables save
systemctl restart iptables

&lt;span class="c"&gt;# -- Display Settings&lt;/span&gt;
iptables &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Docker
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="c"&gt;# -- Enable kernel modules&lt;/span&gt;
modprobe overlay
modprobe br_netfilter
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; |  tee /etc/modules-load.d/k8s.conf
br_netfilter
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; |  tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;sysctl &lt;span class="nt"&gt;--system&lt;/span&gt;

&lt;span class="c"&gt;# -- Disabling Swap Memory&lt;/span&gt;
swapoff &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'/ swap / s/^/#/'&lt;/span&gt; /etc/fstab
setenforce 0
&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'s/^SELINUX=enforcing$/SELINUX=permissive/'&lt;/span&gt; /etc/selinux/config

&lt;span class="c"&gt;## Podman is by default provided, K8 can run on Podman&lt;/span&gt;
&lt;span class="c"&gt;## I was unable to install using Podman and need to move to docker&lt;/span&gt;
&lt;span class="c"&gt;# -- Remove Podman&lt;/span&gt;
yum remove podman buildah  &lt;span class="nt"&gt;-y&lt;/span&gt;

&lt;span class="c"&gt;# -- Install Docker&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;yum &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; yum-utils
&lt;span class="nb"&gt;sudo &lt;/span&gt;yum-config-manager &lt;span class="nt"&gt;--add-repo&lt;/span&gt; https://download.docker.com/linux/centos/docker-ce.repo
yum &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; docker-ce docker-ce-cli containerd.io

&lt;span class="c"&gt;# -- Configure Docker&lt;/span&gt;
systemctl  stop docker
/usr/sbin/usermod &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;-G&lt;/span&gt; docker opc
/usr/sbin/sysctl net.ipv4.conf.all.forwarding&lt;span class="o"&gt;=&lt;/span&gt;1
systemctl  start docker
&lt;span class="nb"&gt;chmod &lt;/span&gt;777 /var/run/docker.sock
&lt;span class="nb"&gt;tee&lt;/span&gt; /etc/docker/daemon.json &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt;
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
&lt;/span&gt;&lt;span class="no"&gt;EOF

&lt;/span&gt;&lt;span class="c"&gt;# -- Start and enable Services&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl daemon-reload 
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart docker
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Netmaker
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# docker-compose.yml&lt;/span&gt;
&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3.4"&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;netmaker&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;netmaker&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gravitl/netmaker:v0.15.2@sha256:1e4cb5ca0907eea83eb84b850fe5e242e481dd4c1be59b60f96d5e577c67f5a9&lt;/span&gt;
    &lt;span class="na"&gt;cap_add&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; 
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;NET_ADMIN&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;NET_RAW&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SYS_MODULE&lt;/span&gt;
    &lt;span class="na"&gt;sysctls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;net.ipv4.ip_forward=1&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;net.ipv4.conf.all.src_valid_mark=1&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;net.ipv6.conf.all.disable_ipv6=0&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;net.ipv6.conf.all.forwarding=1&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/root/dnsconfig:/root/config/dnsconfig&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/root/sqldata:/root/data&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/root/shared_certs:/etc/netmaker&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;SERVER_NAME&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;broker-base-domain.extenssion"&lt;/span&gt;
      &lt;span class="na"&gt;SERVER_HOST&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SERVER_PUBLIC_IP"&lt;/span&gt;
      &lt;span class="na"&gt;SERVER_API_CONN_STRING&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;api-base-domain.extenssion:443"&lt;/span&gt;
      &lt;span class="na"&gt;COREDNS_ADDR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SERVER_PUBLIC_IP"&lt;/span&gt;
      &lt;span class="na"&gt;DNS_MODE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on"&lt;/span&gt;
      &lt;span class="na"&gt;SERVER_HTTP_HOST&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;api-base-domain.extenssion"&lt;/span&gt;
      &lt;span class="na"&gt;API_PORT&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8081"&lt;/span&gt;
      &lt;span class="na"&gt;CLIENT_MODE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on"&lt;/span&gt;
      &lt;span class="na"&gt;MASTER_KEY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;REPLACE_MASTER_KEY"&lt;/span&gt;
      &lt;span class="na"&gt;CORS_ALLOWED_ORIGIN&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;*"&lt;/span&gt;
      &lt;span class="na"&gt;DISPLAY_KEYS&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on"&lt;/span&gt;
      &lt;span class="na"&gt;DATABASE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sqlite"&lt;/span&gt;
      &lt;span class="na"&gt;NODE_ID&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;netmaker-server-1"&lt;/span&gt;
      &lt;span class="na"&gt;MQ_HOST&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mq"&lt;/span&gt;
      &lt;span class="na"&gt;MQ_PORT&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443"&lt;/span&gt;
      &lt;span class="na"&gt;MQ_SERVER_PORT&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1883"&lt;/span&gt;
      &lt;span class="na"&gt;HOST_NETWORK&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;off"&lt;/span&gt;
      &lt;span class="na"&gt;VERBOSITY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1"&lt;/span&gt;
      &lt;span class="na"&gt;MANAGE_IPTABLES&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;on"&lt;/span&gt;
      &lt;span class="na"&gt;PORT_FORWARD_SERVICES&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dns"&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;51821-51830:51821-51830/udp"&lt;/span&gt;
    &lt;span class="na"&gt;expose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8081"&lt;/span&gt;
    &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.enable=true&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.routers.netmaker-api.entrypoints=websecure&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.routers.netmaker-api.rule=Host(`api-base-domain.extenssion`)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.routers.netmaker-api.service=netmaker-api&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.services.netmaker-api.loadbalancer.server.port=8081&lt;/span&gt;
  &lt;span class="na"&gt;netmaker-ui&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;netmaker-ui&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;gravitl/netmaker-ui:v0.15.2@sha256:11fe0092e8a8e8a7a6a07e6aa50d448ed2de24ee6d2eb045e3956b3c6c24af50&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;netmaker&lt;/span&gt;
    &lt;span class="na"&gt;links&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;netmaker:api"&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;BACKEND_URL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api-base-domain.extenssion"&lt;/span&gt;
    &lt;span class="na"&gt;expose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;80"&lt;/span&gt;
    &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.enable=true&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.middlewares.nmui-security.headers.accessControlAllowOriginList=*-base-domain.extenssion&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.middlewares.nmui-security.headers.stsSeconds=31536000&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.middlewares.nmui-security.headers.browserXssFilter=true&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.middlewares.nmui-security.headers.customFrameOptionsValue=SAMEORIGIN&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.middlewares.nmui-security.headers.customResponseHeaders.X-Robots-Tag=none&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.middlewares.nmui-security.headers.customResponseHeaders.Server=&lt;/span&gt; &lt;span class="c1"&gt;# Remove the server name&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.routers.netmaker-ui.entrypoints=websecure&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.routers.netmaker-ui.middlewares=nmui-security@docker&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.routers.netmaker-ui.rule=Host(`dashboard-base-domain.extenssion`)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.routers.netmaker-ui.service=netmaker-ui&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.services.netmaker-ui.loadbalancer.server.port=80&lt;/span&gt;
  &lt;span class="na"&gt;coredns&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;coredns&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;coredns/coredns-arm64@sha256:224c4ecc9d9eea3765d0beee0e624e6cf837230c370440bd38a7d9901dd04dc4&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;-conf /root/dnsconfig/Corefile&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;netmaker&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/root/dnsconfig:/root/dnsconfig&lt;/span&gt;
  &lt;span class="na"&gt;traefik&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;traefik:v2.6@sha256:9aecceb73e3b24b6547d401c95eea6cdf475a99ddfd0b86464c5413925e062da&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;traefik&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--certificatesresolvers.http.acme.email=YOUR_EMAIL"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--certificatesresolvers.http.acme.storage=/letsencrypt/acme.json"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--certificatesresolvers.http.acme.tlschallenge=true"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--entrypoints.websecure.address=:443"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--entrypoints.websecure.http.tls=true"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--entrypoints.websecure.http.tls.certResolver=http"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--log.level=INFO"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--providers.docker=true"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--providers.docker.exposedByDefault=false"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--serverstransport.insecureskipverify=true"&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/var/run/docker.sock:/var/run/docker.sock:ro&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/root/traefik_certs:/letsencrypt&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443:443"&lt;/span&gt;
  &lt;span class="na"&gt;mq&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mq&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;eclipse-mosquitto:2.0.11-openssl@sha256:459f8503a3a248156855501a8fa718b92783bf02fc5b1ea414fae07ca1d1396d&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;netmaker&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/root/mosquitto.conf:/mosquitto/config/mosquitto.conf&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/root/mosquitto_data:/mosquitto/data&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/root/mosquitto_logs:/mosquitto/log&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/root/shared_certs:/mosquitto/certs&lt;/span&gt;
    &lt;span class="na"&gt;expose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8883"&lt;/span&gt;
    &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.enable=true&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.tcp.routers.mqtts.rule=HostSNI(`broker-base-domain.extenssion`)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.tcp.routers.mqtts.tls.passthrough=true&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.tcp.services.mqtts-svc.loadbalancer.server.port=8883&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.tcp.routers.mqtts.service=mqtts-svc&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.tcp.routers.mqtts.entrypoints=websecure&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create Corefile by removing this comment&lt;/span&gt;
coredns.io &lt;span class="o"&gt;{&lt;/span&gt;
 log stdout
 file /root/dnsconfig/coredns.dat
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="c"&gt;# -- Prerequists&lt;/span&gt;
&lt;span class="c"&gt;# yum install -y wireguard-tools net-tools jq&lt;/span&gt;
&lt;span class="c"&gt;# modprobe ip_tables&lt;/span&gt;
&lt;span class="c"&gt;# echo 'ip_tables' &amp;gt;&amp;gt; /etc/modules&lt;/span&gt;

&lt;span class="c"&gt;# -- Install Docker Compose&lt;/span&gt;
&lt;span class="c"&gt;# curl -L --fail https://github.com/docker/compose/releases/download/v2.11.0/docker-compose-linux-aarch64 -o /usr/sbin/docker-compose&lt;/span&gt;
&lt;span class="c"&gt;# chmod +x /usr/sbin/docker-compose&lt;/span&gt;

&lt;span class="c"&gt;# -- Setting env variables&lt;/span&gt;
&lt;span class="nv"&gt;NETMAKER_BASE_DOMAIN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$DOMAIN_NAME&lt;/span&gt;
&lt;span class="nv"&gt;COREDNS_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;ip route get 1 | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s1"&gt;'s/^.*src \([0-9.]*\) .*$/\1/p'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;SERVER_PUBLIC_IP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; ifconfig.me&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;MASTER_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;tr&lt;/span&gt; &lt;span class="nt"&gt;-dc&lt;/span&gt; A-Za-z0-9 &amp;lt;/dev/urandom | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; 30 &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;EMAIL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"gaddam.rahul@email.com"&lt;/span&gt;
&lt;span class="nv"&gt;MESH_SETUP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"true"&lt;/span&gt;
&lt;span class="nv"&gt;VPN_SETUP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"false"&lt;/span&gt;
&lt;span class="nv"&gt;NUM_CLIENTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"   ----------------------------"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"                SETUP ARGUMENTS"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"   ----------------------------"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"        domain: &lt;/span&gt;&lt;span class="nv"&gt;$NETMAKER_BASE_DOMAIN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"         email: &lt;/span&gt;&lt;span class="nv"&gt;$EMAIL&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"    coredns ip: &lt;/span&gt;&lt;span class="nv"&gt;$COREDNS_IP&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"     public ip: &lt;/span&gt;&lt;span class="nv"&gt;$SERVER_PUBLIC_IP&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"    master key: &lt;/span&gt;&lt;span class="nv"&gt;$MASTER_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"   setup mesh?: &lt;/span&gt;&lt;span class="nv"&gt;$MESH_SETUP&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"    setup vpn?: &lt;/span&gt;&lt;span class="nv"&gt;$VPN_SETUP&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;VPN_SETUP&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"true"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"     # clients: &lt;/span&gt;&lt;span class="nv"&gt;$NUM_CLIENTS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;fi
&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"   ----------------------------"&lt;/span&gt;

&lt;span class="nb"&gt;sleep &lt;/span&gt;5

&lt;span class="c"&gt;# -- Installation&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"setting mosquitto.conf..."&lt;/span&gt;
wget &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="nt"&gt;-O&lt;/span&gt; /root/mosquitto.conf https://raw.githubusercontent.com/gravitl/netmaker/master/docker/mosquitto.conf

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"setting docker-compose..."&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /root/dnsconfig
&lt;span class="nb"&gt;cp&lt;/span&gt; /home/opc/setup/netmaker/Corefile /root/dnsconfig/
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /root/traefik_certs
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /root/shared_certs
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /root/sqldata
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /root/mosquitto_data
&lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /root/mosquitto_logs

&lt;span class="nb"&gt;cp&lt;/span&gt; /home/opc/setup/netmaker/docker-compose.yml /root/docker-compose.yml
&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"s/SERVER_PUBLIC_IP/&lt;/span&gt;&lt;span class="nv"&gt;$SERVER_PUBLIC_IP&lt;/span&gt;&lt;span class="s2"&gt;/g"&lt;/span&gt; /root/docker-compose.yml
&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"s/COREDNS_IP/&lt;/span&gt;&lt;span class="nv"&gt;$COREDNS_IP&lt;/span&gt;&lt;span class="s2"&gt;/g"&lt;/span&gt; /root/docker-compose.yml
&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"s/REPLACE_MASTER_KEY/&lt;/span&gt;&lt;span class="nv"&gt;$MASTER_KEY&lt;/span&gt;&lt;span class="s2"&gt;/g"&lt;/span&gt; /root/docker-compose.yml
&lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s2"&gt;"s/YOUR_EMAIL/&lt;/span&gt;&lt;span class="nv"&gt;$EMAIL&lt;/span&gt;&lt;span class="s2"&gt;/g"&lt;/span&gt; /root/docker-compose.yml

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"starting containers..."&lt;/span&gt;
docker-compose &lt;span class="nt"&gt;-f&lt;/span&gt; /root/docker-compose.yml up &lt;span class="nt"&gt;-d&lt;/span&gt;

test_connection&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"testing Traefik setup (please be patient, this may take 1-2 minutes)"&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in &lt;/span&gt;1 2 3 4 5 6
&lt;span class="k"&gt;do
&lt;/span&gt;&lt;span class="nv"&gt;curlresponse&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-vIs&lt;/span&gt; https://api-base-domain.extenssion 2&amp;gt;&amp;amp;1&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; 6 &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
  &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"    Traefik is having an issue setting up certificates, please investigate (docker logs traefik)"&lt;/span&gt;
  &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"    exiting..."&lt;/span&gt;
  &lt;span class="nb"&gt;exit &lt;/span&gt;1
&lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$curlresponse&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="s2"&gt;"failed to verify the legitimacy of the server"&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
  &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"    certificates not yet configured, retrying..."&lt;/span&gt;

&lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$curlresponse&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="s2"&gt;"left intact"&lt;/span&gt;&lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
  &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"    certificates ok"&lt;/span&gt;
  &lt;span class="nb"&gt;break
&lt;/span&gt;&lt;span class="k"&gt;else
  &lt;/span&gt;&lt;span class="nv"&gt;secs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$((&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="k"&gt;))&lt;/span&gt;
  &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"    issue establishing connection...retrying in &lt;/span&gt;&lt;span class="nv"&gt;$secs&lt;/span&gt;&lt;span class="s2"&gt; seconds..."&lt;/span&gt;       
&lt;span class="k"&gt;fi
&lt;/span&gt;&lt;span class="nb"&gt;sleep&lt;/span&gt; &lt;span class="nv"&gt;$secs&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="nb"&gt;set&lt;/span&gt; +e
test_connection


&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt;"


 __   __     ______     ______   __    __     ______     __  __     ______     ______    
/&lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt;"-.&lt;/span&gt;&lt;span class="se"&gt;\ \ &lt;/span&gt;&lt;span class="sh"&gt;  /&lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt; ___&lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt;  /&lt;/span&gt;&lt;span class="se"&gt;\_&lt;/span&gt;&lt;span class="sh"&gt;_  _&lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt;"-./  &lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt;  /&lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt; __ &lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt;  /&lt;/span&gt;&lt;span class="se"&gt;\ \/&lt;/span&gt;&lt;span class="sh"&gt; /    /&lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt; ___&lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt;  /&lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt; == &lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt;  
&lt;/span&gt;&lt;span class="se"&gt;\ \ \-&lt;/span&gt;&lt;span class="sh"&gt;.  &lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt; &lt;/span&gt;&lt;span class="se"&gt;\ \ &lt;/span&gt;&lt;span class="sh"&gt; __&lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt;  &lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sh"&gt;_/&lt;/span&gt;&lt;span class="se"&gt;\ \/&lt;/span&gt;&lt;span class="sh"&gt; &lt;/span&gt;&lt;span class="se"&gt;\ \ \-&lt;/span&gt;&lt;span class="sh"&gt;./&lt;/span&gt;&lt;span class="se"&gt;\ \ &lt;/span&gt;&lt;span class="sh"&gt; &lt;/span&gt;&lt;span class="se"&gt;\ \ &lt;/span&gt;&lt;span class="sh"&gt; __ &lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt; &lt;/span&gt;&lt;span class="se"&gt;\ \ &lt;/span&gt;&lt;span class="sh"&gt; _"-.  &lt;/span&gt;&lt;span class="se"&gt;\ \ &lt;/span&gt;&lt;span class="sh"&gt; __&lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt;  &lt;/span&gt;&lt;span class="se"&gt;\ \ &lt;/span&gt;&lt;span class="sh"&gt; __&amp;lt;   
 &lt;/span&gt;&lt;span class="se"&gt;\ \_\\&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\_\ &lt;/span&gt;&lt;span class="sh"&gt; &lt;/span&gt;&lt;span class="se"&gt;\ \_&lt;/span&gt;&lt;span class="sh"&gt;____&lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt;   &lt;/span&gt;&lt;span class="se"&gt;\ \_\ &lt;/span&gt;&lt;span class="sh"&gt; &lt;/span&gt;&lt;span class="se"&gt;\ \_\ \ \_\ &lt;/span&gt;&lt;span class="sh"&gt; &lt;/span&gt;&lt;span class="se"&gt;\ \_\ \_\ &lt;/span&gt;&lt;span class="sh"&gt; &lt;/span&gt;&lt;span class="se"&gt;\ \_\ \_\ &lt;/span&gt;&lt;span class="sh"&gt; &lt;/span&gt;&lt;span class="se"&gt;\ \_&lt;/span&gt;&lt;span class="sh"&gt;____&lt;/span&gt;&lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="sh"&gt; &lt;/span&gt;&lt;span class="se"&gt;\ \_\ \_\ &lt;/span&gt;&lt;span class="sh"&gt;
  &lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sh"&gt;_/ &lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sh"&gt;_/   &lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sh"&gt;_____/     &lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sh"&gt;_/   &lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sh"&gt;_/  &lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sh"&gt;_/   &lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sh"&gt;_/&lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sh"&gt;_/   &lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sh"&gt;_/&lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sh"&gt;_/   &lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sh"&gt;_____/   &lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sh"&gt;_/ /_/ 
&lt;/span&gt;&lt;span class="no"&gt;

EOF


&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"visit https://dashboard-base-domain.extenssion to log in"&lt;/span&gt;
&lt;span class="nb"&gt;sleep &lt;/span&gt;7

setup_mesh&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{(&lt;/span&gt; &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"creating netmaker network (10.101.0.0/16)"&lt;/span&gt;

curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"addressrange":"10.101.0.0/16","netid":"netmaker"}'&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$MASTER_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; https://api-base-domain.extenssion/api/networks

&lt;span class="nb"&gt;sleep &lt;/span&gt;5

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"creating netmaker access key"&lt;/span&gt;

&lt;span class="nv"&gt;curlresponse&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"uses":99999,"name":"netmaker-key"}'&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$MASTER_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; https://api-base-domain.extenssion/api/networks/netmaker/keys&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;ACCESS_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.accessstring'&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;curlresponse&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;sleep &lt;/span&gt;5

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"configuring netmaker server as ingress gateway"&lt;/span&gt;

&lt;span class="nv"&gt;curlresponse&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$MASTER_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; https://api-base-domain.extenssion/api/nodes/netmaker&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;SERVER_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.[0].id'&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;curlresponse&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

curl &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$MASTER_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; https://api-base-domain.extenssion/api/nodes/netmaker/&lt;span class="nv"&gt;$SERVER_ID&lt;/span&gt;/createingress

&lt;span class="nb"&gt;sleep &lt;/span&gt;5

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"finished configuring server and network. You can now add clients."&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"For Linux, Mac, Windows, and FreeBSD:"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"        1. Install the netclient: https://docs.netmaker.org/netclient.html#installation"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"        2. Join the network: netclient join -t &lt;/span&gt;&lt;span class="nv"&gt;$ACCESS_TOKEN&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"For Android and iOS clients, perform the following steps:"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"        1. Log into UI at dashboard-base-domain.extenssion"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"        2. Navigate to &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;EXTERNAL CLIENTS&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; tab"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"        3. Select the gateway and create clients"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"        4. Scan the QR Code from WireGuard app in iOS or Android"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Netmaker setup is now complete. You are ready to begin using Netmaker."&lt;/span&gt;
&lt;span class="o"&gt;)}&lt;/span&gt;

setup_vpn&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{(&lt;/span&gt; &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"creating vpn network (10.201.0.0/16)"&lt;/span&gt;

curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"addressrange":"10.201.0.0/16","netid":"vpn","defaultextclientdns":"10.201.255.254"}'&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$MASTER_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; https://api-base-domain.extenssion/api/networks

&lt;span class="nb"&gt;sleep &lt;/span&gt;5

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"configuring netmaker server as vpn inlet..."&lt;/span&gt;

&lt;span class="nv"&gt;curlresponse&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$MASTER_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; https://api-base-domain.extenssion/api/nodes/vpn&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;SERVER_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.[0].id'&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;curlresponse&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$MASTER_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; https://api-base-domain.extenssion/api/nodes/vpn/&lt;span class="nv"&gt;$SERVER_ID&lt;/span&gt;/createingress

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"waiting 5 seconds for server to apply configuration..."&lt;/span&gt;

&lt;span class="nb"&gt;sleep &lt;/span&gt;5


&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"configuring netmaker server vpn gateway..."&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$GATEWAY_IFACE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;GATEWAY_IFACE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;ip &lt;span class="nt"&gt;-4&lt;/span&gt; route &lt;span class="nb"&gt;ls&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;default | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-Po&lt;/span&gt; &lt;span class="s1"&gt;'(?&amp;lt;=dev )(\S+)'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"gateway iface: &lt;/span&gt;&lt;span class="nv"&gt;$GATEWAY_IFACE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="nv"&gt;curlresponse&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$MASTER_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; https://api-base-domain.extenssion/api/nodes/vpn&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;SERVER_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'.[0].id'&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;curlresponse&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="nv"&gt;EGRESS_JSON&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt; jq &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
                  &lt;span class="nt"&gt;--arg&lt;/span&gt; gw &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$GATEWAY_IFACE&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
                  &lt;span class="s1"&gt;'{ranges: ["0.0.0.0/0"], interface: $gw}'&lt;/span&gt; &lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"egress json: &lt;/span&gt;&lt;span class="nv"&gt;$EGRESS_JSON&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$EGRESS_JSON&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$MASTER_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; https://api-base-domain.extenssion/api/nodes/vpn/&lt;span class="nv"&gt;$SERVER_ID&lt;/span&gt;/creategateway

&lt;span class="nb"&gt;sleep &lt;/span&gt;3

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"creating client configs..."&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1&lt;span class="p"&gt;;&lt;/span&gt; a &amp;lt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$NUM_CLIENTS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; a++&lt;span class="o"&gt;))&lt;/span&gt;
&lt;span class="k"&gt;do
        &lt;/span&gt;&lt;span class="nv"&gt;CLIENT_JSON&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt; jq &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
                  &lt;span class="nt"&gt;--arg&lt;/span&gt; clientid &lt;span class="s2"&gt;"vpnclient-&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
                  &lt;span class="s1"&gt;'{clientid: $clientid}'&lt;/span&gt; &lt;span class="si"&gt;)&lt;/span&gt;

        curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$CLIENT_JSON&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$MASTER_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; https://api-base-domain.extenssion/api/extclients/vpn/&lt;span class="nv"&gt;$SERVER_ID&lt;/span&gt;
        &lt;span class="nb"&gt;sleep &lt;/span&gt;2
&lt;span class="k"&gt;done

&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"finished configuring vpn server."&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"To configure clients, perform the following steps:"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"        1. log into dashboard-base-domain.extenssion"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"        2. Navigate to &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;EXTERNAL CLIENTS&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; tab"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"        3. Download or scan a client config (vpnclient-x) to the appropriate device"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"        4. Follow the steps for your system to configure WireGuard on the appropriate device"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"        5. Create and delete clients as necessary. Changes to netmaker server settings require regenerating ext clients."&lt;/span&gt;

&lt;span class="o"&gt;)}&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;MESH_SETUP&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="s2"&gt;"false"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;setup_mesh
&lt;span class="k"&gt;fi

if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;VPN_SETUP&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"true"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;setup_vpn
&lt;span class="k"&gt;fi

&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Netmaker setup is now complete. You are ready to begin using Netmaker."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;On successful completion, user will be requested to login to &lt;a href="https://dashboard-base-domain.extenssion/" rel="noopener noreferrer"&gt;https://dashboard-base-domain.extenssion/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Agent Installation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Agent will have same files expect the &lt;code&gt;Netmaker&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Netmaker
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;

&lt;span class="c"&gt;# -- Prerequists&lt;/span&gt;
yum &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; wireguard-tools net-tools jq
modprobe ip_tables
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'ip_tables'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/modules

&lt;span class="c"&gt;# -- Install Netmaker Client&lt;/span&gt;
wget https://github.com/gravitl/netmaker/releases/download/v0.15.2/netclient-arm64 &lt;span class="nt"&gt;-O&lt;/span&gt; /usr/sbin/netclient
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x /usr/sbin/netclient
netclient daemon &amp;amp;

&lt;span class="c"&gt;# -- Joining Netmaker Master&lt;/span&gt;
netclient &lt;span class="nb"&gt;join&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; &amp;lt;token&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Verification
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;On successful installation, User will be able to view new network on &lt;code&gt;ifconfig&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Ping&lt;/code&gt; to different systems will be accessible.&lt;/li&gt;
&lt;li&gt;Dashboard will show all nodes connected
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faa70i7vqa0ol2odi1uke.png" alt="Image description"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.netmaker.org/index.html" rel="noopener noreferrer"&gt;Docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://itnext.io/getting-started-with-netmaker-a-wireguard-virtual-networking-platform-3d563fbd87f0" rel="noopener noreferrer"&gt;itnext.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/channel/UCach3lJY_xBV7rGrbUSvkZQ/videos" rel="noopener noreferrer"&gt;Videos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>netmaker</category>
      <category>wiregaurd</category>
      <category>cloud</category>
      <category>multicloud</category>
    </item>
    <item>
      <title>Installing K8 on ARM64 [4 cpu, 24Gb RAM]</title>
      <dc:creator>Rahul Kiran Gaddam</dc:creator>
      <pubDate>Thu, 02 Sep 2021 16:18:33 +0000</pubDate>
      <link>https://forem.com/rahgadda/installing-k8-on-arm64-4-cpu-24gb-ram-648</link>
      <guid>https://forem.com/rahgadda/installing-k8-on-arm64-4-cpu-24gb-ram-648</guid>
      <description>&lt;h2&gt;
  
  
  Philosophy
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Kubernetes/K8 has solved biggest problem of Infrastructure.&lt;/li&gt;
&lt;li&gt;Unfortunately to work with it we require lot of infrastructure [Static IP, Hardware, Domain Name].&lt;/li&gt;
&lt;li&gt;There are lot of alternatives that will help us to explore it like &lt;a href="https://labs.play-with-k8s.com/" rel="noopener noreferrer"&gt;Play with Kubernetes&lt;/a&gt;, &lt;a href="https://www.katacoda.com/courses/kubernetes/playground" rel="noopener noreferrer"&gt;Katacoda&lt;/a&gt;. There are always something [Persistence, Availability] that is missing.&lt;/li&gt;
&lt;li&gt;In this article we will explore how to create a K8 Single Node Cluster and explore K8. This document is based on inspiration from article &lt;a href="https://faun.pub/free-ha-multi-architecture-kubernetes-cluster-from-oracle-c66b8ce7cc37" rel="noopener noreferrer"&gt;Medium K8 Installation&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Overview
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;As part of this article we will cover below:

&lt;ul&gt;
&lt;li&gt;Oracle OCI Cloud&lt;/li&gt;
&lt;li&gt;Installing k8 Single Node Cluster&lt;/li&gt;
&lt;li&gt;Ingress Controller&lt;/li&gt;
&lt;li&gt;Running Kubernetes Dashboard&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  OCI
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Oracle is revolutionizing Cloud for Industries. Oracle is &lt;strong&gt;only SaaS company&lt;/strong&gt; in the market that provide all offering of cloud &lt;strong&gt;[IaaS, PaaS, SaaS]&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Majority of cloud offering are giving minimum free kits to explore. &lt;/li&gt;
&lt;li&gt;Oracle has crossed this barrier by providing free offering of Compute, Network, Load Balancer, Autonomous Database for all under strategy of &lt;strong&gt;Always Free Resources&lt;/strong&gt;.
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fngudhonak3jwn5x1lbw4.png" alt="image"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Using OCI free tire we will create &lt;strong&gt;k8 Single node cluster with 24GB &amp;amp; 4 OCPU&lt;/strong&gt;. &lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For this installation, I have considered below. I tried to create two nodes, networking between nodes I was not able to solve. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instance Name : K8-Master&lt;/strong&gt;
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8ou6u1a0gvtov511eg2a.png" alt="image"&gt; &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image: Oracle Linux Cloud Developer 8&lt;/strong&gt;
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx2tekcydwp8o9ku0chr8.png" alt="image"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Processor: Amper Arm64 Bit Processor&lt;/strong&gt;
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3nmheltdr3sv9qo83ize.png" alt="image"&gt;
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsjl1syz5d475xejm57sc.png" alt="image"&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;This will create a VM with &lt;strong&gt;Public IP&lt;/strong&gt;. We have to be careful while we selecting container/deliverable to run on this VM. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In general deliverables are listed as &lt;strong&gt;linux-amd64&lt;/strong&gt; &amp;amp; 
&lt;strong&gt;darwin-amd64&lt;/strong&gt;, we need to consider deliverables labeled as 
&lt;strong&gt;linux-arm64&lt;/strong&gt;.
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fah081f0qomk8qggggshl.png" alt="image"&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Once VM is provisioned, its suggested to associate it with a domain as it simplifies access to K8 Cluster.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There are a lot of free domain providers. I have used &lt;a href="https://www.noip.com/login" rel="noopener noreferrer"&gt;No-ip&lt;/a&gt; 
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxca34afchanhg0cnyu4k.png" alt="image"&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Below are steps that we have followed to install K8&lt;br&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  &lt;span class="c"&gt;# Login to Root&lt;/span&gt;
  &lt;span class="nb"&gt;sudo &lt;/span&gt;su

  &lt;span class="c"&gt;# Updating Host File - Add entry&lt;/span&gt;
  &lt;span class="c"&gt;## Get CIDR Private IP&lt;/span&gt;
  ifconfig 

  vi /etc/hosts
  &lt;span class="k"&gt;**&lt;/span&gt;&amp;lt;private.ip&amp;gt;&lt;span class="k"&gt;**&lt;/span&gt; k8-master &lt;span class="k"&gt;**&lt;/span&gt;&amp;lt;domain.name&amp;gt;&lt;span class="k"&gt;**&lt;/span&gt;

  &lt;span class="c"&gt;# Firewall Configuration&lt;/span&gt;
  systemctl disable firewalld
  yum &lt;span class="nb"&gt;install &lt;/span&gt;iptables-services &lt;span class="nt"&gt;-y&lt;/span&gt;
  systemctl start iptables
  systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;iptables
  iptables &lt;span class="nt"&gt;-F&lt;/span&gt;
  iptables &lt;span class="nt"&gt;-P&lt;/span&gt; INPUT ACCEPT
  iptables &lt;span class="nt"&gt;-P&lt;/span&gt; OUTPUT ACCEPT
  service iptables save
  systemctl restart iptables
  iptables &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt;

  &lt;span class="c"&gt;# Docker Installation&lt;/span&gt;
  &lt;span class="c"&gt;## Podman is by default provided, K8 can run on Podman&lt;/span&gt;
  &lt;span class="c"&gt;## I was unable to install using Podman and need to move to docker&lt;/span&gt;

  &lt;span class="c"&gt;# -- Remove Podman&lt;/span&gt;
  yum remove podman buildah  &lt;span class="nt"&gt;-y&lt;/span&gt;

  &lt;span class="c"&gt;# -- Install Docker&lt;/span&gt;
  &lt;span class="nb"&gt;sudo &lt;/span&gt;yum &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; yum-utils
  &lt;span class="nb"&gt;sudo &lt;/span&gt;yum-config-manager &lt;span class="nt"&gt;--add-repo&lt;/span&gt; https://download.docker.com/linux/centos/docker-ce.repo
  yum &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; docker-ce

  &lt;span class="c"&gt;# -- Configure Docker&lt;/span&gt;
  systemctl  stop docker
  /usr/sbin/usermod &lt;span class="nt"&gt;-a&lt;/span&gt; &lt;span class="nt"&gt;-G&lt;/span&gt; docker opc
  /usr/sbin/sysctl net.ipv4.conf.all.forwarding&lt;span class="o"&gt;=&lt;/span&gt;1
  systemctl  start docker
  &lt;span class="nb"&gt;chmod &lt;/span&gt;777 /var/run/docker.sock
  swapoff &lt;span class="nt"&gt;-a&lt;/span&gt;
  &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'/ swap / s/^/#/'&lt;/span&gt; /etc/fstab
  vi /etc/docker/daemon.json
  &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"exec-opts"&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"native.cgroupdriver=systemd"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;

  &lt;span class="c"&gt;# Install K8 Software&lt;/span&gt;

  &lt;span class="c"&gt;# -- Pre configurations&lt;/span&gt;
  &lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; |  tee /etc/modules-load.d/k8s.conf
  br_netfilter
&lt;/span&gt;&lt;span class="no"&gt;  EOF

&lt;/span&gt;  &lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; |  tee /etc/sysctl.d/k8s.conf
  net.bridge.bridge-nf-call-ip6tables = 1
  net.bridge.bridge-nf-call-iptables = 1
&lt;/span&gt;&lt;span class="no"&gt;  EOF

&lt;/span&gt;  sysctl &lt;span class="nt"&gt;--system&lt;/span&gt;

  &lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; |  tee /etc/yum.repos.d/kubernetes.repo
  [kubernetes]
  name=Kubernetes
  baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-&lt;/span&gt;&lt;span class="se"&gt;\$&lt;/span&gt;&lt;span class="sh"&gt;basearch
  enabled=1
  gpgcheck=1
  repo_gpgcheck=1
  gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
  exclude=kubelet kubeadm kubectl
&lt;/span&gt;&lt;span class="no"&gt;  EOF

&lt;/span&gt;  setenforce 0
  &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="s1"&gt;'s/^SELINUX=enforcing$/SELINUX=permissive/'&lt;/span&gt; /etc/selinux/config

  &lt;span class="c"&gt;# -- Download&lt;/span&gt;
  yum &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; kubelet kubeadm kubectl &lt;span class="nt"&gt;--disableexcludes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;kubernetes
  systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; &lt;span class="nt"&gt;--now&lt;/span&gt; kubelet

  &lt;span class="c"&gt;# -- Validate&lt;/span&gt;
  kubectl version &lt;span class="nt"&gt;--short&lt;/span&gt;
  kubeadm version &lt;span class="nt"&gt;--short&lt;/span&gt;

  &lt;span class="c"&gt;# -- Creating OS Services&lt;/span&gt;
  systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;docker.service
  systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;kubelet.service
  systemctl daemon-reload
  systemctl restart docker
  systemctl restart kubelet

  &lt;span class="c"&gt;# -- Installing K8 Single Node Cluster&lt;/span&gt;
  &lt;span class="nv"&gt;CERTKEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;kubeadm certs certificate-key&lt;span class="si"&gt;)&lt;/span&gt;
  kubeadm init &lt;span class="nt"&gt;--apiserver-cert-extra-sans&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;domain.name&amp;gt;,&amp;lt;public.ip&amp;gt;,&amp;lt;private.ip&amp;gt; &lt;span class="nt"&gt;--pod-network-cidr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10.32.0.0/12   &lt;span class="nt"&gt;--control-plane-endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;domain.name&amp;gt; &lt;span class="nt"&gt;--upload-certs&lt;/span&gt; &lt;span class="nt"&gt;--certificate-key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$CERTKEY&lt;/span&gt;

  &lt;span class="c"&gt;# -- Moving k8 config file  &lt;/span&gt;
  &lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.kube
  &lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; /etc/kubernetes/admin.conf &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.kube/config
  &lt;span class="nb"&gt;chown&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;:&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.kube/config
  &lt;span class="nb"&gt;mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /home/opc/.kube
  &lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nv"&gt;$HOME&lt;/span&gt;/.kube/config /home/opc/.kube/config
  &lt;span class="nb"&gt;chmod &lt;/span&gt;777 /home/opc/.kube/config

  &lt;span class="c"&gt;# -- Validating Installation&lt;/span&gt;
  netstat &lt;span class="nt"&gt;-nplt&lt;/span&gt;
  kubectl get nodes
  kubectl get pods &lt;span class="nt"&gt;-n&lt;/span&gt; kube-system

  &lt;span class="c"&gt;# -- Enabling Flannel Networking&lt;/span&gt;
  kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Ingress
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;With a successful K8 environment installation, we wanted to run pods and access them using DNS name associated.&lt;/li&gt;
&lt;li&gt;Ingress controller helps to do this. We will associate ingress to two &lt;strong&gt;Pods&lt;/strong&gt;.
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.nginx.com%2Fwp-content%2Fuploads%2F2018%2F12%2FNGINX-Ingress-Controller-4-services_social.png"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Taint Master&lt;/span&gt;
&lt;span class="c"&gt;## This will allow pods to be scheduled on Master&lt;/span&gt;
kubectl get nodes &lt;span class="nt"&gt;-o&lt;/span&gt; json | jq &lt;span class="s1"&gt;'.items[].spec.taints'&lt;/span&gt;
kubectl taint nodes k8-master node-role.kubernetes.io/master:NoSchedule- 

&lt;span class="c"&gt;# Install Helm&lt;/span&gt;
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
&lt;span class="nb"&gt;mv&lt;/span&gt; /usr/local/bin/helm /usr/bin

&lt;span class="c"&gt;# -- Validating Helm Installation&lt;/span&gt;
helm version

&lt;span class="c"&gt;# -- Add Helm Repo&lt;/span&gt;
helm repo add stable https://charts.helm.sh/stable
helm repo list

&lt;span class="c"&gt;# Install Nginx Ingress Controller&lt;/span&gt;

&lt;span class="c"&gt;# -- Add Helm Chart as default is Depricated&lt;/span&gt;
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm repo list

&lt;span class="c"&gt;# -- Download default chart&lt;/span&gt;
helm show values ingress-nginx/ingress-nginx &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ngingress-metal-custom.yaml
&lt;span class="nb"&gt;chmod &lt;/span&gt;777 ngingress-metal-custom.yaml

&lt;span class="c"&gt;# -- Update Settings to run Nginx on OCI&lt;/span&gt;
hostNetwork: &lt;span class="nb"&gt;true&lt;/span&gt; &lt;span class="c"&gt;## change to false&lt;/span&gt;

hostPort:
  enabled: &lt;span class="nb"&gt;false&lt;/span&gt; &lt;span class="c"&gt;## change to true&lt;/span&gt;

kind: Deployment &lt;span class="c"&gt;## change to DaemonSet&lt;/span&gt;

externalIPS:
- public.ip &lt;span class="c"&gt;## replace with your instance's Public IP&lt;/span&gt;

loadBalancerSourceRanges:
- public.ip/32 &lt;span class="c"&gt;## replace with your instance's Public IP&lt;/span&gt;

&lt;span class="c"&gt;# -- Run Chart&lt;/span&gt;
kubectl create ns ingress-nginx
helm &lt;span class="nb"&gt;install &lt;/span&gt;helm-ngingress ingress-nginx/ingress-nginx &lt;span class="nt"&gt;-n&lt;/span&gt; ingress-nginx &lt;span class="nt"&gt;--values&lt;/span&gt; ngingress-metal-custom.yaml

&lt;span class="c"&gt;# -- Verification&lt;/span&gt;
kubectl get all &lt;span class="nt"&gt;-n&lt;/span&gt; ingress-nginx
helm list &lt;span class="nt"&gt;-n&lt;/span&gt; ingress-nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Connecting Service to an Ingress
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# -- This will create Deployment, ClusterIP Service, Ingress&lt;/span&gt;
kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; https://raw.githubusercontent.com/rahgadda/Kubernetes/master/MyDev/helloworld-ingress.yaml

&lt;span class="c"&gt;# -- Verify Ingress &lt;/span&gt;
kubectl get ing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;On accessing &lt;code&gt;http://&amp;lt;public.ip&amp;gt;&lt;/code&gt;, &lt;code&gt;http://&amp;lt;domain.name&amp;gt;&lt;/code&gt; system will display &lt;code&gt;Hello, World!&lt;/code&gt;
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcsol7f1exkkft5kvncb1.png" alt="image"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Dashboard
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;K8 team has created k8 dashboard to view insights on Kubernetes.&lt;/li&gt;
&lt;li&gt;Typically it is accessed using &lt;strong&gt;kube proxy or node port&lt;/strong&gt;. We will deploy it and access it using Ingress.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# -- Install Dashboard&lt;/span&gt;
kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml

&lt;span class="c"&gt;# -- Verify Dashboard &lt;/span&gt;
kubectl get svc &lt;span class="nt"&gt;-n&lt;/span&gt; kubernetes-dashboard
kubectl get pods &lt;span class="nt"&gt;-n&lt;/span&gt; kubernetes-dashboard

&lt;span class="c"&gt;# -- Create Service Account to Access Dashboard&lt;/span&gt;
kubectl create serviceaccount rahgadda &lt;span class="nt"&gt;-n&lt;/span&gt; default
kubectl create clusterrolebinding dashboard-admin &lt;span class="nt"&gt;-n&lt;/span&gt; default &lt;span class="nt"&gt;--clusterrole&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;cluster-admin &lt;span class="nt"&gt;--serviceaccount&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;default:rahgadda
kubectl create clusterrolebinding user-cluster-admin-binding &lt;span class="nt"&gt;--clusterrole&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;cluster-admin &lt;span class="nt"&gt;--user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;default

&lt;span class="c"&gt;# -- Create Config file to Login&lt;/span&gt;
&lt;span class="nv"&gt;server&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;https://&amp;lt;domain.name&amp;gt;:6443
&lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;kubectl get serviceaccount rahgadda &lt;span class="nt"&gt;-n&lt;/span&gt; default &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"{.secrets[0].name}"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;ca&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;kubectl get secret/&lt;span class="nv"&gt;$name&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'{.data.ca\.crt}'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;token&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;kubectl get secret/&lt;span class="nv"&gt;$name&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'{.data.token}'&lt;/span&gt; | &lt;span class="nb"&gt;base64&lt;/span&gt; &lt;span class="nt"&gt;--decode&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;namespace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;kubectl get secret/&lt;span class="nv"&gt;$name&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'{.data.namespace}'&lt;/span&gt; | &lt;span class="nb"&gt;base64&lt;/span&gt; &lt;span class="nt"&gt;--decode&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"
apiVersion: v1
kind: Config
clusters:
- name: default-cluster
  cluster:
    certificate-authority-data: &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ca&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
    server: &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;server&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
contexts:
- name: default-context
  context:
    cluster: default-cluster
    namespace: default
    user: default-user
current-context: default-context
users:
- name: default-user
  user:
    token: &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;token&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;
"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; rahgadda-kubeconfig.yaml

&lt;span class="c"&gt;# -- Use rahgadda-kubeconfig.yaml file to login to Dashboard&lt;/span&gt;

&lt;span class="c"&gt;# -- Create Ingress for Dashboard Service&lt;/span&gt;
kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; https://raw.githubusercontent.com/rahgadda/Kubernetes/master/MyDev/k8-dashboard-ingress.yaml

&lt;span class="c"&gt;# -- Dashboard will be available at URL https://&amp;lt;domain.name&amp;gt;/dashboard/&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0mg4gr21e3dbx3cq4f83.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0mg4gr21e3dbx3cq4f83.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>arm64</category>
      <category>oracle</category>
      <category>oci</category>
    </item>
  </channel>
</rss>
