Kubernetes Integration with Python-CGI

Anjali Singh
3 min readAug 26, 2021

Task Description: Create a WebUI page for kubernetes
Feature necessary.
⚙ It can launch pods with the specific names given by users.
⚙ Run deployment using the image and name given by the user.
⚙ Expose services on given user input port number.
⚙ Scale the replica according to user needs.
⚙ Delete complete environment created.
⚙ Delete specific resources given by the user.
⚙ Extra features related to k8s ( Optional)

Frontend Code:

<!DOCTYPE html>

<html lang=”en”>

<head>

<meta charset=”UTF-8">

<meta name=”viewport” content=”width=device-width, initial-scale=1.0">

<meta http-equiv=”X-UA-Compatible” content=”ie=edge”>

<title>kubernetes</title>

<script>

function lw() {

var i = document.getElementById(“input”).value

var idd = “0”

var final = “ “

//creating deployment

if (((i.includes(“deployments”)) || (i.includes(“deployment”)) || (i.includes(“deploy”))) && ((i.includes(“launch”)) || (i.includes(“create”)) || (i.includes(“run”)) || (i.includes(“build”)))) {

var iname = prompt(“Enter imagename: “)

var dname = prompt(“Enter deployment name: “)

var idd = “1”

var final = idd + “ “ + iname + “ “ + dname

}

//creating pod

else if (((i.includes(“pod”)) || (i.includes(“pods”))) && ((i.includes(“launch”)) || (i.includes(“create”)) || (i.includes(“build”)) || (i.includes(“run”)))) {

var iname = prompt(“Enter image name: “)

var pname = prompt(“Enter pod name: “)

var idd = “2”

var final = idd + “ “ + iname + “ “ + pname

}

//delete pod

else if (((i.includes(“pod”)) || (i.includes(“pods”))) && ((i.includes(“delete”)) || (i.includes(“remove”)) || (i.includes(“detach”)) || (i.includes(“destroy”)))){

var pname = prompt(“Enter pod name: “)

var idd = “3”

var final = idd + “ “ + pname

}

//delete deployment

else if (((i.includes(“deployments”)) || (i.includes(“deployment”)) || (i.includes(“deploy”))) && ((i.includes(“delete”)) || (i.includes(“remove”)) || (i.includes(“destroy”)) || (i.includes(“detach”)))) {

var dname = prompt(“Enter deployment name: “)

var idd = “4”

var final = idd + “ “ + dname

}

//expose deployment

else if (((i.includes(“deployments”)) || (i.includes(“deploy”)) || (i.includes(“deployment”))) && ((i.includes(“expose”)) || (i.includes(“display”)) || (i.includes(“display”)))) {

var dname = prompt(“Enter Deployment name: “)

var port_no = prompt(“Enter port no on which you want yo export your deployment: “)

var etype = prompt(“ 1. NodePort \n 2. ClusterIP \n 3.External \n Enter the type which you want to expose “)

var idd = “5”

var final = idd + “ “ + dname + “ “ + port_no + “ “ + etype

}

//scale deployment

else if (((i.includes(“deployments”)) || (i.includes(“deploy”)) || (i.includes(“deployment”))) && ((i.includes(“scale”)) || (i.includes(“replica”)) || (i.includes(“increase”)) || (i.includes(“decrease”)) || (i.includes(“scale up”)) || (i.includes(“scale down”)))) {

var dname = prompt(“Enter Deployment name: “)

var replica = prompt(“Enter no. of replicas you need : “)

var idd = “6”

var final = idd + “ “ + dname + “ “ + replica

}

//list pods

else if (((i.includes(“pods”)) || (i.includes(“pod”))) && ((i.includes(“show”)) || (i.includes(“get”)) || (i.includes(“display”)) || (i.includes(“see”)) || (i.includes(“list”)))) {

var idd = “7”

var final = idd

}

//list deployments

else if (((i.includes(“deployments”)) || (i.includes(“deployment”)) || (i.includes(“deploy”))) && ((i.includes(“show”)) || (i.includes(“see”)) || (i.includes(“display”)) || (i.includes(“get”)) || (i.includes(“list”)))) {

var idd = “8”

var final = idd

}

//list svc

else if (((i.includes(“services”)) || (i.includes(“services”)) || (i.includes(“svc”))) && ((i.includes(“show”)) || (i.includes(“see”)) || (i.includes(“display”)) || (i.includes(“get”)) || (i.includes(“list”)))) {

var idd = “9”

var final = idd

}

}

else {

var idd = “404”

var final = idd

}

var xhr = new XMLHttpRequest();

xhr.open(“GET”, “http://192.168.218.103/cgi-bin/kubernetes.py?x=" + final, true);

xhr.send()

xhr.onload = function () {

var output = xhr.responseText;

document.getElementById(“d1”).innerHTML = output;

}

}

</script>

<link rel=”stylesheet” href=”Style.css” />

<! — CSS only →

<link

href=”https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"

rel=”stylesheet”

integrity=”sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC”

crossorigin=”anonymous”

/>

<! — JavaScript Bundle with Popper →

<script

src=”https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"

integrity=”sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM”

crossorigin=”anonymous”

></script>

</head>

<body>

<div class=”main”>

<h1 style=”text-align: center; font-family:’Segoe UI’, Tahoma, Geneva, Verdana, sans-serif; color:teal; text-shadow: slategray; padding: 30px;”>Kubernetes Portal</h1>

<img src=”homepage-docker-logo.png” class=”logo” alt=”” srcset=”” />

<div class=”input-group”>

<div class=”input-group-prepend”>

<span class=”input-group-text” id=””>Enter your requirement:</span>

</div>

<input type=”text” class=”form-control” aria-describedby=”basic-addon2">

<div class=”input-group-append”>

<button class=”btn btn-dark btn-outline-secondary” type=”button” onclick=”lw()”>Run</button>

</div>

</div>

<pre>

<div class=”out”>Output:</div>

</pre>

</div>

</body>

</html>

Backend Code:

<!DOCTYPE html>

<html lang="en">

<head>

--

--