diff --git a/docs/_build/html/objects.inv b/docs/_build/html/objects.inv
index fadcbb6..b939059 100644
Binary files a/docs/_build/html/objects.inv and b/docs/_build/html/objects.inv differ
diff --git a/docs/_build/html/search.html b/docs/_build/html/search.html
index 9ce7253..683c424 100644
--- a/docs/_build/html/search.html
+++ b/docs/_build/html/search.html
@@ -14,7 +14,7 @@
-
+
@@ -58,6 +58,7 @@
+
diff --git a/docs/_build/html/searchindex.js b/docs/_build/html/searchindex.js
index 495c96d..f9bea9d 100644
--- a/docs/_build/html/searchindex.js
+++ b/docs/_build/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["class1/class1","class1/module1/module1","class1/module2/module2","class1/module3/module3","class1/module4/module4","class1/module5/module5","class1/module6/not-in-use-module6","class1/module7/module7","class1/module8/module8","class1/module9/module9","class1/modulea1/modulea1","class1/modulea2/modulea2","class2/class2","class2/module1/module1","class2/module2/module2","class3/class3","class3/module1/lab1/lab1","class3/module1/lab2/lab2","class3/module1/module1","class3/module2/module2","class4/class4","class4/module1/lab1/lab1","class4/module1/lab2/lab2","class4/module1/lab3/lab3","class4/module1/module1","class4/module2/lab1/lab1","class4/module2/lab2/lab2","class4/module2/lab3/lab3","class4/module2/module2","class5/class5","class5/module1/lab1/lab1","class5/module1/lab2/lab2","class5/module1/lab3/lab3","class5/module1/module1","class5/module2/lab1/lab1","class5/module2/module2","class5/modulea2/modulea2","index","intro/intro"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.todo":1,sphinx:55},filenames:["class1/class1.rst","class1/module1/module1.rst","class1/module2/module2.rst","class1/module3/module3.rst","class1/module4/module4.rst","class1/module5/module5.rst","class1/module6/not-in-use-module6.rst","class1/module7/module7.rst","class1/module8/module8.rst","class1/module9/module9.rst","class1/modulea1/modulea1.rst","class1/modulea2/modulea2.rst","class2/class2.rst","class2/module1/module1.rst","class2/module2/module2.rst","class3/class3.rst","class3/module1/lab1/lab1.rst","class3/module1/lab2/lab2.rst","class3/module1/module1.rst","class3/module2/module2.rst","class4/class4.rst","class4/module1/lab1/lab1.rst","class4/module1/lab2/lab2.rst","class4/module1/lab3/lab3.rst","class4/module1/module1.rst","class4/module2/lab1/lab1.rst","class4/module2/lab2/lab2.rst","class4/module2/lab3/lab3.rst","class4/module2/module2.rst","class5/class5.rst","class5/module1/lab1/lab1.rst","class5/module1/lab2/lab2.rst","class5/module1/lab3/lab3.rst","class5/module1/module1.rst","class5/module2/lab1/lab1.rst","class5/module2/module2.rst","class5/modulea2/modulea2.rst","index.rst","intro/intro.rst"],objects:{},objnames:{},objtypes:{},terms:{"771e948b":31,"953762f7a2a7":31,"9b50":31,"break":[25,26,27],"case":10,"class":37,"default":[6,26,31],"function":[0,8,12,29],"import":[22,27,32],"long":21,"new":[22,26,30,31,32],"public":[1,11,21,36],"return":31,"static":[20,37],"super":27,"switch":[16,27,34],"while":[0,5,12,29],AWS:[12,13,14,18,37],And:[25,27],But:[26,27],DNS:[21,32],For:[0,3,12,18,21,29,30,34,35],K8S:[32,37],K8s:[16,17,30,32,34,37],NOT:27,OAS:[22,23],One:[3,4,7],TLS:[5,21],The:[0,3,6,8,12,13,20,22,23,25,26,29,30,31,32,37,38],Then:21,abl:[4,7,8,12,13,32],about:[21,27],access:[7,14,30,31,32,37,38],account:[37,38],achiv:30,action:27,activ:20,add:[1,16,21,26,32,34],addit:[9,32],addopt:12,address:[4,26],adject:[21,22,23,25,27],admin:31,advanc:[0,16,34,37],advertis:[16,34],after:[12,15,31],against:3,agent:6,aka:31,all:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,24,25,26,27,28,29,30,32,33,35,36,38],allow:[3,9,13,15,22,25,26,35],almost:32,alon:22,alreadi:0,also:[9,22,25,27],analyt:[20,23],anew:22,ani:[0,7,9,11,12,15,20,22,25,29,35,36,38],anim:[21,22,23,27],anomal:20,anonym:4,anticip:27,anyth:[0,12,29],aou:25,api:[0,32,37],app:[0,10,12,14,16,17,22,23,27,29,30,31,32,34],appear:27,appli:[11,16,21,24,28,30,32,34,36],applic:[0,6,7,8,9,12,15,16,17,20,24,25,27,28,29,31,34,35,37],approv:31,arcadia:[0,12,16,29,30,32,34],arcadia_crypto:30,arcadiacrypto:32,around:31,arrai:25,attack:[2,4,7,8,20],attend:38,auth:22,autom:7,automat:[8,21,31,32],avail:[0,17,31,32,37],awar:25,backend:[9,18,35],bad:4,balanc:[9,11,21,22,26,27,31,32,36],baremet:9,base:[4,5,6,13,20,21,22,25,32],basic:[0,37],becaus:[23,25,27],been:30,befor:[0,11,12,15,20,22,29,36,38],behav:6,behaviour:[1,5,7],being:7,bellow:[6,16,21,30,31,32,34],below:[0,22,23,25],best:2,better:25,between:[12,14,25,26],big:22,bitcoin:32,blindfold:32,block:[3,5,6,20,25,27],blue:21,boiangiu:[0,12,15,20,29],boom:12,bot:[0,37],both:[18,25,27,35],botnet:4,box:[16,34],breed:2,brows:[21,32],bug:37,bui:[0,12,29,32],built:1,busi:[7,25,26],button:[0,11,12,15,20,29,36],cach:21,call:23,can:[0,5,9,10,12,15,17,21,22,25,27,29,31,32,35,37],capabl:[1,3,5,6,9,10,15,31],card:26,care:25,carefulli:38,cat:30,categori:4,center:12,ceonprem:[31,32],certifi:31,challang:5,chang:[6,18,20,21,32],characht:3,charg:[0,12,29],charset:23,chart:0,check:[3,17,21,27,30,32,34],choos:[16,32,34],chose:[11,36],clasiffi:6,clasifi:6,click:[0,12,15,16,17,21,23,25,26,27,29,30,31,32,34,37],client:[0,5,12,15,18,29,35],close:[15,22,35],cloud:[20,22,24,26,28,31,32],cluster:[16,31,32,33,34,35],clusternam:[31,32],code:[15,35],collect:27,color:[21,22,23,27],com:[0,12,15,16,20,21,22,23,26,29,32,34,37],combo:31,command:30,common:7,commun:[12,14,20],compon:[0,12,25,29,30,31],compos:21,config:[0,2,3,4,5,7,8,12,14,15,18,19,29,37],configur:[0,2,6,9,10,12,13,15,16,19,20,21,22,25,26,30,31,32,34],confirm:25,congratul:27,connect:[0,12,23,29,31,32,37],consol:31,construct:37,consum:26,contain:[15,16,34,35,37],content:[0,11,12,15,20,23,25,29,36,37],continu:[4,12,15],cooki:5,copi:22,corner:27,cover:37,creat:[11,13,16,21,25,32,34,36],creation:[37,38],credenti:[7,31],credit:26,crypto:[0,12,18,29,30,32,35],css:[0,12,29],curl:[6,23],currenc:[0,12,18,29,32,35],current:[18,27,32,35],custom:[0,7,9,15,25,27,29,32,33,35,37],dashboard:[23,27,31],data:[0,11,12,13,15,16,21,26,27,29,31,32,34,36],databas:[0,4,7,12,29],datacent:[0,9],dataguard:27,date:26,ddo:[0,37],deal:[0,7,12,13,29],decid:13,decis:5,deep:20,deeper:25,defin:[3,16,22,23,26,32,34],deliv:[21,22],delpoi:30,demo:21,deni:[22,23,25],denial:4,deploi:[6,15,16,19,20,21,29,34,35,37],deploy:[17,30,31],describ:31,descript:25,design:22,detail:[21,27],detect:[0,6,26,27,37],detet:27,dev:[22,25],developp:27,devic:9,devop:[26,37],didn:14,dierick:[0,12,15,20],differ:[5,12,13,16,25,26,34,35],directli:[0,9],dirti:4,disabl:[21,22,25],discov:[26,27,31,32],discoveri:[20,22,25,28,32,37],discuss:8,disoveri:22,displai:21,distribut:[15,16,17,20,22,24,26,28,34,35],docker:[16,34],doe:[22,25,27],domain:[21,32],don:27,done:[0,3,9,12,27,29,32],down:[23,26,30,31],drift:26,drop:[30,31],dropdown:32,due:[8,10,12,18,35],dure:[0,8,12,15,29],dynam:[0,11,12,15,20,29,36,37],each:32,easili:20,edg:[9,15,16,18,29,32,33,34,35],edit:[22,25,26,32],elimin:20,els:23,email:[0,3,11,12,15,20,26,29,36],emea:[21,23,26,32],enabl:[6,8,20,21,22,28,31,32],endpoint:[13,20,21,22,23,25],enforc:[22,26,27],enforec:3,engin:[26,27],enhanc:37,ensur:[18,35],enter:[0,11,12,15,20,29,31,36],entri:31,environ:[13,14,15,30,31,34,35,37,38],etc:26,event:23,everi:21,evid:27,exampl:[3,25],except:25,exchang:32,exist:1,exit:[16,21,31,32,34],expand:[9,12],experi:38,exploit:4,explor:[0,12,15,29,37],expos:[0,1,18,20,24,29,31,33,35,37],extend:31,extern:[0,9,12,29],f5devcentr:[21,37],f5emeassa:22,f5er:37,f5se:[21,23,26,32],f5xc:[9,10,20,24,31,37],f6ef:31,face:1,fact:8,fail:22,fall:[25,26],far:[21,22],fast:[15,29,35],featur:27,few:[27,32],field:[16,34],file:[20,23,24,26,27,32],fill:[16,21,31,32,34],filter:27,find:[21,30],fingerprint:5,finish:[12,15,19,31],firewal:[0,6,37],first:[1,21,22,25,27,31,32],fix:21,flag:4,focus:37,follow:[0,3,12,21,29,31],forc:27,forens:20,format:[3,21],found:31,framework:21,fraud:7,french:[26,27],frequent:20,from:[7,8,20,21,25,26,27,37],frontend:[0,12,13,21,29,32],full:[11,25,27,36,37],fulli:31,gener:[20,21,27],get:[0,11,12,15,21,25,27,29,30,36],github:[21,37],given:32,global:[0,1,10,21,37],goe:25,going:[7,10,31],good:[0,6,11,12,15,20,22,29,36],graph:27,green:[0,11,12,15,20,29,36],group:22,guid:[31,38],handl:12,hardwar:31,has:[3,5,7,26,30,32],have:[0,6,11,12,15,19,20,21,22,23,25,27,29,31,36],haven:31,header:5,health:[31,32],healthcheck:32,healthz:32,help:[29,32],here:[31,37],hide:27,high:31,highest:27,home:30,hostnam:31,hour:27,how:[2,16,21,29,34],html:[0,7,12,29],http:[5,21,22,23,32,37],hub:[16,34],identif:[11,36],identifi:[4,8,20,26],identifir:5,imag:[0,12,16,29,34],impact:7,includ:[0,20,37],indentifi:5,index:25,inern:32,inform:[0,12,26,27,29],infrastractur:12,infrastructur:[31,33],initi:31,inject:7,input:[16,34],insight:20,inspect:[0,37],instal:9,instanc:[27,37],instead:[25,27],instrict:31,instructor:27,integ:25,intelig:[0,4],intellig:[0,37],inter:[12,14],interact:[0,12,29],intern:[0,9,32,37],internet:[0,1,9,31,37],intro:37,inventori:27,investig:2,ipsec:9,issu:[7,18,35,37],item:[16,21,32,34],iteself:0,java:7,join:[0,11,12,15,20,29,36],json:[21,23,25],jumphost:[23,26],just:[5,19],k8s:32,keep:[12,22,25,26],kei:25,kept:26,know:[14,26,27],known:[22,26,27],kubeconfig:32,kubectl:30,kubernet:[17,29,30,31,32,33,37],kvm:31,lab:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,18,19,20,21,22,27,29,33,35,36],last:32,latenc:[10,18,35],latest:[0,12,29],latitud:31,layer:[0,37],lear:2,learn:37,left:[27,32],legitim:[8,25],let:[25,27,32],level:12,leverag:37,like:[0,5,6,12,17,29],limit:[0,27,37],line:31,link:27,lion:21,list:[21,25,26],listen:22,load:[9,11,12,21,22,26,27,31,32,36],local:[18,31,32,35],locali:31,locat:[21,22,23,27],log:[26,27,31],login:[0,3,7,12,13,29,32,37,38],lon:[16,34],london:[18,35],longer:12,longitud:31,lot:17,low:10,machin:23,made:37,maintain:[0,12,15,20,29],make:[25,27,29,31,38],makeid:[21,23,26,32],malici:[0,4,6,37],manag:[13,20,21,22,31,32],mandatori:[0,11,12,15,20,29,36],mani:[4,5],manual:20,map:20,mass:[7,12],master:31,match:[25,27],matthieu:[0,12,15,20],mcn:12,mechan:4,menu:27,method:[22,23],micro:21,microk8:30,microservic:[0,12,29],migrat:[12,37],minim:20,minut:[21,27,31],mobil:[4,26],mode:[25,26],modern:[0,12,20,24,27,28,29],modul:[1,2,3,4,5,6,7,8,9,10,13,14,18,19,24,28,33,35],moment:[22,27],monitor:20,more:[17,21,27],most:[3,7],move:13,multi:[31,32,37],multipl:[8,21,31,37],must:[22,25,27],name:[16,21,25,31,32,34],namespac:[22,32],navig:27,need:[9,12,13,14,16,25,30,31,32,38],network:[0,1,4,10,21,31,32,37],newli:31,next:[1,7,23,32,38],nginx:22,node:31,non:[0,6,12,29],notic:[0,27],now:[9,14,16,22,23,25,27,31,32,34],number:[3,26],nutshel:[21,25],object:[6,16,17,21,22,25,31,32,34],observ:[15,18,30,31,32],ocp:[16,34],octopu:27,onc:31,one:[3,21,22],onli:[0,3,11,12,19,22,27,29,32,36,37],onprem:[11,13,31,36,37],open:[22,30,31,37],openapi:[24,25,26,27],oper:31,order:[0,8,11,12,15,20,25,26,29,30,32,36],origin:[11,21,32,36],other:[0,5,12,29,32],otherwis:31,our:[0,2,7,8,12,15,18,25,27,30,32,33,35],outcom:[20,28],outsid:32,over:21,overview:[23,31],owasp:[26,27],own:[0,26],page:[7,27,31,32],paramet:[0,5,22,37],park:21,part:[6,12,23,27],partner:37,pass:25,password:[31,32,37,38],past:32,path:[22,32],pattern:26,payload:25,pend:31,per:[21,31],person:26,phish:4,phone:26,pii:37,pipelin:37,platform:[0,3,12,27,29,32],pleas:38,pod:[15,16,17,21,30,32,34,37],point:32,polici:[6,11,20,22,36],pool:[11,21,32,36],pop:27,popul:[0,11,12,15,20,26,29,36],port:[16,21,32,34],portal:20,possibl:[10,31],post:[3,25],power:27,pre:[3,38],prefix:32,prem:[11,12,14,30,31,33,35,36],previou:[11,14,22,25,26,36],previous:[6,22],price:[18,35],privat:[0,37],proc:[0,11,12,15,20,29,36],process:[7,25,27,31],product:8,properti:25,protect:[0,2,3,6,7,8,10,21,25,26,27,37],proud:21,provid:[1,9,12,14,15,18,20,21,26,27,31,35],proxi:4,publish:[0,9,10,29,32,33,37],push:26,question:27,quickli:[11,12,36],rais:27,rate:27,reach:[12,15,31],reachabl:21,read:38,readi:26,real:[7,20],recommand:27,record:[21,32],recurs:21,reduc:20,ref:25,refer:32,refresh:32,regex:26,region:[15,16,18,34,35],regist:31,registr:31,registri:[16,34],regul:[10,13],regular:[3,17],relat:[0,12,29],relev:[13,19],remain:13,remind:[22,25],remov:25,repeat:32,report:6,repositori:37,repres:27,represet:32,reput:4,request:[3,6,20,25,26,27,37],requestbodi:25,requir:[8,10,13,26,27],requisit:38,reset:[25,37,38],resourc:[0,12,29],respect:31,respons:[15,21,22,25,26,27,35],rest:22,review:27,right:27,risk:27,roadmap:27,robust:3,rout:[12,13,15,32,34,37],rule:[0,3,25,27],run:[0,12,15,17,23,30,32,34,35],saa:20,sai:27,said:25,same:[5,10,12,16,18,21,25,28,32,34,35],satoshi:32,save:[16,21,22,25,26,31,32,34],scanner:4,schema:[20,25],score:[27,31],screen:[16,21,27,34],script:7,scroll:23,search:23,secop:[24,25,26,27,28],secret:32,section:[1,2,3,4,5,6,7,8,9,10,12,13,14,15,18,19,22,24,25,26,28,33,35,38],secur:[0,1,4,9,12,13,20,23,26,29,37],see:[17,18,26,27,31,32,35],seen:27,select:[16,21,22,25,32,34],sell:[0,12,29,32],send:[9,32],sens:25,senset:13,sensit:[26,27],sentenc:[21,22,23,26],serv:[0,12,29],server:[9,21,22,32],servic:[1,4,9,11,12,13,14,16,17,18,21,30,31,32,34,35,36,37],session:5,set:[25,26,34],sever:[21,27],shadow:[20,27],shell:30,should:22,show:[16,34],showcas:8,side:27,simpli:[12,15],simul:[0,12,29],sinc:13,site:[0,16,18,31,32,34,37],slide:22,social:26,some:[21,27,32],sorin:[0,12,15,20,29],sorinboiaf5:[16,34],sourc:[4,20,37],spam:4,spec:[26,27],specif:[3,22,25],spent:20,ssh:[23,26],ssn:[26,27],stage:[12,15,27],start:24,state:27,statu:31,step:[1,7,11,22,23,32,36],stock:[0,12,13,16,17,18,29,32,34,35],stockt:32,stolen:7,store:[0,12,29],string:25,stuf:7,sub:27,success:23,sure:[29,31,38],surpris:27,suspici:[6,20],swagger:[20,22],swaggerhub:22,system:[16,25,32,34],tab:[17,27,30,31,32,34],tabl:[27,31],tag:25,take:[5,21,25,31],target:[16,21,34],team:[13,25],technolog:21,tell:25,term:21,test:[0,1,2,3,4,5,6,7,9,10,12,13,14,15,19,20,22,24,25],than:[16,34],thei:[7,13,29],them:[3,13,27,38],thi:[0,1,2,3,4,6,8,9,11,12,13,14,15,19,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],thing:32,tho:23,those:27,threat:[4,20],through:[0,1,7,9,10,12,25,26,29,31,32,33],throught:[12,15],time:[5,18,20,25,26,32,35],tn2:[16,34],toggl:[16,34],token:31,tool:[6,7],top10:26,top:[22,27],tor:4,track:[5,7,20],trade:[0,12,29],traffic:[8,9,19,27,32,34,37],transact:[0,12,13,14,29,32],tri:7,trigger:31,troubleshoot:20,tunnel:9,turn:[0,11,12,15,20,29,36],type:[16,21,23,25,26,32,34],ubuntu:30,udf:[0,11,12,15,20,29,30,31,36,37,38],under:[16,17,32,34,37],understand:37,unknown:[22,25,27],unknwon:25,unkown:27,updat:4,url:[3,22],use:[0,7,12,18,20,21,25,26,29,31,35],used:[0,7,10,11,12,21,22,29,32,36],user:[0,6,7,8,11,12,13,14,20,29,32,36,37],usernam:[31,32],utf:23,valid:[7,20,26,27,28,37],valu:[3,5,6,16,21,25,26,31,32,34],vector:7,veri:[10,15,21,35],version:[22,26],view:[25,27,32],virtual:[16,17,22,29,32,37],visibl:[0,1,2,9,12,13,14,15,19,25,27],visil:26,visilib:25,visualis:5,vk8:[16,34],vk8sname:[16,17,34],vlan:[0,37],vnet:[0,37],volterra123:31,voltstack:31,vpc:[0,37],vulner:20,waf:[0,2,11,36,37],wait:27,want:[26,27],web:[0,4,6,21,22,30,37],webapp:21,webssh:[23,26],welcom:[12,15,20],well:32,were:[0,10,12,29],what:[25,26,27],when:[3,5,10,26],where:[0,10,12,15,16,24,28,29,34,35],which:[7,12,13,14,25,32],who:27,why:[14,25],window:4,within:[0,7,12,29,37],without:[9,22,31],won:8,word:21,work:[14,32],worker:31,workflow:12,workload:[15,18,34],workshop:[21,23,26,32],world:[21,29,33],worri:25,yaml:30,yet:31,you:[0,11,12,14,15,17,20,21,22,23,25,26,27,29,31,32,36,38],your:[20,22,24,26,27],zone:[0,37]},titles:["Class 1 - F5 XC Services","Publish the application","Web Application Firewall","Parameter Inspection","IP Intelligence","Malicious User Detection","Bot Standard","Bot Advanced","Layer 7 DDOS","RE + CE","CE Only","1 Click Config","Class 2 - Multi Cloud Networking","Migrate the application","Connecting Clouds","Class 3 - Virtual Kubernetes","Lab 1 - Workload config","Lab 2 - Observe","Deploying an application container","Routing to Virtual Kubernetes Pod","Class 4 - API Protection","Expose the modern API application on F5XC","Protect the modern API application with F5XC - static protection","Test your modern API application protection","Static API Protection","Enable API Validation","Enable API discovery","API Discovery outcomes","Dynamic API Protection","Class 5 - F5 XC K8s - UNDER CONSTRUCTION","Lab 1 - Deploy the application","Lab 2 - Deploy the Customer Edge","Lab 3 - Expose the application to the world","Deploy the application","Lab 1 - Virtual Kubernetes","Virtual Kubernetes","1 Click Config","F5 Distributed Cloud EMEA Workshop","Intro"],titleterms:{"class":[0,12,15,20,29],"default":22,"static":[22,24],K8s:29,advanc:7,api:[20,21,22,23,24,25,26,27,28],app:21,appli:22,applic:[1,2,13,18,21,22,23,30,32,33],assign:22,authent:27,balanc:25,between:22,bot:[6,7],check:23,click:[11,36],cloud:[12,14,21,37],config:[11,16,36],connect:14,construct:29,contain:18,creat:[22,26],custom:[26,31],ddo:8,deeper:27,definit:22,deploi:[18,30,31,33],detect:5,differ:22,discoveri:[26,27],distribut:[21,37],document:21,dynam:28,edg:31,element:27,emea:37,enabl:[25,26],endpoint:[26,27],expos:[21,32],f5xc:[21,22],file:22,firewal:2,gener:26,inspect:3,intellig:4,intro:38,kubernet:[15,19,34,35],lab:[16,17,30,31,32,34],layer:8,load:25,log:23,malici:5,migrat:13,modern:[21,22,23],multi:12,namespac:21,network:12,observ:17,onli:10,openapi:22,outcom:27,paramet:3,pii:[26,27],pod:19,postur:27,protect:[20,22,23,24,28],publish:1,rout:19,rule:22,run:26,script:26,secur:27,servic:0,spec:22,standard:6,test:23,traffic:26,under:29,understand:[22,27],updat:25,upload:22,user:5,valid:[22,25],virtual:[15,19,34,35],web:2,welcom:37,workload:16,workshop:37,world:32,your:[21,23,25]}})
\ No newline at end of file
+Search.setIndex({docnames:["class1/class1","class1/module1/module1","class1/module2/module2","class1/module3/module3","class1/module4/module4","class1/module5/module5","class1/module6/not-in-use-module6","class1/module7/module7","class1/module8/module8","class1/module9/module9","class1/modulea1/modulea1","class2/class2","class2/module1/module1","class2/module2/module2","class3/class3","class3/module1/lab1/lab1","class3/module1/lab2/lab2","class3/module1/module1","class3/module2/module2","class4/class4","class4/module1/lab1/lab1","class4/module1/lab2/lab2","class4/module1/lab3/lab3","class4/module1/module1","class4/module2/lab1/lab1","class4/module2/lab2/lab2","class4/module2/lab3/lab3","class4/module2/module2","class5/class5","class5/module1/lab1/lab1","class5/module1/lab2/lab2","class5/module1/lab3/lab3","class5/module1/module1","class5/module2/lab1/lab1","class5/module2/module2","class5/module3/lab1/lab1","class5/module3/lab2/lab2","class5/module3/module3","class5/module4/lab1/lab1","class5/module4/lab2/lab2","class5/module4/module4","class5/module5/lab1/lab1","class5/module5/module5","class5/module6/module6","index","intro/intro"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.todo":1,sphinx:55},filenames:["class1/class1.rst","class1/module1/module1.rst","class1/module2/module2.rst","class1/module3/module3.rst","class1/module4/module4.rst","class1/module5/module5.rst","class1/module6/not-in-use-module6.rst","class1/module7/module7.rst","class1/module8/module8.rst","class1/module9/module9.rst","class1/modulea1/modulea1.rst","class2/class2.rst","class2/module1/module1.rst","class2/module2/module2.rst","class3/class3.rst","class3/module1/lab1/lab1.rst","class3/module1/lab2/lab2.rst","class3/module1/module1.rst","class3/module2/module2.rst","class4/class4.rst","class4/module1/lab1/lab1.rst","class4/module1/lab2/lab2.rst","class4/module1/lab3/lab3.rst","class4/module1/module1.rst","class4/module2/lab1/lab1.rst","class4/module2/lab2/lab2.rst","class4/module2/lab3/lab3.rst","class4/module2/module2.rst","class5/class5.rst","class5/module1/lab1/lab1.rst","class5/module1/lab2/lab2.rst","class5/module1/lab3/lab3.rst","class5/module1/module1.rst","class5/module2/lab1/lab1.rst","class5/module2/module2.rst","class5/module3/lab1/lab1.rst","class5/module3/lab2/lab2.rst","class5/module3/module3.rst","class5/module4/lab1/lab1.rst","class5/module4/lab2/lab2.rst","class5/module4/module4.rst","class5/module5/lab1/lab1.rst","class5/module5/module5.rst","class5/module6/module6.rst","index.rst","intro/intro.rst"],objects:{},objnames:{},objtypes:{},terms:{"27xss":36,"3cscript":36,"3ealert":36,"771e948b":30,"953762f7a2a7":30,"9b50":30,"break":[24,25,26],"case":[10,36],"class":44,"default":[6,25,30],"function":[0,8,11,28,38],"import":[21,26,31],"long":20,"new":[21,25,29,30,31,38,39],"public":[1,20,43],"return":[30,38],"static":[19,44],"super":26,"switch":[15,26,33,41],"try":36,"while":[0,5,11,28],AWS:[11,12,13,17,44],And:[24,26],But:[25,26],DNS:[20,31,39],For:[0,3,11,17,20,28,29,33,34,38,41],K8S:[31,44],K8s:[15,16,29,30,31,33,38,39,40,41,44],NOT:26,OAS:[21,22],One:[3,4,7],TLS:[5,20],The:[0,3,6,8,11,12,19,21,22,24,25,28,29,30,31,39,44,45],Then:20,abl:[4,7,8,11,12,31,36],about:[20,26],access:[7,13,29,30,31,38,39,44,45],account:[44,45],achiv:29,action:26,activ:19,add:[1,15,20,25,30,31,33,35,36,39,41],addit:[9,31,39],addopt:11,address:[4,25],adject:[20,21,22,24,26],admin:30,advanc:[0,15,33,41,44],advertis:[15,33,41],after:[11,14,30],against:3,agent:6,aka:30,all:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,18,19,20,21,23,24,25,26,27,28,29,31,32,33,34,36,37,38,39,40,41,42,43,45],allow:[3,9,12,14,21,24,25,34],almost:[31,39],alon:21,alreadi:[0,40],also:[9,21,24,26],analyt:[19,22,36],anew:21,ani:[0,7,9,11,14,19,21,24,28,34,41,43,45],anim:[20,21,22,26],anomal:19,anonym:4,anticip:26,anyth:[0,11,28],aou:24,api:[0,30,31,35,36,41,44],app:[0,10,11,13,15,16,21,22,26,28,29,30,31,33,35,36,38,39,41],appear:26,appli:[15,20,23,27,29,31,33,38,39,41,43],applic:[0,6,7,8,9,11,14,15,16,19,23,24,26,27,28,30,33,34,35,36,40,41,44],approv:30,appstack:[38,39],arcadia:[0,11,15,28,29,31,33,35,36,38,39,41],arcadia_crypto:29,arcadiacrypto:[31,38,39],around:30,arrai:24,arrow:36,attach:35,attack:[2,4,7,8,19,36,37],attend:45,auth:21,autom:7,automat:[8,20,30,31,39],avail:[0,16,30,31,44],awar:24,aws_microk8:[],back:38,backend:[9,17,34],bad:4,balanc:[9,20,21,25,26,30,31,33,35,36,39,41,43],baremet:9,base:[4,5,6,12,19,20,21,24,31,39],bash:38,basic:[0,44],becaus:[22,24,26],been:[29,36,39],befor:[0,11,14,19,21,28,38,43,45],behav:6,behaviour:[1,5,7],being:7,bellow:[6,15,20,29,30,31,33,35,36,38,39,41],below:[0,21,22,24],best:[2,37],better:24,between:[11,13,24,25],big:21,bitcoin:[31,39],blindfold:31,block:[3,5,6,19,24,26,35,36],blue:20,boiangiu:[0,11,14,19,28],boom:11,bot:[0,44],both:[17,24,26,34],botnet:4,box:[15,33,41],breed:[2,37],brows:[20,31,39],bug:44,bui:[0,11,28,31,39],built:1,busi:[7,24,25],button:[0,11,14,19,28,36,43],cach:20,call:22,can:[0,5,9,10,11,14,16,20,21,24,26,28,30,31,34,37,38,44],capabl:[1,3,5,6,9,10,14,30,40],card:25,care:24,carefulli:45,cat:29,categori:4,center:11,ceonprem:[30,31,38,39],certifi:30,challang:5,chang:[6,17,19,20,31,33,39,41],characht:3,charg:[0,11,28],charset:22,chart:0,check:[3,16,20,26,29,31,33,38,39,41],choos:[15,31,33,39,41],chose:43,clasiffi:6,clasifi:6,click:[0,11,14,15,16,20,22,24,25,26,28,29,30,31,33,35,36,38,39,41,44],client:[0,5,11,14,17,28,34],close:[14,21,34],cloud:[19,21,23,25,27,30,31,33,39],cluster:[15,30,31,32,33,34,38,41],clusternam:[30,31,38,39],code:[14,34],collect:26,color:[20,21,22,26],com:[0,11,14,15,19,20,21,22,25,28,31,33,36,39,41,44],combo:30,command:[29,38],common:7,commun:[11,13,19],compon:[0,11,24,28,29,30,38],compos:20,config:[0,2,3,4,5,7,8,11,13,14,17,18,28,37,38,44],configur:[0,2,6,9,10,11,12,14,15,18,19,20,21,24,25,29,30,31,33,35,37,39,41],confirm:24,congratul:26,connect:[0,11,22,28,30,31,33,38,39,44],consol:30,construct:44,consum:25,contain:[14,15,33,34,41,44],content:[0,11,14,19,22,24,28,38,43,44],context:38,continu:[4,11,14],cooki:5,copi:21,corner:26,cover:44,creat:[12,15,20,24,31,33,35,38,39,41,43],creation:[44,45],credenti:[7,30],credit:25,crypto:[0,11,17,28,29,31,34,39],css:[0,11,28],ctrl:38,curl:[6,22],currenc:[0,11,17,28,31,34,39],current:[17,26,31,34,36,38],custom:[0,7,9,14,24,26,28,31,32,34,38,40,44],dashboard:[22,26,30,36,38],data:[0,11,12,14,15,20,25,26,28,30,31,33,35,39,41],databas:[0,4,7,11,28],datacent:[0,9],dataguard:26,date:25,ddo:[0,44],deal:[0,7,11,12,28],decid:12,decis:5,deep:19,deeper:24,defin:[3,15,21,22,25,31,33,41],deliv:[20,21],delpoi:29,demo:20,deni:[21,22,24],denial:4,deploi:[6,14,15,18,19,20,28,33,34,39,40,41,44],deploy:[16,29,30,38],describ:30,descript:24,design:21,detail:[20,26,36],detect:[0,6,25,26,44],detet:26,dev:[21,24],developp:26,devic:9,devop:[25,44],dicov:[33,41],didn:13,dierick:[0,11,14,19],differ:[5,11,12,15,24,25,33,34,41],directli:[0,9],dirti:4,disabl:[20,21,24],discov:[25,26,30,31],discoveri:[19,21,24,27,31,44],discuss:8,disoveri:21,displai:20,distribut:[14,15,16,19,21,23,25,27,33,34,38,41],docker:[15,33,41],doe:[21,24,26],domain:[20,31,39],don:26,done:[0,3,9,11,26,28,31,39,40],dot:[33,35,38,41],down:[22,25,29,30,36,38],download:38,drift:25,drop:[29,30,38],dropdown:[31,39],due:[8,10,11,17,34],dure:[0,8,11,14,28],dynam:[0,11,14,19,28,43,44],each:[31,39],easili:19,edg:[9,14,15,17,28,31,32,33,34,38,40,41,44],edit:[21,24,25,31,33,35,41],editor:38,elimin:19,els:22,email:[0,3,11,14,19,25,28,43],emea:[20,22,25,31,36,39],emeaworkshop:33,enabl:[6,8,19,20,21,27,30,31,35,37,39],endpoint:[12,19,20,21,22,24],enforc:[21,25,26,35],enforec:3,engin:[25,26],enhanc:44,ensur:[17,34],enter:[0,11,14,19,28,30,36,38,43],entri:30,environ:[12,13,14,29,30,33,34,38,41,44,45],etc:25,event:22,everi:20,evid:26,exampl:[3,24],except:24,exchang:[31,39],exist:1,exit:[15,20,30,31,33,35,38,39,41],expand:[9,11],experi:45,exploit:4,explor:[0,11,14,28,40,44],expos:[0,1,17,19,23,28,30,32,34,40,44],extend:30,extern:[0,9,11,28],f5devcentr:[20,44],f5emeassa:21,f5er:44,f5se:[20,22,25,31,36,39],f5xc:[9,10,19,23,30,44],f6ef:30,face:1,fact:8,fail:21,fall:[24,25],far:[20,21],fast:[14,28,34],featur:26,few:[26,31],field:[15,33,41],file:[19,22,23,25,26,31,38],fill:[15,20,30,31,33,35,39,41],filter:[26,36],find:[20,29],fingerprint:5,finish:[11,14,18,30],firewal:[0,6,28,35,44],first:[1,20,21,24,26,30,31,36,38],fix:20,flag:4,focus:44,follow:[0,3,11,20,28,30],forc:26,forens:19,format:[3,20],found:30,framework:20,fraud:7,french:[25,26],frequent:19,from:[7,8,19,20,24,25,26,44],frontend:[0,11,12,20,28,31,39],full:[24,26,43,44],fulli:30,gener:[19,20,26,30],get:[0,11,14,20,24,26,28,29,38],github:[20,44],given:[31,33,39,41],global:[0,1,10,20,38,44],goe:24,going:[7,10,30],good:[0,6,11,14,19,21,28,43],graph:26,green:[0,11,14,19,28,43],group:21,guid:[30,45],handl:11,hardwar:30,has:[3,5,7,25,29,31,36,37,39],have:[0,6,11,14,18,19,20,21,22,24,26,28,30,38,40,43],haven:30,header:5,health:[30,31,39],healthcheck:31,healthz:31,help:[28,31],here:[30,36,44],hide:26,high:30,highest:26,home:[29,38],hostnam:30,hour:26,how:[2,15,20,28,33,37,41],html:[0,7,11,28],http:[5,20,21,22,31,33,35,36,39,41,44],hub:[15,33,41],icon:33,identif:43,identifi:[4,8,19,25],identifir:5,imag:[0,11,15,28,33,41],impact:7,includ:[0,19,44],indentifi:5,index:24,inern:31,inform:[0,11,25,26,28],infrastractur:11,infrastructur:[30,32],initi:30,inject:7,input:[15,33,41],insight:19,inspect:[0,44],instal:9,instanc:[26,44],instead:[24,26],instrict:30,instructor:26,integ:24,intelig:[0,4],intellig:[0,44],inter:[11,13],interact:[0,11,28],intern:[0,9,31,39,44],internet:[0,1,9,30,44],intro:44,inventori:26,investig:[2,37],ipsec:9,issu:[7,17,34,44],item:[15,20,31,33,39,41],iteself:0,java:7,join:[0,11,14,19,28,43],json:[20,22,24],jumphost:[22,25,38],just:[5,18],k8s:[30,31,33,35,36],keep:[11,21,24,25],kei:24,kept:25,know:[13,25,26],known:[21,25,26],kube:38,kubeconfig:[31,38],kubectl:[29,38],kubernet:[16,28,29,30,31,32,38,39,42,44],kvm:30,lab:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,18,19,20,21,26,28,32,34,37,40,42,43],last:[31,39],latenc:[10,17,34],latest:[0,11,28],latitud:30,layer:[0,44],lear:[2,37],learn:44,left:[26,31,39],legitim:[8,24],let:[24,26,31,36,39],level:11,leverag:44,like:[0,5,6,11,16,28],limit:[0,26,44],line:30,link:26,lion:20,list:[20,24,25],listen:21,load:[9,11,20,21,25,26,30,31,33,35,36,39,41,43],local:[17,30,31,34],locali:30,locat:[20,21,22,26],log:[25,26,30],login:[0,3,7,11,12,28,31,39,44,45],lon:[15,33,41],london:[17,34],longer:11,longitud:30,look:36,lot:16,low:10,machin:22,made:44,maintain:[0,11,14,19,28],make:[24,26,28,30,45],makeid:[20,22,25,31,36,39],malici:[0,4,6,44],manag:[12,19,20,21,28,30,31,33,35,38,39,41,44],mandatori:[0,11,14,19,28,43],mani:[4,5],manual:19,map:19,mass:[7,11],master:30,match:[24,26],matthieu:[0,11,14,19],mcn:11,mechan:4,menu:26,method:[21,22,41],micro:20,microk8:29,microservic:[0,11,28],migrat:[11,44],minim:19,minut:[20,26,30],mobil:[4,25],mode:[24,25,35],modern:[0,11,19,23,26,27,28],modul:[1,2,3,4,5,6,7,8,9,10,12,13,17,18,23,27,32,34,37,40,42],moment:[21,26],monitor:19,more:[16,20,26],most:[3,7],move:12,multi:[30,31,33,39,44],multipl:[8,20,30,37,44],must:[21,24,26],name:[15,20,24,30,31,33,35,39,41],namespac:[21,31,33,35,38,39,41],nano:38,navig:26,need:[9,11,12,13,15,24,29,30,31,33,38,39,41,45],network:[0,1,4,10,20,30,31,33,39,41,44],newli:[30,38],next:[1,7,22,31,36,39,45],nginx:21,node:[30,38],non:[0,6,11,28],noth:36,notic:[0,26],now:[9,13,15,21,22,24,26,30,31,33,38,39,41],number:[3,25],nutshel:[20,24],object:[6,15,16,20,21,24,30,31,33,35,38,39,41],observ:[14,17,29,30,31,38],ocp:[15,33,41],octopu:26,onc:30,one:[3,20,21],onli:[0,3,11,18,21,26,28,31,39,43,44],onprem:[12,30,43,44],open:[21,29,30,38,44],openapi:[23,24,25,26],oper:30,order:[0,8,11,14,19,24,25,28,29,31,37,38,43],origin:[20,31,33,39,41,43],other:[0,5,11,28,31,39],otherwis:30,our:[0,2,7,8,11,14,17,24,26,29,31,32,34,37,38,39,40],out:[36,38],outcom:[19,27],outsid:31,over:20,overview:[22,30,38],owasp:[25,26],own:[0,25],page:[7,26,30,31,36,39],paramet:[0,5,21,44],park:20,part:[6,11,22,26,40],partner:44,pass:24,password:[30,31,39,44,45],past:[31,38],path:[21,31,33],pattern:25,payload:24,pen:33,pend:30,per:[20,30],person:25,phish:4,phone:25,pii:44,pipelin:44,platform:[0,3,11,26,28,31,39],pleas:45,pod:[14,15,16,20,29,31,33,41,44],point:[31,33,39,41],polici:[6,19,21,35,43],poll:41,pool:[20,31,33,39,41,43],pop:26,popul:[0,11,14,19,25,28,43],port:[15,20,31,33,39,41],portal:19,possibl:[10,30],post:[3,24],power:26,pre:[3,45],prefix:[31,33,39,41],prem:[11,13,29,30,32,34,43],previou:[13,21,24,25,36,43],previous:[6,21],price:[17,34],privat:[0,33,44],proc:[0,11,14,19,28,43],process:[7,24,26,30],product:8,properti:24,protect:[0,2,3,6,7,8,10,20,24,25,26,35,36,37,41,44],proud:20,provid:[1,9,11,13,14,17,19,20,25,26,30,34,36,40],proxi:4,publish:[0,9,10,28,31,32,39,44],push:25,question:26,quickli:[11,43],rais:26,rate:26,reach:[11,14,30],reachabl:20,read:45,readi:25,real:[7,19],recommand:26,record:[20,31,39],recurs:20,reduc:19,ref:24,refer:31,refresh:[31,36],regex:25,region:[14,15,17,33,34,41],regist:30,registr:30,registri:[15,33,41],regul:[10,12],regular:[3,16],relat:[0,11,28],relev:[12,18],remain:12,remind:[21,24],remov:24,repeat:[31,39],report:6,repositori:44,repres:26,represet:[31,39],reput:4,req_id:36,request:[3,6,19,24,25,26,36,44],requestbodi:24,requir:[8,10,12,25,26],requisit:45,res:[33,41],reset:[24,44,45],resourc:[0,11,28],respect:[30,33],respons:[14,20,21,24,25,26,34],rest:21,review:26,right:[26,33,38],risk:26,roadmap:26,robust:3,rout:[11,12,14,31,33,39,41,44],row:[33,35,38,41],rule:[0,3,24,26],run:[0,11,14,16,22,29,31,33,34,38,41],saa:19,sai:26,said:24,same:[5,10,11,15,17,20,24,27,31,33,34,38,39,41],satoshi:[31,39],save:[15,20,21,24,25,30,31,33,35,36,38,39,41],scanner:4,schema:[19,24],score:[26,30],screen:[15,20,26,33,41],script:7,scroll:22,scrool:36,search:22,secop:[23,24,25,26,27],secret:31,section:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,18,21,23,24,25,27,32,34,36,37,40,42,45],secur:[0,1,4,9,11,12,19,22,25,28,36,37,44],see:[16,17,25,26,30,31,34,36],seen:26,select:[15,20,21,24,31,33,39,41],sell:[0,11,28,31,39],send:[9,31],sens:24,senset:12,sensit:[25,26],sentenc:[20,21,22,25],serv:[0,11,28],server:[9,20,21,30,31,33,39,41],servic:[1,4,9,11,12,13,15,16,17,20,29,30,31,33,34,37,39,40,41,43,44],session:5,set:[24,25,33,38,41],sever:[20,26],shadow:[19,26],share:[33,41],shell:[29,38],should:21,show:[15,33,41],showcas:8,shown:36,side:26,simpli:[11,14],simul:[0,11,28],sinc:12,site:[0,15,17,30,31,33,39,41,44],sitess:[33,41],slide:21,social:25,some:[20,26,31,39],sorin:[0,11,14,19,28],sorinboiaf5:[15,33,41],sourc:[4,19,44],spam:4,spec:[25,26],specif:[3,21,24,36],spent:19,ssh:[22,25],ssn:[25,26],stack:30,stage:[11,14,26],start:[23,38],state:26,statu:30,step:[1,7,21,22,31,36,39,43],stock:[0,11,12,15,16,17,28,31,33,34,39,41],stockt:[31,39],stolen:7,store:[0,11,28],string:24,stuf:7,sub:26,success:22,support:36,sure:[28,30,45],surpris:26,suspici:[6,19],swagger:[19,21],swaggerhub:21,system:[15,24,30,31,33,39,41],tab:[16,26,29,30,31,33,38,39,41],tabl:[26,30],tag:24,take:[5,20,24,30],target:[15,20,33,41],team:[12,24],technolog:20,tell:24,term:20,test:[0,1,2,3,4,5,6,7,9,10,11,12,13,14,18,19,21,23,24,28,37,40],than:[15,33,41],thei:[7,12,28],them:[3,12,26,45],thi:[0,1,2,3,4,6,8,9,11,12,13,14,18,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,37,38,39,40,41,43,44],thing:[31,39],tho:22,those:26,threat:[4,19],through:[0,1,7,9,10,11,24,25,28,30,31,32,39],throught:[11,14],time:[5,17,19,24,25,31,34,39],tn2:[15,33,41],toggl:[15,33,41],token:30,tool:[6,7],top10:25,top:[21,26],tor:4,track:[5,7,19],trade:[0,11,28],traffic:[8,9,18,26,31,33,41,44],transact:[0,11,12,13,28,31,39],tri:7,trigger:30,troubleshoot:19,tunnel:9,turn:[0,11,14,19,28,43],type:[15,20,22,24,25,31,33,39,41],ubuntu:[29,38],udf:[0,11,14,19,28,29,30,38,43,44,45],under:[15,16,30,31,33,35,39,41,44],understand:44,unknown:[21,24,26],unknwon:24,unkown:26,updat:4,url:[3,21,36],use:[0,7,11,17,19,20,24,25,28,30,34],used:[0,7,10,11,20,21,28,31,36,38,43],user:[0,6,7,8,11,12,13,19,28,31,39,43,44],usernam:[30,31,39],using:36,utf:22,valid:[7,19,25,26,27,44],valu:[3,5,6,15,20,24,25,30,31,33,35,39,41],vector:7,veri:[10,14,20,34],version:[21,25],ves:[33,41],view:[24,26,31],virtual:[15,16,21,28,31,42,44],visibl:[0,1,2,9,11,12,13,14,18,24,26,28,37],visil:25,visilib:24,visualis:5,vk8:[15,33,39,41],vk8sname:[15,16,33,41],vlan:[0,44],vnet:[0,44],volterra123:30,voltstack:30,vpc:[0,44],vulner:19,waf:[0,2,28,37,43,44],wait:26,want:[25,26,36],web:[0,4,6,20,21,28,29,35,36,38,41,44],webapp:20,webssh:[22,25],welcom:[11,14,19],well:[31,39],were:[0,10,11,28],what:[24,25,26],when:[3,5,10,25,40],where:[0,10,11,14,15,23,27,28,33,34,41],which:[7,11,12,13,24,31,33,38,39,41],who:26,why:[13,24,36],window:4,within:[0,7,11,28,44],without:[9,21,30],won:8,word:20,work:[13,31,38,39],worker:30,workflow:11,workload:[14,17,33,41],workshop:[20,22,25,31,36,39],world:[20,28,32,40],worri:24,xss:36,yaml:[29,38],yet:30,you:[0,11,13,14,16,19,20,21,22,24,25,26,28,30,31,36,38,43,45],your:[19,21,23,25,26],zone:[0,44]},titles:["Class 1 - F5 XC Services","Publish the application","Web Application Firewall","Parameter Inspection","IP Intelligence","Malicious User Detection","Bot Standard","Bot Advanced","Layer 7 DDOS","RE + CE","CE Only","Class 2 - Multi Cloud Networking","Migrate the application","Connecting Clouds","Class 3 - Virtual Kubernetes","Lab 1 - Workload config","Lab 2 - Observe","Deploying an application container","Routing to Virtual Kubernetes Pod","Class 4 - API Protection","Expose the modern API application on F5XC","Protect the modern API application with F5XC - static protection","Test your modern API application protection","Static API Protection","Enable API Validation","Enable API discovery","API Discovery outcomes","Dynamic API Protection","Class 5 - F5 XC K8s - UNDER CONSTRUCTION","Lab 1 - Deploy the application","Lab 2 - Deploy the Customer Edge","Lab 3 - Expose the application to the world","Deploy the application","Lab 1 - Virtual Kubernetes","Virtual Kubernetes","Lab 1 - Waf config","Lab 2 - Testing and Visibility","Web Application Firewall","Lab 1 - Deploy the application","Lab 2 - Expose the application to the world","Managed Kubernetes","Lab 1 - Virtual Kubernetes","Customer Edge on K8s","1 Click Config","F5 Distributed Cloud EMEA Workshop","Intro"],titleterms:{"class":[0,11,14,19,28],"default":21,"static":[21,23],K8s:[28,42],advanc:7,api:[19,20,21,22,23,24,25,26,27],app:20,appli:21,applic:[1,2,12,17,20,21,22,29,31,32,37,38,39],assign:21,authent:26,balanc:24,between:21,bot:[6,7],check:22,click:43,cloud:[11,13,20,44],config:[15,35,43],connect:13,construct:28,contain:17,creat:[21,25],custom:[25,30,42],ddo:8,deeper:26,definit:21,deploi:[17,29,30,32,38],detect:5,differ:21,discoveri:[25,26],distribut:[20,44],document:20,dynam:27,edg:[30,42],element:26,emea:44,enabl:[24,25],endpoint:[25,26],expos:[20,31,39],f5xc:[20,21],file:21,firewal:[2,37],gener:25,inspect:3,intellig:4,intro:45,kubernet:[14,18,33,34,40,41],lab:[15,16,29,30,31,33,35,36,38,39,41],layer:8,load:24,log:22,malici:5,manag:40,migrat:12,modern:[20,21,22],multi:11,namespac:20,network:11,observ:16,onli:10,openapi:21,outcom:26,paramet:3,pii:[25,26],pod:18,postur:26,protect:[19,21,22,23,27],publish:1,rout:18,rule:21,run:25,script:25,secur:26,servic:0,spec:21,stack:[],standard:6,test:[22,36],traffic:25,under:28,understand:[21,26],updat:24,upload:21,user:5,valid:[21,24],virtual:[14,18,33,34,41],visibl:36,waf:35,web:[2,37],welcom:44,workload:15,workshop:44,world:[31,39],your:[20,22,24]}})
\ No newline at end of file
diff --git a/docs/_static/js/c5.js b/docs/_static/js/c5.js
new file mode 100644
index 0000000..9faa643
--- /dev/null
+++ b/docs/_static/js/c5.js
@@ -0,0 +1,399 @@
+function c5m1l2a() {
+ const config = {
+ "metadata": {
+ "name": info.ceOnPrem.clusterName,
+ "disable": false
+ },
+ "spec": {
+ "volterra_certified_hw": "kvm-voltstack-combo",
+ "master_node_configuration": [
+ {
+ "name": "master"
+ }
+ ],
+ "no_bond_devices": {},
+ "default_network_config": {},
+ "default_storage_config": {},
+ "disable_gpu": {},
+ "coordinates": {
+ "latitude": 40,
+ "longitude": 40
+ },
+ "no_k8s_cluster": {},
+ "logs_streaming_disabled": {},
+ "deny_all_usb": {},
+ "disable_vm": {},
+ "default_blocked_services": {},
+ "sw": {
+ "default_sw_version": {}
+ },
+ "os": {
+ "default_os_version": {}
+ },
+ "offline_survivability_mode": {
+ "no_offline_survivability_mode": {}
+ },
+ "default_sriov_interface": {}
+ }
+ }
+ displayJSON(config, 'Multi-Cloud Network Connect -> Site Management -> App Stack Sites -> Add App Stack Site -> JSON -> Copy paste the JSON config -> Save and Exit');
+}
+
+
+
+function c5m1l3a() {
+ const config = {
+ "metadata": {
+ "name": "arcadia-hc",
+ "disable": false
+ },
+ "spec": {
+ "http_health_check": {
+ "use_origin_server_name": {},
+ "path": "/healthz",
+ "use_http2": false,
+ "expected_status_codes": [
+ "200"
+ ]
+ },
+ "timeout": 3,
+ "interval": 15,
+ "unhealthy_threshold": 1,
+ "healthy_threshold": 3,
+ "jitter_percent": 30
+ }
+ }
+ displayJSON(config,'Multi-Cloud App Connect -> Manage -> Load Balancers -> Health Checks -> Add Health Check -> JSON -> Copy paste the JSON config -> Save and Exit');
+}
+
+function c5m1l3b({name,serviceName}) {
+ const config = {
+ "metadata": {
+ "name": name,
+ "disable": false
+ },
+ "spec": {
+ "origin_servers": [
+ {
+ "k8s_service": {
+ "service_name": serviceName,
+ "site_locator": {
+ "site": {
+ "tenant": "f5-emea-workshop-dblyrrcj",
+ "namespace": "system",
+ "name": info.ceOnPrem.clusterName,
+ "kind": "site"
+ }
+ },
+ "outside_network": {}
+ }
+ }
+ ],
+ "no_tls": {},
+ "port": 80,
+ "same_as_endpoint_port": {},
+ "healthcheck": [
+ {
+ "tenant": "f5-emea-workshop-dblyrrcj",
+ "namespace": info.namespace,
+ "name": "arcadia-hc",
+ "kind": "healthcheck"
+ }
+ ],
+ "loadbalancer_algorithm": "LB_OVERRIDE",
+ "endpoint_selection": "LOCAL_PREFERRED"
+ }
+ }
+ displayJSON(config,'Multi-Cloud App Connect -> Manage -> Load Balancers -> Origin Pools -> Add Origin Pool -> JSON -> Copy paste the JSON config -> Save and Exit');
+}
+
+function c5m1l3c() {
+
+ const config = lbConfig({
+ name: 'arcadia-ce-k8s-lb',
+ namespace: info.namespace,
+ poolName: 'arcadia-frontend',
+ domains: [`arcadia-ce-k8s-${info.makeId}.workshop.emea.f5se.com`],
+ routes:[
+ {
+ prefix: '/v1/users',
+ pool: 'arcadia-users'
+ },
+ {
+ prefix: '/v1/login',
+ pool: 'arcadia-login'
+ },
+ {
+ prefix: '/v1/stock/',
+ pool: 'arcadia-stocks'
+ },
+ {
+ prefix: '/v1/stockt',
+ pool: 'arcadia-stock-transaction'
+ }
+ ]
+ });
+
+ displayJSON( config, 'Multi-Cloud App Connect -> Manage -> Load Balancers -> HTTP Load Balancers -> Add HTTP Load Balancer -> JSON -> Copy paste the JSON config -> Save and Exit' );
+ }
+
+
+
+function c5m2l1a() {
+
+ const config = {
+ "metadata": {
+ "name": info.vk8sName,
+ "disable": false
+ },
+ "spec": {
+ "disabled": {}
+ }
+ };
+
+ displayJSON( config, 'Distributed Apps -> Applications -> Virtual K8s -> Add Virtual K8s -> JSON -> Copy paste the JSON config -> Save and Exit' );
+ }
+
+function c5m2l1b() {
+ const config = {
+ "metadata": {
+ "name": "arcadia-stocks",
+ "disable": false
+ },
+ "spec": {
+ "service": {
+ "num_replicas": 1,
+ "containers": [
+ {
+ "name": "stocks",
+ "image": {
+ "name": "registry.hub.docker.com/sorinboiaf5/arcadia-stocks:ocp",
+ "container_registry": {
+ "tenant": "f5-emea-workshop-dblyrrcj",
+ "namespace": "shared",
+ "name": "emeaworkshops",
+ "kind": "container_registry"
+ },
+ "pull_policy": "IMAGE_PULL_POLICY_DEFAULT"
+ },
+ "init_container": false,
+ "flavor": "CONTAINER_FLAVOR_TYPE_TINY"
+ }
+ ],
+ "deploy_options": {
+ "deploy_re_sites": {
+ "site": [
+ {
+ "tenant": "ves-io",
+ "namespace": "system",
+ "name": "tn2-lon",
+ "kind": "site"
+ }
+ ]
+ }
+ },
+ "advertise_options": {
+ "advertise_in_cluster": {
+ "port": {
+ "info": {
+ "port": 80,
+ "protocol": "PROTOCOL_TCP",
+ "target_port": 8080
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ displayJSON(config,'Distributed Apps -> Applications -> Virtual K8s -> Click on vk8s-....-..... -> Workloads -> Add VK8s Workload -> JSON -> Copy paste the JSON config -> Save and Exit');
+}
+
+function c5m2l1c() {
+ const config = {
+ "metadata": {
+ "name": "arcadia-stocks-vk8s",
+ "disable": false
+ },
+ "spec": {
+ "origin_servers": [
+ {
+ "k8s_service": {
+ "service_name": `arcadia-stocks.${info.namespace}`,
+ "site_locator": {
+ "virtual_site": {
+ "tenant": "ves-io",
+ "namespace": "shared",
+ "name": "ves-io-all-res",
+ "kind": "virtual_site"
+ }
+ },
+ "vk8s_networks": {}
+ }
+ }
+ ],
+ "no_tls": {},
+ "port": 80,
+ "same_as_endpoint_port": {},
+ "loadbalancer_algorithm": "LB_OVERRIDE",
+ "endpoint_selection": "LOCAL_PREFERRED"
+ }
+ }
+ displayJSON(config,'Multi-Cloud App Connect -> Manage -> Load Balancers -> Origin Pools -> Add Origin Pool -> JSON -> Copy paste the JSON config -> Save and Exit');
+ }
+
+function c5m2l1d() {
+
+ const config = lbConfig({
+ name: 'arcadia-ce-k8s-lb',
+ namespace: info.namespace,
+ poolName: 'arcadia-frontend',
+ domains: [`arcadia-ce-k8s-${info.makeId}.workshop.emea.f5se.com`],
+ routes:[
+ {
+ prefix: '/v1/users',
+ pool: 'arcadia-users'
+ },
+ {
+ prefix: '/v1/login',
+ pool: 'arcadia-login'
+ },
+ {
+ prefix: '/v1/stock/',
+ pool: 'arcadia-stocks-vk8s'
+ },
+ {
+ prefix: '/v1/stockt',
+ pool: 'arcadia-stock-transaction'
+ }
+ ]
+ });
+
+ displayJSON( config, 'Multi-Cloud App Connect -> Manage -> Load Balancers -> HTTP Load Balancer -> Click the 3 dots under the arcadia-ce-k8s-lb row -> Manage Configuration -> Edit Configuration -> -> JSON -> Copy paste the JSON config -> Save and Exit' );
+ }
+
+function c5m3l1a() {
+
+ const config = {
+ "metadata": {
+ "name": "arcadia-waf",
+ "namespace": info.namespace,
+ "labels": {},
+ "annotations": {},
+ "disable": false
+ },
+ "spec": {
+ "blocking": {},
+ "default_detection_settings": {},
+ "default_bot_setting": {},
+ "allow_all_response_codes": {},
+ "default_anonymization": {},
+ "use_default_blocking_page": {}
+ }
+ }
+ displayJSON(config,'Web App & API Protection -> App Firewall -> Add App Firewall -> JSON -> Copy paste the JSON config -> Save and Exit');
+ }
+
+
+function c5m3l1b() {
+
+ const config = lbConfig({
+ name: 'arcadia-ce-k8s-lb',
+ namespace: info.namespace,
+ poolName: 'arcadia-frontend',
+ domains: [`arcadia-ce-k8s-${info.makeId}.workshop.emea.f5se.com`],
+ wafPolicy: 'arcadia-waf',
+ routes:[
+ {
+ prefix: '/v1/users',
+ pool: 'arcadia-users'
+ },
+ {
+ prefix: '/v1/login',
+ pool: 'arcadia-login'
+ },
+ {
+ prefix: '/v1/stock/',
+ pool: 'arcadia-stocks-vk8s'
+ },
+ {
+ prefix: '/v1/stockt',
+ pool: 'arcadia-stock-transaction'
+ }
+ ]
+ });
+
+ displayJSON( config, 'Multi-Cloud App Connect -> Manage -> Load Balancers -> HTTP Load Balancer -> Click the 3 dots under the arcadia-ce-k8s-lb row -> Manage Configuration -> Edit Configuration -> -> JSON -> Copy paste the JSON config -> Save and Exit' );
+ }
+
+
+ function c5m4l2a({name,serviceName}) {
+ const config = {
+ "metadata": {
+ "name": name,
+ "disable": false
+ },
+ "spec": {
+ "origin_servers": [
+ {
+ "k8s_service": {
+ "service_name": serviceName,
+ "site_locator": {
+ "site": {
+ "tenant": "f5-emea-workshop-dblyrrcj",
+ "namespace": "system",
+ "name": info.ceOnPrem.clusterName,
+ "kind": "site"
+ }
+ },
+ "vk8s_networks": {}
+ }
+ }
+ ],
+ "no_tls": {},
+ "port": 80,
+ "same_as_endpoint_port": {},
+ "healthcheck": [
+ {
+ "tenant": "f5-emea-workshop-dblyrrcj",
+ "namespace": info.namespace,
+ "name": "arcadia-hc",
+ "kind": "healthcheck"
+ }
+ ],
+ "loadbalancer_algorithm": "LB_OVERRIDE",
+ "endpoint_selection": "LOCAL_PREFERRED"
+ }
+ }
+ displayJSON(config,'Multi-Cloud App Connect -> Manage -> Load Balancers -> Origin Pools -> Add Origin Pool -> JSON -> Copy paste the JSON config -> Save and Exit');
+}
+
+function c5m4l2b() {
+
+ const config = lbConfig({
+ name: 'arcadia-ce-appstack-lb',
+ namespace: info.namespace,
+ poolName: 'arcadia-frontend-appstack',
+ domains: [`arcadia-ce-appstack-${info.makeId}.workshop.emea.f5se.com`],
+ routes:[
+ {
+ prefix: '/v1/users',
+ pool: 'arcadia-users-appstack'
+ },
+ {
+ prefix: '/v1/login',
+ pool: 'arcadia-login-appstack'
+ },
+ {
+ prefix: '/v1/stock/',
+ pool: 'arcadia-stocks-appstack'
+ },
+ {
+ prefix: '/v1/stockt',
+ pool: 'arcadia-stock-transaction-appstack'
+ }
+ ]
+ });
+
+ displayJSON( config, 'Multi-Cloud App Connect -> Manage -> Load Balancers -> HTTP Load Balancers -> Add HTTP Load Balancer -> JSON -> Copy paste the JSON config -> Save and Exit' );
+}
\ No newline at end of file
diff --git a/docs/class4/module1/lab2/lab2.rst b/docs/class4/module1/lab2/lab2.rst
index d47b10c..467d715 100644
--- a/docs/class4/module1/lab2/lab2.rst
+++ b/docs/class4/module1/lab2/lab2.rst
@@ -4,7 +4,7 @@ Protect the modern API application with F5XC - static protection
Assign OpenAPI spec file to the LB
----------------------------------
-Copy and save the below OpenAPI Spec file. It defines the Sentence API app ``without`` COLORS.
+Copy and save the below OpenAPI Spec file (extension is .yaml). It defines the Sentence API app ``without`` COLORS.
https://app.swaggerhub.com/apis/F5EMEASSA/API-Sentence-2022/v1-auth#/
@@ -18,7 +18,7 @@ In your Namespace, upload the file into ``Web and API Protection`` > ``Manage``
Create API Definition
^^^^^^^^^^^^^^^^^^^^^
You can't assign an OAS spec file to a Load Balancer or a listener (Virtual Server in BIG-IP, Server or Location in Nginx). You must create an API Definition object.
-In your Namespace, create anew API Definition the file into ``Web and API Protection`` > ``Manage`` > ``API Management`` > ``API Definition``
+In your Namespace, create a new API Definition into ``Web and API Protection`` > ``Manage`` > ``API Management`` > ``API Definition``
.. image:: ../pictures/menu-api-def.png
:align: left
@@ -101,5 +101,6 @@ As a reminder, the endpoint ``/colors`` is not defined in the specification file
:align: center
:scale: 50%
+#. Save and Exit.
.. note:: You are good to test your first API Protection Load Balancer in F5 Distributes Cloud
\ No newline at end of file
diff --git a/docs/class4/module1/lab3/lab3.rst b/docs/class4/module1/lab3/lab3.rst
index e9c2e4e..11c5ffa 100644
--- a/docs/class4/module1/lab3/lab3.rst
+++ b/docs/class4/module1/lab3/lab3.rst
@@ -7,10 +7,15 @@ Test your modern API application protection
.. code-block:: none
curl -H "Content-Type: application/json;charset=UTF-8" http://sentence-re-$$makeId$$.workshop.emea.f5se.com/api/adjectives
+
+ .. code-block:: none
+
curl -H "Content-Type: application/json;charset=UTF-8" http://sentence-re-$$makeId$$.workshop.emea.f5se.com/api/animals
+
+ .. code-block:: none
+
curl -H "Content-Type: application/json;charset=UTF-8" http://sentence-re-$$makeId$$.workshop.emea.f5se.com/api/locations
-
.. note:: The 3 calls are successful because there are defined in the OAS file (method + endpoint)
#. Now, run the below call
diff --git a/docs/class4/module2/lab1/lab1.rst b/docs/class4/module2/lab1/lab1.rst
index 9687418..4c4c191 100644
--- a/docs/class4/module2/lab1/lab1.rst
+++ b/docs/class4/module2/lab1/lab1.rst
@@ -1,7 +1,7 @@
Enable API Validation
=====================
-In the previous section, we enabled AOU Protection. API Protection is based on rules (allow, deny), but API Validation goes deeper into the validation.
+In the previous section, we enabled API Protection. API Protection is based on rules (allow, deny), but API Validation goes deeper into the validation.
API Validation validates the requests and the responses, but also the content (JSON payload) based on the OpenAPI Specifications.
@@ -65,6 +65,11 @@ Having said, let's enable API Validation, and disable API Protection. It does no
Update your API Load Balancer
-----------------------------
+.. warning:: This section can't be done if you are not part of an official F5 Workshop training. It requires a specific license (API Protection), and this license is provisionned only during official F5 events.
+ You can bypass this section if you are not part of an official F5 training, and continue to the API Discovery lab.
+
+.. note:: Please don't open support ticket to increase this quota. This is done by F5ers in charge of the trainings (Matthieu Dierick, Sorin )
+
* Edit your Load Balancer and remove all API Protection rules (click on Reset Configuration and confirm)
* Enable API Validation for ``All Endpoints``
@@ -72,7 +77,7 @@ Update your API Load Balancer
:align: left
:scale: 50%
-* Click on ``View Configuration`` to customize the settings``
+* Click on ``View Configuration`` to customize the settings
* Enable the ``Validation`` for ``Request`` and ``Response`` and select all the properties
* Keep the setting ``Fall Through Mode`` to ``Allow``
@@ -80,9 +85,9 @@ Update your API Load Balancer
:align: left
:scale: 50%
-.. note:: The ``Fall Through Mode`` to ``Allow`` tells the system to let unknwon endpoints pass. In a nutshell, any unknown API endpoint will not be blocked and it is the API Discovery process which will take care of it.
+.. note:: The ``Fall Through Mode`` to ``Allow`` tells the system to let unknwon endpoints to pass. In a nutshell, any unknown API endpoint will not be blocked and it is the API Discovery process which will take care of it.
-.. warning:: Why not to block unknown endpoint ? Because this endpoint can be legitimate from Dev Teams, but SecOps are not aware. And it is better to have a visilibity on what is unknown instead of breaking the business
+.. warning:: Why not to block unknown endpoint ? Because this endpoint can be legitimate from Dev Teams, but SecOps are not aware "yet". And it is better to have a visilibity on what is unknown instead of breaking the business
* SAVE your Load Balancer
diff --git a/docs/class4/module2/lab2/lab2.rst b/docs/class4/module2/lab2/lab2.rst
index 5407389..45d1ef3 100644
--- a/docs/class4/module2/lab2/lab2.rst
+++ b/docs/class4/module2/lab2/lab2.rst
@@ -58,9 +58,10 @@ Run the traffic generator script
It is time to run a traffic generator script to populate the logs and the AI/ML engines.
* SSH or WEBSSH to the Jumphost
-* Run this script
+* Run this script into /home/ubuntu/api-protection-lab folder
.. code-block:: none
- sh api-all.sh sentence-re-$$makeId$$.workshop.emea.f5se.com
+ cd api-protection-lab
+ bash api-all.sh sentence-re-$$makeId$$.workshop.emea.f5se.com
diff --git a/docs/class4/module2/lab3/lab3.rst b/docs/class4/module2/lab3/lab3.rst
index 63cd604..eb02e19 100644
--- a/docs/class4/module2/lab3/lab3.rst
+++ b/docs/class4/module2/lab3/lab3.rst
@@ -23,12 +23,12 @@ Understand the API Discovery elements
On the top left corner, there are 3 important elements:
-* Inventory : Endpoints known by the OpenAPI Spec file
+* **Inventory** : Endpoints known by the OpenAPI Spec file
* In our lab, there are 3 endpoints know (adjectives, animals, locations)
-* Discovered : What the F5 XC platform is seeing at the moment (Known and Unknown endpoints)
-* Shadow : What is ``Discovered`` but **NOT PART** of the ``Inventory``
+* **Discovered** : What the F5 XC platform is seeing at the moment (Known and Unknown endpoints)
+* **Shadow** : What is ``Discovered`` but **NOT PART** of the ``Inventory``
You can filter on ``Shadow`` only for instance. You can see the ``/colors`` as a Shadow API.
@@ -36,11 +36,11 @@ Go deeper into the discovery
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* Click on the ``/colors`` shadow API endpoint. A pop-up will appear on the right side of the screen.
-* You can see on the op right corner, 2 actions
+* You can see on the top right corner, 2 actions
- * API Protection rule : if you want to block this endpoint. Let's say SecOps have this power to block unknown endpoints.
+ * **API Protection rule** : if you want to block this endpoint. Let's say SecOps have this power to block unknown endpoints.
- * Rate Limiting : if you want to Rate Limit this endpoint because SecOps don't have the full power and don't want to break the app.
+ * **Rate Limiting** : if you want to Rate Limit this endpoint because SecOps don't have the full power and don't want to break the app.
* Click on the ``Discovered`` tab and navigate into the sub-menus. You will see all the details discovered by the platform. We will go in details in some of them in few minutes.
diff --git a/docs/class5/module1/lab2/lab2.rst b/docs/class5/module1/lab2/lab2.rst
index 8c16be7..f33fc5e 100644
--- a/docs/class5/module1/lab2/lab2.rst
+++ b/docs/class5/module1/lab2/lab2.rst
@@ -7,7 +7,33 @@ The **Customer Edge** aka. **CE** will extend the F5 Cloud infrastructure into t
* Automatically discover Kubernetes services
* Expose the onprem applications through F5 XC without exposing the app localy to the internet
-1. First we need to register the **CE**.
+
+1. Make sure you have logged in the F5 XC console. If you haven't yet follow the instrictions found :doc:`here <../../../intro/steps/intro3>` and then return to the guide.
+
+ Go to **Multi-Cloud Network Connect** -> **Site Management** -> **App Stack Sites** -> **Add App Stack Site** -> Fill the bellow data -> **Save and Exit**
+
+ .. table::
+ :widths: auto
+
+ ========================================== ========================================================================================
+ Object Value
+ ========================================== ========================================================================================
+ **Name** $$ceOnPrem.clusterName$$
+
+ **Generic Server Certified Hardware** Enable Site Local API Access
+
+ **Master Nodes** Under **Name** enter the value **master**
+
+ **Latitude** 40
+
+ **Longitude** 40
+ ========================================== ========================================================================================
+
+ .. raw:: html
+
+
+
+2. First we need to register the **CE**.
Go to the **UDF deployment** click **Components** on the **F5XC CE ( On prem )** component click **Access**. A drop down will open, click **Site UI**, a new tab will open.
@@ -27,7 +53,7 @@ The **Customer Edge** aka. **CE** will extend the F5 Cloud infrastructure into t
-2. On the newly opened page click **Dashboard** and **Configure Now**, fill in the data as per the bellow table and finish by clicking **Save configuration**
+3. On the newly opened page click **Dashboard** and **Configure Now**, fill in the data as per the bellow table and finish by clicking **Save configuration**
.. table::
:widths: auto
@@ -46,11 +72,13 @@ The **Customer Edge** aka. **CE** will extend the F5 Cloud infrastructure into t
**Latitude** 40
**Longitude** 40
- ========================================== ========================================================================================
-3. Make sure you have logged in the F5 XC console. If you haven't yet follow the instrictions found :doc:`here <../../../intro/steps/intro3>` and then return to the guide.
+ **Site Local K8s API access** Enable Site Local K8s API access
+
+ **Enable Site Local K8s API access** system/k8s
+ ========================================== ========================================================================================
- We will need to approve on the F5 XC console the newly deployed **CE**.
+4. We will need to approve on the F5 XC console the newly deployed **CE**.
Go to **Multi-Cloud Network Connect** -> **Site Management** -> **Registrations** .
@@ -60,7 +88,7 @@ The **Customer Edge** aka. **CE** will extend the F5 Cloud infrastructure into t
This will approve and trigger the initialization of the **CE**.
-4. The initialization process takes around 15 - 20 minutes.
+5. The initialization process takes around 15 - 20 minutes.
We can observe the status by going to **Multi-Cloud Network Connect** -> **Overview** -> **Sites**.
diff --git a/docs/class5/module1/lab3/lab3.rst b/docs/class5/module1/lab3/lab3.rst
index 06839dd..74a4598 100644
--- a/docs/class5/module1/lab3/lab3.rst
+++ b/docs/class5/module1/lab3/lab3.rst
@@ -52,64 +52,77 @@ The **Customer Edge** is up an running in order to expose the inernal K8s applic
**HTTP HealthCheck** Click **Edit Configuration** -> Change the **Path** to **/healthz** -> Apply
========================================== ====================================================================================================================
+ .. raw:: html
+
+
+
4. Next we need to create the **Origin Pools** which will point to our services.
Go to **Multi-Cloud App Connect** -> **Manage** -> **Load Balancers** -> **Origin Pools**
We will need to create 5 **Origin Pools** each represeting the services that need to be accessed by users, create the **Origin Pools** based on the bellow data.
- a) Click **Add Origin Pool**
+a) Click **Add Origin Pool**
- .. table::
- :widths: auto
+ .. table::
+ :widths: auto
+
+ ========================================== ====================================================================================================================
+ Object Value
+ ========================================== ====================================================================================================================
+ **Name** arcadia-frontend
+
+ **Port** 80
- ========================================== ====================================================================================================================
- Object Value
- ========================================== ====================================================================================================================
- **Name** arcadia-frontend
-
- **Port** 80
+ **Health Checks** Click **Add Item** -> In the new dropdown choose **$$namespace$$/arcadia-hc**
+ ========================================== ====================================================================================================================
- **Health Checks** Click **Add Item** -> In the new dropdown choose **$$namespace$$/arcadia-hc**
- ========================================== ====================================================================================================================
+b) Under **Origin Servers** click **Add Item** -> Fill the bellow data -> **Apply** -> **Save and Exit**
- b) Under **Origin Servers** click **Add Item** -> Fill the bellow data -> **Apply** -> **Save and Exit**
+ .. table::
+ :widths: auto
- .. table::
- :widths: auto
+ ========================================== ====================================================================================================================
+ Object Value
+ ========================================== ====================================================================================================================
+ **Select Type of Origin Server** K8s Service Name of Origin Server on given Sites
- ========================================== ====================================================================================================================
- Object Value
- ========================================== ====================================================================================================================
- **Select Type of Origin Server** K8s Service Name of Origin Server on given Sites
+ **Service Name** arcadia-frontend.arcadiacrypto
- **Service Name** arcadia-frontend.arcadiacrypto
+ **Site** system/$$ceOnPrem.clusterName$$
- **Site** system/$$ceOnPrem.clusterName$$
+ **Select Network on the site** Outside Network
+ ========================================== ====================================================================================================================
- **Select Network on the site** Outside Network
- ========================================== ====================================================================================================================
-
- c) Repeat steps **a** and **b** for the other application services, the only thing that needs to be changed is the **Name** and **Service Name**.
+c) Repeat steps **a** and **b** for the other application services, the only thing that needs to be changed is the **Name** and **Service Name**.
- The additional services are:
+ The additional services are:
- .. table::
- :widths: auto
+ .. table::
+ :widths: auto
+
+ ========================================== ====================================================================================================================
+ Name Service Name
+ ========================================== ====================================================================================================================
+ arcadia-login arcadia-login.arcadiacrypto
+
+ arcadia-stock-transaction arcadia-stock-transaction.arcadiacrypto
- ========================================== ====================================================================================================================
- Name Service Name
- ========================================== ====================================================================================================================
- arcadia-login arcadia-login.arcadiacrypto
+ arcadia-stocks arcadia-stocks.arcadiacrypto
+
+ arcadia-users arcadia-users.arcadiacrypto
+ ========================================== ====================================================================================================================
- arcadia-stock-transaction arcadia-stock-transaction.arcadiacrypto
+ .. raw:: html
- arcadia-stocks arcadia-stocks.arcadiacrypto
+
+
+
+
+
- arcadia-users arcadia-users.arcadiacrypto
- ========================================== ====================================================================================================================
5. The last step will be to configure the **HTTP Load Balancer** that will enable to expose through the F5 XC platform the Kubernetes internal application.
@@ -151,7 +164,13 @@ The **Customer Edge** is up an running in order to expose the inernal K8s applic
c) We are almost done, click **Apply** -> **Save and Exit**
-6. All is done our application is published. Let's check that all is working well.
+
+ .. raw:: html
+
+
+
+
+ 6. All is done our application is published. Let's check that all is working well.
Browse to `arcadia-ce-k8s-$$makeId$$.workshop.emea.f5se.com` and login to the app.
diff --git a/docs/class5/module2/lab1/lab1.rst b/docs/class5/module2/lab1/lab1.rst
index 1e97e70..04f8291 100644
--- a/docs/class5/module2/lab1/lab1.rst
+++ b/docs/class5/module2/lab1/lab1.rst
@@ -6,6 +6,10 @@ For this lab, we will create the Virtual Kubernetes environment, add the Stocks
1. We will now create the **Virtual Kubernetes** environment.
Go to **Distributed Apps** -> **Applications** -> **Virtual K8s** -> **Add Virtual K8s** -> Set the **Name** to **$$vk8sName$$** -> **Save and Exit**
+
+ .. raw:: html
+
+
2. Create the workload that will define the configuration on how and where to deploy the **Stocks** POD
@@ -33,9 +37,13 @@ For this lab, we will create the Virtual Kubernetes environment, add the Stocks
**Name** stocks
**Image Name** registry.hub.docker.com/sorinboiaf5/arcadia-stocks:ocp
+
+ **Select Container Registry** Private Registry
+
+ **Private Registry** shared/emeaworkshops
================================ ========================================================================================
- c) In the same screen -> Under **Where to Deploy the workload** choose **Regional Edge Sites** -> **Configure** -> Fill the bellow data -> **Apply **
+ c) In the same screen -> Under **Where to Deploy the workload** choose **Regional Edge Sites** -> **Configure** -> Fill the bellow data -> **Apply**
.. table::
:widths: auto
@@ -61,6 +69,55 @@ For this lab, we will create the Virtual Kubernetes environment, add the Stocks
**Different than Port** 8080
================================ ========================================================================================
+ .. raw:: html
+
+
3. Check that the **Stocks** pod is up and running by clicking the **Pods** tabs in the Virtual Kubernetes
+4. We need to create an Origin Pool which will dicover the POD
+
+ a) **Multi-Cloud App Connect** -> **Load Balancers** -> **Origin Pool** -> **Add Origin Pool** -> Fill the bellow data
+
+ .. table::
+ :widths: auto
+
+ ============================== ========================================================================================
+ Object Value
+ ============================== ========================================================================================
+ **Name** arcadia-stocks-vk8s
+
+ **Port** 80
+ ============================== ========================================================================================
+
+ b) In the same screen -> **Origin Servers** -> **Add Item** -> **Fill the bellow data** -> **Apply** -> **Save and exit**
+
+ .. table::
+ :widths: auto
+
+ ================================ ========================================================================================
+ Object Value
+ ================================ ========================================================================================
+ **Select Type of Origin Server** K8s Service Name of Origin Server on given Sitess
+
+ **Service Name** arcadia-stocks.$$namespace$$
+
+ **Site or Virtual Site** Virtual Site
+
+ **Virtual Site** ves-io-shared/ves-io-all-res
+
+ **Select Network on the site** vK8s Networks on Site
+ ================================ ========================================================================================
+
+ .. raw:: html
+
+
+
+5. We need to change the routing to of the **Stocks** service to point to the Pod Origin Pool
+
+ Go to **Multi-Cloud App Connect** -> **Load Balancers** -> **HTTP Load Balancer** -> Click the 3 dots under the **arcadia-ce-k8s-lb** row -> **Manage Configuration** -> **Edit Configuration** -> Under **Routes** and click **Edit Configuration** -> Click the 3 dots to the right under the Path Prefix **/v1/stock/** row -> **Edit** -> Click the **Pen Icon** respective to the Origin Pool row -> Under **Routes** and click **Edit Configuration** -> Change the **Origin Pool** to **$$namespace$$/arcadia-stocks-vk8s** -> **Apply** -> **Apply** -> **Apply** -> **Save and Exit**
+
+
+ .. raw:: html
+
+
\ No newline at end of file
diff --git a/docs/class5/modulea2/.DS_Store b/docs/class5/module3/.DS_Store
similarity index 100%
rename from docs/class5/modulea2/.DS_Store
rename to docs/class5/module3/.DS_Store
diff --git a/docs/class5/module3/lab1/lab1.rst b/docs/class5/module3/lab1/lab1.rst
new file mode 100644
index 0000000..70bafc1
--- /dev/null
+++ b/docs/class5/module3/lab1/lab1.rst
@@ -0,0 +1,46 @@
+Lab 1 - Waf config
+##################
+
+
+1. Create the **Web Application Firewall policy**
+
+ Go to **Web App & API Protection** -> **App Firewall** -> **Add App Firewall** -> Fill the bellow data -> **Save and Exit**
+
+ .. table::
+ :widths: auto
+
+ ============================== ========================================================================================
+ Object Value
+ ============================== ========================================================================================
+ **Name** arcadia-waf
+
+ **Enforcement Mode** blocking
+ ============================== ========================================================================================
+
+
+ .. raw:: html
+
+
+
+
+2. Attach the **Web Application Firewall policy** to the **HTTP Load Balancer**
+
+ Go to **Web App & API Protection** -> **Load Balancers** -> **HTTP Load Balancer** -> Click the 3 dots under the **arcadia-ce-k8s-lb** row -> **Manage Configuration** -> **Edit Configuration** -> Fill the bellow data -> **Save and Exit**
+
+
+ .. table::
+ :widths: auto
+
+ ================================== ========================================================================================
+ Object Value
+ ================================== ========================================================================================
+ **Web Application Firewall (WAF)** Enable
+
+ **Enable** $$namespace$$/arcadia-waf
+ ================================== ========================================================================================
+
+ .. raw:: html
+
+
+
+
\ No newline at end of file
diff --git a/docs/class5/module3/lab2/lab2.rst b/docs/class5/module3/lab2/lab2.rst
new file mode 100644
index 0000000..8552bea
--- /dev/null
+++ b/docs/class5/module3/lab2/lab2.rst
@@ -0,0 +1,22 @@
+Lab 2 - Testing and Visibility
+##############################
+
+1. First lets try and attack out application with an **XSS attack** using the bellow URL. Th attack will be blocked and a **support ID** will be provided. Save the **support ID** as it will be used in the next step.
+
+
+ :ext_link:`http://arcadia-ce-k8s-$$makeId$$.workshop.emea.f5se.com/?a=%3Cscript%3Ealert(%27xss%27)`
+
+
+
+2. Let's look at the blocked attack
+
+ Go to **Web App & API Protection** -> **Dashboards** -> **Security Dashboard** -> Scrool down to the **Load Balancers** section and click on **arcadia-ce-k8s-lb** -> **Security Analytics**
+
+ Here you will me able to see all blocked attacks.
+
+3. If you want to filter a specific request that has been blocked
+
+a) On the current page -> **Add Filter** -> Enter **req_id** -> **In** -> Enter the previous **support ID** -> In case nothing is shown click on the **Refresh** button
+
+ Click the down arrow and you will see all the request details and why it has been blocked
+
diff --git a/docs/class5/module3/module3.rst b/docs/class5/module3/module3.rst
new file mode 100644
index 0000000..8c54920
--- /dev/null
+++ b/docs/class5/module3/module3.rst
@@ -0,0 +1,23 @@
+########################
+Web Application Firewall
+########################
+
+F5 XC has multiple security services that can be enabled in order to protect the application.
+
+In this section, we will protect our application with best of breed F5 XC Web Application Firewall.
+
+We will lear how to configure and investigate attacks.
+
+
+.. image:: ./pictures/Slide1.png
+ :align: center
+
+
+**Module 3 - All sections**
+
+.. toctree::
+ :maxdepth: 1
+ :glob:
+
+ lab*/lab*
+
diff --git a/docs/class5/module3/pictures/.DS_Store b/docs/class5/module3/pictures/.DS_Store
new file mode 100644
index 0000000..752fd67
Binary files /dev/null and b/docs/class5/module3/pictures/.DS_Store differ
diff --git a/docs/class5/module3/pictures/Slide1.png b/docs/class5/module3/pictures/Slide1.png
new file mode 100644
index 0000000..5d62b18
Binary files /dev/null and b/docs/class5/module3/pictures/Slide1.png differ
diff --git a/docs/class5/module3/pictures/class1.gif b/docs/class5/module3/pictures/class1.gif
new file mode 100644
index 0000000..c3f0207
Binary files /dev/null and b/docs/class5/module3/pictures/class1.gif differ
diff --git a/docs/class5/module3/pictures/map.jpeg b/docs/class5/module3/pictures/map.jpeg
new file mode 100644
index 0000000..74838eb
Binary files /dev/null and b/docs/class5/module3/pictures/map.jpeg differ
diff --git a/docs/class5/module4/.DS_Store b/docs/class5/module4/.DS_Store
new file mode 100644
index 0000000..e087f9b
Binary files /dev/null and b/docs/class5/module4/.DS_Store differ
diff --git a/docs/class5/module4/lab1/lab1.rst b/docs/class5/module4/lab1/lab1.rst
new file mode 100644
index 0000000..e1cb26a
--- /dev/null
+++ b/docs/class5/module4/lab1/lab1.rst
@@ -0,0 +1,50 @@
+Lab 1 - Deploy the application
+##############################
+
+For this lab, we will deploy the same application that we have used before right on the **Customer Edge** which will function as a **Kubernetes Cluster**.
+
+1. Go to **Distributed Apps** -> **Managed K8s** -> **Overview** -> **$$ceOnPrem.clusterName$$**.
+
+ You can observe all the Kubernetes objects and dashboard
+
+2. Now we need to start deploying out app. First we need to download the kubeconfig file to access our kubernetes environment.
+
+ a) **Distributed Apps** -> **Managed K8s** -> **Overview** -> Click on the **3 dots** to the right on the **$$ceOnPrem.clusterName$$** row -> **Download Global Kubeconfig**
+
+ b) Go to the **UDF deployment** click **Components** on the **Jumphost** component click **Access**. A drop down will open, click **WEB SHELL**, a new tab will shell access will open.
+
+ c) We will now need to enter the kubeconfig file contents
+
+ Run the bellow commands
+
+ .. code-block:: none
+
+ su ubuntu
+ nano /home/ubuntu/.kube/config
+
+ Paste the **kubeconfig** file contents.
+
+ Click **CTRL + o** -> **Enter** to save the file
+
+ Click **CTRL + x** -> **Enter** to exit the file editor and get back to the bash
+
+
+ d) Check that the connectivity to the Kubernetes cluster is working by running the bellow command
+
+ .. code-block:: none
+
+ kubectl get nodes
+
+3. Run the bellow commands in order to deploy the app
+
+ .. code-block:: none
+
+ kubectl create ns arcadiacrypto
+ kubectl config set-context --current --namespace=arcadiacrypto
+ kubectl apply -f /home/ubuntu/lab/udf/appstack/arcadia.yaml
+
+4. Return to the Kubernetes Dashboard and observe the newly created objects.
+
+ Go to **Distributed Apps** -> **Managed K8s** -> **Overview** -> **$$ceOnPrem.clusterName$$**
+
+
\ No newline at end of file
diff --git a/docs/class5/module4/lab2/lab2.rst b/docs/class5/module4/lab2/lab2.rst
new file mode 100644
index 0000000..079553b
--- /dev/null
+++ b/docs/class5/module4/lab2/lab2.rst
@@ -0,0 +1,136 @@
+Lab 2 - Expose the application to the world
+###########################################
+
+The application has been deployed now we need to publish it to the world.
+
+
+1. Next we need to create the **Origin Pools** which will point to our new app services.
+
+ Go to **Multi-Cloud App Connect** -> **Manage** -> **Load Balancers** -> **Origin Pools**
+
+ We will need to create 5 **Origin Pools** each represeting the services that need to be accessed by users, create the **Origin Pools** based on the bellow data.
+
+a) Click **Add Origin Pool**
+
+ .. table::
+ :widths: auto
+
+ ========================================== ====================================================================================================================
+ Object Value
+ ========================================== ====================================================================================================================
+ **Name** arcadia-frontend-appstack
+
+ **Port** 80
+
+ **Health Checks** Click **Add Item** -> In the new dropdown choose **$$namespace$$/arcadia-hc**
+ ========================================== ====================================================================================================================
+
+b) Under **Origin Servers** click **Add Item** -> Fill the bellow data -> **Apply** -> **Save and Exit**
+
+ .. table::
+ :widths: auto
+
+ ========================================== ====================================================================================================================
+ Object Value
+ ========================================== ====================================================================================================================
+ **Select Type of Origin Server** K8s Service Name of Origin Server on given Sites
+
+ **Service Name** arcadia-frontend.arcadiacrypto
+
+ **Site** system/$$ceOnPrem.clusterName$$
+
+ **Select Network on the site** vK8s Networks on Site
+ ========================================== ====================================================================================================================
+
+
+c) Repeat steps **a** and **b** for the other application services, the only thing that needs to be changed is the **Name** and **Service Name**.
+
+
+ The additional services are:
+
+ .. table::
+ :widths: auto
+
+ ========================================== ====================================================================================================================
+ Name Service Name
+ ========================================== ====================================================================================================================
+ arcadia-login-appstack arcadia-login.arcadiacrypto
+
+ arcadia-stock-transaction-appstack arcadia-stock-transaction.arcadiacrypto
+
+ arcadia-stocks-appstack arcadia-stocks.arcadiacrypto
+
+ arcadia-users-appstack arcadia-users.arcadiacrypto
+ ========================================== ====================================================================================================================
+
+ .. raw:: html
+
+
+
+
+
+
+
+
+5. The last step will be to configure the **HTTP Load Balancer** that will enable to expose through the F5 XC platform the Kubernetes internal application.
+
+ a) Go to **Multi-Cloud App Connect** -> **Manage** -> **Load Balancers** -> **HTTP Load Balancers** -> **Add HTTP Load Balancer** -> Fill the bellow data
+
+ .. table::
+ :widths: auto
+
+ ==================================== =================================================================================================
+ Object Value
+ ==================================== =================================================================================================
+ **Name** arcadia-ce-appstack-lb
+
+ **Domains** arcadia-ce-appstack-$$makeId$$.workshop.emea.f5se.com
+
+ **Load Balancer Type** HTTP
+
+ **Automatically Manage DNS Records** Enable
+
+ **Origin Pools** Click **Add Item**, for the **Origin Pool** select $$namespace$$/arcadia-frontend-appstack -> Apply
+ ==================================== =================================================================================================
+
+ b) On the same page go to **Routes** and click **Configure** -> Repeat this 4 times for each service ( **Add Item** -> Fill in the bellow -> **Apply** )
+
+ .. table::
+ :widths: auto
+
+ ================================ ========================================================================================================
+ **Prefix** **Origin Pools**
+ ================================ ========================================================================================================
+ /v1/login $$namespace$$/arcadia-login-appstack
+
+ /v1/stockt $$namespace$$/arcadia-stock-transaction-appstack
+
+ /v1/stock $$namespace$$/arcadia-stocks-appstack
+
+ /v1/user $$namespace$$/arcadia-users-appstack
+ ================================ ========================================================================================================
+
+ c) We are almost done, click **Apply** -> **Save and Exit**
+
+
+ .. raw:: html
+
+
+
+
+ 6. All is done our application is published. Let's check that all is working well.
+
+ Browse to `arcadia-ce-appstack-$$makeId$$.workshop.emea.f5se.com` and login to the app.
+
+ .. table::
+ :widths: auto
+
+ ========================================== ========================================================================================
+ Object Value
+ ========================================== ========================================================================================
+ **Username** satoshi@bitcoin.com
+
+ **Password** bitcoin
+ ========================================== ========================================================================================
+
+ Click on the **Exchange** tab on the left and go buy or sell some crypto currency.
\ No newline at end of file
diff --git a/docs/class5/module4/module4.rst b/docs/class5/module4/module4.rst
new file mode 100644
index 0000000..b4fd9a9
--- /dev/null
+++ b/docs/class5/module4/module4.rst
@@ -0,0 +1,21 @@
+##################
+Managed Kubernetes
+##################
+
+In this part we will explore the capabilities of F5 XC to provide **Managed Kubernetes Services**.
+
+We have already deployed our test K8s and that was done when we have deployed the **Customer Edge**
+
+
+.. image:: ./pictures/Slide1.png
+ :align: center
+
+
+**Module 4 - All sections**
+
+.. toctree::
+ :maxdepth: 1
+ :glob:
+
+ lab*/lab*
+
diff --git a/docs/class5/module4/pictures/.DS_Store b/docs/class5/module4/pictures/.DS_Store
new file mode 100644
index 0000000..752fd67
Binary files /dev/null and b/docs/class5/module4/pictures/.DS_Store differ
diff --git a/docs/class5/module4/pictures/Slide1.png b/docs/class5/module4/pictures/Slide1.png
new file mode 100644
index 0000000..5d62b18
Binary files /dev/null and b/docs/class5/module4/pictures/Slide1.png differ
diff --git a/docs/class5/module4/pictures/class1.gif b/docs/class5/module4/pictures/class1.gif
new file mode 100644
index 0000000..c3f0207
Binary files /dev/null and b/docs/class5/module4/pictures/class1.gif differ
diff --git a/docs/class5/module4/pictures/map.jpeg b/docs/class5/module4/pictures/map.jpeg
new file mode 100644
index 0000000..74838eb
Binary files /dev/null and b/docs/class5/module4/pictures/map.jpeg differ
diff --git a/docs/class5/module5/.DS_Store b/docs/class5/module5/.DS_Store
new file mode 100644
index 0000000..e087f9b
Binary files /dev/null and b/docs/class5/module5/.DS_Store differ
diff --git a/docs/class5/module5/lab1/lab1.rst b/docs/class5/module5/lab1/lab1.rst
new file mode 100644
index 0000000..9cb88be
--- /dev/null
+++ b/docs/class5/module5/lab1/lab1.rst
@@ -0,0 +1,117 @@
+Lab 1 - Virtual Kubernetes
+##########################
+
+For this lab, we will create the Virtual Kubernetes environment, add the Stocks service and route the traffic to the container deployed in the F5 XC environment.
+
+1. We will now create the **Virtual Kubernetes** environment.
+
+ Go to **Distributed Apps** -> **Applications** -> **Virtual K8s** -> **Add Virtual K8s** -> Set the **Name** to **$$vk8sName$$** -> **Save and Exit**
+
+2. Create the workload that will define the configuration on how and where to deploy the **Stocks** POD
+
+ a) Click on **$$vk8sName$$** -> **Workloads** -> **Add VK8s Workload**
+
+ .. table::
+ :widths: auto
+
+ ============================== ========================================================================================
+ Object Value
+ ============================== ========================================================================================
+ **Name** arcadia-stocks
+
+ **Select Type of Workload** Service
+ ============================== ========================================================================================
+
+ b) In the same screen -> **Configure** -> Under **Containers** click **Add Item** -> Fill the bellow data -> **Apply**
+
+ .. table::
+ :widths: auto
+
+ ================================ ========================================================================================
+ Object Value
+ ================================ ========================================================================================
+ **Name** stocks
+
+ **Image Name** registry.hub.docker.com/sorinboiaf5/arcadia-stocks:ocp
+ ================================ ========================================================================================
+
+ c) In the same screen -> Under **Where to Deploy the workload** choose **Regional Edge Sites** -> **Configure** -> Fill the bellow data -> **Apply **
+
+ .. table::
+ :widths: auto
+
+ ================================ ========================================================================================
+ Object Value
+ ================================ ========================================================================================
+ **Input box** system/tn2-lon
+ ================================ ========================================================================================
+
+ d) In the same screen -> Under **Advertise In Cluster** click **Configure** -> Toggle the **Show Advanced Fields** switch -> Fill the bellow data -> **Apply** -> **Apply** -> **Save and Exit**
+
+ .. table::
+ :widths: auto
+
+ ================================ ========================================================================================
+ Object Value
+ ================================ ========================================================================================
+ **Port** 80
+
+ **Target Port** Different than Port
+
+ **Different than Port** 8080
+ ================================ ========================================================================================
+
+
+3. Check that the **Stocks** pod is up and running by clicking the **Pods** tabs in the Virtual Kubernetes
+
+4. We need to create an Origin Pool which will dicover the POD
+
+ a) **Web App & API Protection** -> **Load Balancers** -> **Origin Pool** -> **Add Origin Pool** -> Fill the bellow data
+
+ .. table::
+ :widths: auto
+
+ ============================== ========================================================================================
+ Object Value
+ ============================== ========================================================================================
+ **Name** arcadia-stocks-vk8s
+
+ **Port** 80
+ ============================== ========================================================================================
+
+ b) In the same screen -> **Origin Servers** -> **Add Item** -> **Fill the bellow data** -> **Apply** -> **Save and exit**
+
+ .. table::
+ :widths: auto
+
+ ================================ ========================================================================================
+ Object Value
+ ================================ ========================================================================================
+ **Select Type of Origin Server** K8s Service Name of Origin Server on given Sitess
+
+ **Service Name** arcadia-stocks.$$namespace$$
+
+ **Site or Virtual Site** Virtual Site
+
+ **Virtual Site** ves-io-shared/ves-io-all-res
+
+ **Select Network on the site** vK8s Networks on Site
+ ================================ ========================================================================================
+
+5. We need to change the routing to of the **Stocks** service to point to the Pod Origin Pool
+
+ Go to **Web App & API Protection** -> **Load Balancers** -> **HTTP Load Balancer** -> Click the 3 dots under the **arcadia-re-lb** row -> Manage Configuration -> Edit Configuration -> Under **Routes** and click **Edit Configuration** -> **Add Item** -> Fill the bellow data -> Apply -> Apply -> Save and Exit
+
+
+ .. table::
+ :widths: auto
+
+ ================================ ========================================================================================================
+ Object Value
+ ================================ ========================================================================================================
+ **HTTP Method** Any
+
+ **Prefix** /v1/stock/
+
+ **Origin Pools** Click **Add Item** and set the **Origin Poll** to $$namespace$$/arcadia-stocks-vk8s -> Apply
+ ================================ ========================================================================================================
\ No newline at end of file
diff --git a/docs/class5/module5/module5.rst b/docs/class5/module5/module5.rst
new file mode 100644
index 0000000..3a23f3f
--- /dev/null
+++ b/docs/class5/module5/module5.rst
@@ -0,0 +1,19 @@
+########################
+Customer Edge on K8s
+########################
+
+Customer Edge on K8s
+
+
+.. image:: ./pictures/Slide1.png
+ :align: center
+
+
+**Module 5 - All sections**
+
+.. toctree::
+ :maxdepth: 1
+ :glob:
+
+ lab*/lab*
+
diff --git a/docs/class5/module5/pictures/.DS_Store b/docs/class5/module5/pictures/.DS_Store
new file mode 100644
index 0000000..752fd67
Binary files /dev/null and b/docs/class5/module5/pictures/.DS_Store differ
diff --git a/docs/class5/module5/pictures/Slide1.png b/docs/class5/module5/pictures/Slide1.png
new file mode 100644
index 0000000..5d62b18
Binary files /dev/null and b/docs/class5/module5/pictures/Slide1.png differ
diff --git a/docs/class5/module5/pictures/class1.gif b/docs/class5/module5/pictures/class1.gif
new file mode 100644
index 0000000..c3f0207
Binary files /dev/null and b/docs/class5/module5/pictures/class1.gif differ
diff --git a/docs/class5/module5/pictures/map.jpeg b/docs/class5/module5/pictures/map.jpeg
new file mode 100644
index 0000000..74838eb
Binary files /dev/null and b/docs/class5/module5/pictures/map.jpeg differ
diff --git a/docs/class5/module6/.DS_Store b/docs/class5/module6/.DS_Store
new file mode 100644
index 0000000..e087f9b
Binary files /dev/null and b/docs/class5/module6/.DS_Store differ
diff --git a/docs/class5/module6/module6.rst b/docs/class5/module6/module6.rst
new file mode 100644
index 0000000..b6df7d1
--- /dev/null
+++ b/docs/class5/module6/module6.rst
@@ -0,0 +1,70 @@
+1 Click Config
+##############
+
+
+.. note:: Before you procced to the lab it is mandatory to enter the email that you have joined the UDF with in order to populate any dynamic content. If all good the button will turn green.
+
+.. raw:: html
+
+
+
+
+This is is only used quickly to do a full config of all the previous steps.
+
+1. Create the public and onprem origin pools
+
+ .. raw:: html
+
+
+
+ .. raw:: html
+
+
+
+
+2. Create Waf policy
+
+ .. raw:: html
+
+
+
+3. Create service policies
+
+ .. raw:: html
+
+
+
+
+ .. raw:: html
+
+
+
+4. Create the User Identification Policy
+
+ .. raw:: html
+
+
+
+5. Create the RE load balancer and apply all the config, chose **a** or **b**
+
+a) RE LB with on prem origin pool
+
+ .. raw:: html
+
+
+
+b) RE LB with public origin pool
+
+ .. raw:: html
+
+
+
+6. Create the CE load balancer and apply all the config
+
+ .. raw:: html
+
+
+
+
+
+
diff --git a/docs/class5/modulea2/modulea2.rst b/docs/class5/modulea2/modulea2.rst
deleted file mode 100644
index 35eca04..0000000
--- a/docs/class5/modulea2/modulea2.rst
+++ /dev/null
@@ -1,162 +0,0 @@
-1 Click Config
-##############
-
-
-.. note:: Before you procced to the lab it is mandatory to enter the email that you have joined the UDF with in order to populate any dynamic content. If all good the button will turn green.
-
-.. raw:: html
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-This is is only used quickly to do a full config of all the previous steps.
-
-1. Create the public and onprem origin pools
-
- .. raw:: html
-
-
-
- .. raw:: html
-
-
-
-
-2. Create Waf policy
-
- .. raw:: html
-
-
-
-3. Create service policies
-
- .. raw:: html
-
-
-
-
- .. raw:: html
-
-
-
-4. Create the User Identification Policy
-
- .. raw:: html
-
-
-
-5. Create the RE load balancer and apply all the config, chose **a** or **b**
-
-a) RE LB with on prem origin pool
-
- .. raw:: html
-
-
-
-b) RE LB with public origin pool
-
- .. raw:: html
-
-
-
-6. Create the CE load balancer and apply all the config
-
- .. raw:: html
-
-
-
-
-
-
diff --git a/docs/conf.py b/docs/conf.py
index 1b00f36..973a207 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -200,7 +200,8 @@
'js/data.js',
'js/c1.js',
'js/c2.js',
- 'js/c3.js'
+ 'js/c3.js',
+ 'js/c5.js',
]# -- Options for HTMLHelp output ------------------------------------------
cleanname = re.sub('\W+','',classname)