The Kubernetes Book Nigel Poulton Thisbookisforsaleathttp://leanpub.com/thekubernetesbook Thisversionwaspublishedon2023-01-31 ThisisaLeanpubbook.LeanpubempowersauthorsandpublisherswiththeLean Publishingprocess.LeanPublishingistheactofpublishinganin-progressebookusing lightweighttoolsandmanyiterationstogetreaderfeedback,pivotuntilyouhavethe rightbookandbuildtractiononceyoudo. ©2017-2023NigelPoulton Tweet This Book! PleasehelpNigelPoultonbyspreadingthewordaboutthisbookonTwitter! Thesuggestedtweetforthisbookis: IjustboughtTheKubernetesBookfrom@nigelpoultonandcan’twaittogetintothis! Thesuggestedhashtagforthisbookis#kubernetes. Findoutwhatotherpeoplearesayingaboutthebookbyclickingonthislinktosearch forthishashtagonTwitter: #kubernetes Educationisaboutinspiringandcreatingopportunities.Ihopethisbook,andmyvideotraining courses,inspireyouandcreatelotsofopportunities! Ahugethankstomyfamilyforputtingupwithme.I’mageekwhothinkshe’ssoftwarerunning onmidrangebiologicalhardware.Iknowit’snoteasylivingwithme. ThankstoeveryonewhowatchesmyPluralsightandACloudGurutrainingvideos.Ilove connectingwithyouandappreciateallthefeedbackI’vehadovertheyears.Thisfeedbackiswhat inspiredmetowritethisbook.Ithinkyou’llloveit,andIhopeithelpsdriveyourcareerforward. @nigelpoulton Contents 0:Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 EditionsPaperbacks,hardbacks,eBooks,audio,andtranslations . . . . . . . . . . 1 ThesampleappandGitHubrepo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Responsiblelanguage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Feedbackandcontactingme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1:Kubernetesprimer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Kubernetesbackground . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Kubernetesastheoperatingsystemofthecloud . . . . . . . . . . . . . . . . . . . . 9 Chaptersummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2:Kubernetesprinciplesofoperation. . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Kubernetesfrom40Kfeet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Controlplaneandworkernodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 KubernetesDNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 PackagingappsforKubernetes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Thedeclarativemodelanddesiredstate . . . . . . . . . . . . . . . . . . . . . . . . . 21 Pods. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Deployments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Serviceobjectsandstablenetworking . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Chaptersummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3:GettingKubernetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 CreatingaKubernetesclusteronyourlaptop . . . . . . . . . . . . . . . . . . . . . . 29 CreatingahostedKubernetesclusterinthecloud . . . . . . . . . . . . . . . . . . . 34 Installandworkwithkubectl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Chaptersummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4:WorkingwithPods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Podtheory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Multi-containerPods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Hands-onwithPods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 Clean-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 CONTENTS ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 5:VirtualclusterswithNamespaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 UsecasesforNamespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 InspectingNamespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 CreatingandmanagingNamespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 DeployingtoNamespaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Clean-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 6:KubernetesDeployments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Deploymenttheory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 CreateaDeployment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Performscalingoperations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Performarollingupdate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Performarollback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Clean-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 Chaptersummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 7:KubernetesServices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 ServiceTheory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Hands-onwithServices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102 Clean-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .112 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .112 8:Ingress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113 SettingtheSceneforIngress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113 Ingressarchitecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114 Hands-onwithIngress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116 Clean-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .125 Chaptersummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126 9:Servicediscoverydeepdive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127 Quickbackground . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127 Serviceregistration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .128 Servicediscovery . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132 ServicediscoveryandNamespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . .135 Troubleshootingservicediscovery . . . . . . . . . . . . . . . . . . . . . . . . . . . .141 Chaptersummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143 10:Kubernetesstorage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .144 Thebigpicture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .144 StorageProviders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146 TheContainerStorageInterface(CSI) . . . . . . . . . . . . . . . . . . . . . . . . . .147 CONTENTS TheKubernetespersistentvolumesubsystem . . . . . . . . . . . . . . . . . . . . . .147 DynamicprovisioningwithStorageClasses . . . . . . . . . . . . . . . . . . . . . . .149 Hands-on . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153 Clean-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159 11:ConfigMapsandSecrets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160 Thebigpicture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160 ConfigMaptheory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .162 Hands-onwithConfigMaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165 Hands-onwithSecrets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176 Clean-up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180 12:StatefulSets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181 ThetheoryofStatefulSets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181 Hands-onwithStatefulSets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .186 ChapterSummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198 13:APIsecurityandRBAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .199 APIsecuritybigpicture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .199 Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .200 Authorization(RBAC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202 Admissioncontrol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210 Chaptersummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .211 14:TheKubernetesAPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212 KubernetesAPIbigpicture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212 TheAPIserver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215 TheAPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .220 Chaptersummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .232 15:ThreatmodelingKubernetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234 Threatmodeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234 Spoofing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234 Tampering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .237 Repudiation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239 InformationDisclosure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241 DenialofService . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242 Elevationofprivilege . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .245 Chaptersummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257 16:Real-worldKubernetessecurity . . . . . . . . . . . . . . . . . . . . . . . . . . . . .258 CI/CDpipeline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .258 CONTENTS Infrastructureandnetworking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264 Identityandaccessmanagement(IAM) . . . . . . . . . . . . . . . . . . . . . . . . . .270 Auditingandsecuritymonitoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . .271 Realworldexample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .274 Chaptersummary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .274 Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .275 Outro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .282 Aboutthefrontcover . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .282 Awordonthebook’sdiagrams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .282 Connectwithme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .283 Feedbackandreviews . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .283 0: Preface Kubernetesisdevelopingfast.Withthisinmind,I’mfullycommittedtoupdatingthis bookeveryyear.AndwhenIsay“update”,Imeanrealupdates–everywordandevery conceptwillbereviewed,andeveryexamplewillbetestedandupdatedagainstthelatest versionsofKubernetes.I’m100%committedtomakingthisthebestKubernetesbookin theworld. Asanauthor,I’dlovetowriteabookandnevertouchitagainfor5years.Unfortunately, thatdoesn’tworkforKubernetes–atwo-year-oldbookonKubernetescouldbe dangerouslyoutofdate. Editions Paperbacks, hardbacks, eBooks, audio, and translations Thefollowingeditionsofthebookareavailable,orsoonwillbe: • Paperback:English,SimplifiedChinese,Spanish,Portuguese • Hardback:English • eBook:English,Russian,Spanish,Portuguese eBookcopiesareavailableonKindleandfromLeanPub. Previouseditionshadalarge-printpaperbackedition.However,Amazondoesnot haveausefulwayoflistingandsearchingforlarge-printbooksandthebookwas almostimpossibletofind.IfthischangesinthefutureIwillmakealarge-printedition available. Finally,there’sacoupleofcollector’seditions: • Klingonpaperback • Borghardback TheKlingoneditionhasaspecialfront-coverwritteninKlingontext.TheBorgedition hasaspecialfront-coverwritteninBorgtext.Therestofthebooksisexactlythesame astheEnglishlanguageedition. 0:Preface 2 The sample app and GitHub repo There’saGitHubrepowithalltheYAMLandcodeusedthroughoutthebook. Youcancloneitwiththefollowingcommand.You’llneedgitinstalled.Thiswillcreate anewfolderinyourcurrentworkingdirectorycalledTheK8sBookwithallthefilesyou needtofollowtheexamples. $ git clone https://github.com/nigelpoulton/TheK8sBook.git Don’tstressifyou’veneverusedgit.Thebookwalksyouthrougheverythingyouneed todo. Responsible language ThebookfollowsguidelinesissuedbytheInclusiveNamingInitiative(inclusivenam- ing.org)whichpromotesresponsiblelanguageandtriestoavoidharmfulterms.Asan example,theKubernetesprojecthasreplacedtheterm“master”with“controlplane node”.Thisbookdoesthesameandattemptstofollowallpublishedguidance. Feedback and contacting me Ifyoulikethebook,I’dconsideryoufamilyifyouleaveareviewandafewstarson Amazon. Youcanalsoreachmeonanyofthefollowing: • Twitter:twitter.com/nigelpoulton • LinkedIn:linkedin.com/in/nigelpoulton • Mastodon:@[email protected] • Web:nigelpoulton.com • YouTube:youtube.com/nigelpoulton Ifyouhaveacontentsuggestionorapotentialfix,[email protected]. I’lldomybesttorespond. Let’sgetstarted!