Hallittu Kubernetes
Frostmoln Hallittu Kubernetes ajaa klustereita Frostmoln-laskennalla. Sinä hallitset työkuormiasi; alusta luo ja hallitsee ohjaustason, työsolmut, API-kuormantasaajan ja kubeconfigisi.
Luo klusteri
Mene portaalissa kohtaan Kubernetes → Clusters → Create ja valitse:
- Name.
- Kubernetes-versio — tällä hetkellä 1.34 tai 1.35 (suositeltu versio on merkitty); pudotusvalikko on totuuden lähde.
- Ohjaustason taso:
- Standard (
development) — yksi erillinen ohjaustason solmu. - Production (
production) — kolme erillistä ohjaustason solmua (HA-kvorumi), tuotannon SLA.
- Standard (
- VPC + aliverkko, jossa klusteri ajetaan (alue peritään VPC:stä).
- Alustava solmupooli — nimi, solmun koko (
k8s.gp1.medium/k8s.gp1.large/k8s.gp1.xlarge/k8s.gp1.2xlarge) ja solmujen määrä.
Luontihetkellä ei ole sisääntuloasetusta. Se, miten oma liikenteesi tavoittaa työkuormasi, ratkaistaan klusterin sisällä jälkikäteen — katso Työkuormien tavoittaminen.
Klusterilisäosat ovat valinnaisia komponentteja, jotka alusta asentaa puolestasi; luettelo löytyy portaalista, komennolla fm kubernetes addon list ja tietolähteestä frostmoln_kubernetes_addons. Valitse ne klusteria luotaessa tai lisää lisäosa jälkikäteen klusteriin, joka on käynnissä — portaalissa klusterin Lisäosat-välilehdeltä, komennolla fm kubernetes cluster add-addons tai lähettämällä koko haluttu lisäosajoukko API:iin tai Terraformiin. Jälkikäteen lisätty lisäosa käynnistää oman synkronointinsa ja tulee voimaan tyypillisesti muutamassa minuutissa; jos sitä ei voida käynnistää, se tulee voimaan vasta alustan seuraavassa synkronoinnissa, enintään tunnin kuluessa. Voit myös poistaa lisäosan — samoista paikoista, komennolla fm kubernetes cluster remove-addons tai API:ssa poistamalla avaimen addons-joukosta ja nimeämällä sen remove-kentässä (Terraform tekee molemmat puolestasi, kun poistat avaimen). Poisto poistaa lisäosan asentamat objektit, joten sinun on nimettävä poistettava lisäosa sen sijaan, että se pääteltäisiin lyhyemmästä joukosta; portaali pyytää vahvistusta. Mitä ei koskaan poisteta puolestasi: lisäosan nimiavaruus, sen luomat CustomResourceDefinition-, StorageClass- tai CSIDriver-objektit ja kaikki, minkä olet itse siihen nimiavaruuteen luonut — mukaan lukien salaisuudet. Ennen kunkin ominaisuuden julkaisua luodut klusterit eivät voi ottaa vastaan uutta lisäosaa tai eivät voi poistaa sellaista, ja ne kertovat siitä kun yrität. Klusterissa, jonka ohjaustaso on External Secrets Operator -lisäosaa vanhempi, lisäys hyväksytään, mutta sitä ei koskaan asenneta — luo silloin uusi klusteri. Katso opas, joka kertoo myös, mitä tehdä ennen kuin poistat sen. Workload Identity -lisäosasta kerrotaan sivulla Työkuormaidentiteetti.
Lisäosat vaativat lähtevän liikenteen solmuistasi
Lisäosan ylävirran konttivedokset haetaan julkisesta rekisteristä, kun sen podit käynnistyvät — niitä ei ole esiladattu solmuihisi, toisin kuin kaikkea mitä klusteri itse tarvitsee. Työsolmusi tarvitsevat siis lähtevän HTTPS-yhteyden kyseiseen rekisteriin: ExternalDNS hakee ohjainvedoksensa osoitteesta registry.k8s.io, External Secrets Operator hakee vedoksensa osoitteesta ghcr.io, ja Workload Identity hakee vedoksensa osoitteesta registry.sweden.frostmoln.cloud (ja vaihtaa tunnisteita osoitteen api.frostmoln.cloud kanssa).
Jos suodatat lähtevää liikennettä isäntänimen perusteella, salli tunnetut isännät: ghcr.io yhdessä osoitteen pkg-containers.githubusercontent.com kanssa, jonne se ohjaa vedosten lataukset, registry.sweden.frostmoln.cloud sekä registry.k8s.io. Pelkkä registry.k8s.io ei kuitenkaan riitä — haku ohjataan pilvipohjaisiin taustavarastoihin muissa verkkotunnuksissa, jotka valitaan lähtevän osoitteesi perusteella. Löydät tällaisen isännän lähtevän liikenteen lokistasi: katso, mihin isäntään epäonnistunut haku ohjattiin, ja salli myös se. Viimeisenä keinona voit sallia lähtevän HTTPS-liikenteen solmuryhmästä; se on laajempi kuin tarpeen, joten suosi tiettyjä isäntiä aina, kun voit luetella ne.
Alusta ei tarkista tätä eikä voi tarkistaa: saavutettavuus kuuluu omaan VPC:hesi sillä hetkellä, kun haku tapahtuu, voit muuttaa reittejäsi ja turvaryhmiäsi milloin tahansa, ja jokainen uusi solmu hakee vedoksen uudelleen. Sellaisen lisäosan valinta, johon solmusi eivät yllä, onnistuu siis — ja sen jälkeen sen podit jäävät tilaan ImagePullBackOff:
kubectl -n external-dns get pods
# NAME READY STATUS RESTARTS AGE
# external-dns-7d4b8c9f5d-x2klm 0/2 ImagePullBackOff 0 4mAvaa lähtevä liikenne työsolmuistasi, niin haku yritetään automaattisesti uudelleen muutaman minuutin kuluessa — podia ei tarvitse poistaa. ExternalDNS:n toinen edellytys on edelleen voimassa: se tarvitsee tunnuksen, joko Workload Identity -sidonnan (suositeltu, lisäosaversiosta v0.22.0-4 alkaen) tai frostmoln-dns-API-avainsalaisuuden. Kunnes sillä on sellainen, sen webhook-kontti käynnistyy uudelleen virheellä no credential (CrashLoopBackOff). Versioissa ennen v0.22.0-4 se odottaa tilassa CreateContainerConfigError. Katso ExternalDNS.
Kun lisäosa ei ole käynnissä, sen hallitsemia DNS-tietueita ei julkaista eikä siivota — poistetun Servicen tietue voi jäädä eloon ja osoittaa edelleen osoitteeseen, joka voidaan myöhemmin antaa uudelleen.
Klusteriisi itseensä tämä ei koskaan vaikuta. Kaikki, mitä klusterin käynnistämiseen ja Ready-tilassa pitämiseen tarvitaan, on esiladattu solmuvedokseen ja toimii täysin ilman lähtevää liikennettä.
Komentorivi & Terraform
Hallittua Kubernetesta hallitaan portaalista, fm-komentorivityökalulla tai Terraformilla. Komentorivityökalussa on täysi fm kubernetes -komentoryhmä — klusterit, solmupoolit sekä solmukokojen / tasojen / versioiden / lisäosien luettelot; katso fm kubernetes -referenssi. Terraformissa käytät resurssia frostmoln_kubernetes_cluster (alustavan solmupoolin ja klusterilisäosien kanssa), frostmoln_kubernetes_node_pool lisäpooleille sekä katalogitietolähteitä frostmoln_kubernetes_versions / _tiers / _flavors / _addons — katso Terraform-referenssi. Kun sinulla on kubeconfig, käytät kubectlia, Helmiä ja tavanomaisia Kubernetes-työkalujasi klusteria vasten kuten yleensä.
Lisäosien versiot
Jokainen lisäosa, jolla on versioita, on kiinnitetty johonkin niistä. Kiinnitetty versio on se, jota pyysit; käytössä oleva versio on se, jonka alusta viimeksi vahvisti asentaneensa. Ne ovat kaksi erillistä tietoa, jotka näytetään aina yhdessä: kun siirrät kiinnityksen, käytössä oleva versio jää jälkeen, kunnes muutoksen oma synkronointi ottaa sen käyttöön, tyypillisesti muutamassa minuutissa; jos synkronointia ei voida käynnistää, muutos otetaan käyttöön vasta alustan seuraavassa synkronoinnissa, enintään tunnin kuluessa. Muutos, jota ei saada käyttöön, ei siirrä kiinnitystä takaisin — alusta yrittää uudelleen, ja palaat aiempaan versioon siirtämällä kiinnityksen itse takaisin.
Portaali — klusterin Lisäosat-välilehdellä on Lisäosien versiot -kortti, jossa näkyy kunkin lisäosan kiinnitetty versio, käytössä oleva versio ja tila. Vaihda versio siirtää kiinnityksen.
Komentorivi — listaa kiinnitettävät versiot, näytä kiinnitetty ja käytössä oleva versio rinnakkain ja siirrä kiinnitys:
bashfm kubernetes addon versions <addon> fm kubernetes cluster addons <cluster-id> fm kubernetes cluster pin-addons <cluster-id> --version <addon>=<version>add-addonshyväksyy saman toistettavan--version-valitsimen, ja niin hyväksyy myösremove-addonslisäosalle, jonka säilytät;cluster createhyväksyy sen muodossa--addon-version.Terraform —
frostmoln_kubernetes_cluster-resurssinaddon_versions-kartta kiinnittää nimeämänsä lisäosat (jokaisen avaimen on oltava myösaddons-joukossa), ja muutos tehdään paikallaan. Tietolähdefrostmoln_kubernetes_addon_versionslistaa kiinnitettävät versiot;frostmoln_kubernetes_cluster_addonslukee kunkin lisäosan kiinnitetyn ja käytössä olevan version.
Versiot listataan alustan järjestyksessä, ja suositeltu versio on merkitty. Järjestys ei ole paremmuusjärjestys: älä koskaan lajittele versiomerkkijonoja äläkä oleta viimeistä uusimmaksi — kopioi versio täsmälleen sellaisena kuin se listataan. Vanhentumassa oleva versio voidaan yhä kiinnittää, mutta se on poistumassa. Elinkaaren lopussa olevaa versiota ei listata, eikä sitä voi valita uudeksi kiinnitykseksi; klusteri, joka on jo kiinnitetty sellaiseen, jatkaa sen ajamista, ja kiinnitys näyttää tilan, jotta tiedät siirtää sen. Lisäosa, jonka valitset nimeämättä versiota — klusteria luotaessa tai myöhemmin — saa suositellun versionsa. Jos haluat kiinnittää toisen version klusteria luotaessa, valitse se portaalissa lisäosan Versio-valikosta, joka näkyy, kun lisäosalla on jokin muu kuin suositeltu versio, ja jonka oletuksena on Suositeltu; anna komentorivillä komennolle fm kubernetes cluster create valitsin --addon-version <addon>=<version> kerran kutakin lisäosaa kohden; tai aseta Terraformissa addon_versions yhdessä nimenomaisesti annetun addons-joukon kanssa, jolloin se lähetetään klusterin luontipyynnön mukana. Jokaisen kiinnittämäsi lisäosan on oltava sellainen, jonka klusteri saa. Kiinnitys mille tahansa muulle lisäosalle tai versiolle, jota ei listata, hylätään, eikä klusteria luoda.
Hae kubeconfigisi
Kun klusteri on käynnissä, käytä klusterin tietosivulla Download Kubeconfigia. Osoita kubectl siihen ja olet sisällä:
export KUBECONFIG=~/Downloads/my-cluster-kubeconfig.yaml
kubectl get nodesAPI-päätepiste on yksityinen VPC:llesi
Kubernetes API -palvelin (portti 6443) kuuntelee osoitetta oman VPC:si sisällä ja hyväksyy yhteyksiä vain sieltä. Sille ei ole julkista osoitetta eikä asetusta, joka antaisi sellaisen.
kubectl tarvitsee siis reitin VPC:hen. Niitä on kaksi:
- Anna CLI:n tunneloida puolestasi.
fm kubernetes cluster kubeconfig <cluster-id> --exec --file ./kubeconfigkirjoittaa kubeconfigin, joka avaa oman tunnelinsa tarvittaessa, joten yksi pääte riittää eikä levylle kirjoiteta asiakasavainta — tunnistetieto haetaan kutsukohtaisesti. Se vaatii API-avaimen, jolla on sekäkubernetes:readettäsessions:write; pelkkäkubernetes:*kattaa lukemisen muttei istuntoa. Istunto kestää enintään 60 minuuttia ja suljetaan 10 minuutin käyttämättömyyden jälkeen, joten pitkään ajava tai hiljainenkubectl-virta katkeaa siihen; laajennus avaa seuraavalle komennolle uuden tunnelin. Alustan uudelleenkäynnistys tai verkkokatko voi päättää istunnon aiemmin samalla tavalla. Käytä sen sijaan--proxy-valitsinta, jos ajat tunnelin mieluummin itse komennollafm kubernetes cluster proxytoisessa päätteessä — silloin asiakasavain kirjoitetaan kubeconfig-tiedostoon. - Aja
kubectlVPC:n sisällä, tyypillisesti omistamallasi instanssilla.
Osa klustereista ei pysty palvelemaan näitä tunneleita. Jos fm vastaa, ettei tämä klusteri pysty siihen, uudelleenyritys ei auta — käytä VPC:n sisäistä reittiä ja ota yhteyttä tukeen.
Ilman kumpaakaan yllä olevien komentojen ajaminen suoraan kannettavalta tai VPC:n ulkopuolisesta CI-ajurista aikakatkaistaan: kubeconfig on oikein, verkkoreitti ei. Sama koskee Helmiä sekä Terraformin kubernetes- ja helm-providereita.
Klusterin tunnistetiedot generoidaan ja alusta säilyttää niitä turvallisesti — solmujen alustus ei koskaan välitä salaisuuksia takaisin.
Klusterin päätepiste ei ole liikenteellesi. Se on kubectlille, Helmille ja CI:llesi. Oma liikenteesi menee sellaisen kuormantasaajan osoitteeseen, jota pyydät klusterin sisältä — katso Työkuormien tavoittaminen. Sovelluksen DNS-tietueen osoittaminen klusterin päätepisteeseen on juuri se virhe, jonka tämä ero on olemassa estämään.
Työkuormien tavoittaminen
Klusteri ei tule mukanaan kuormantasaajaa omalle liikenteellesi. Saat sen Kubernetesin vakiotavalla: luo Service, jonka type: LoadBalancer, ja alusta luo kyseiselle palvelulle kuormantasaajan, pitää podisi kytkettynä sen jäseniksi ja kirjoittaa osoitteen takaisin palveluun.
apiVersion: v1
kind: Service
metadata:
name: web
spec:
type: LoadBalancer
selector:
app: web
ports:
- name: https
port: 443
targetPort: 8443kubectl get service web --watch
# NAME TYPE EXTERNAL-IP PORT(S)
# web LoadBalancer 10.20.4.17 443:31274/TCPOsoite, joka ilmestyy kohtaan EXTERNAL-IP, on se, johon osoitat DNS:si.
Ingress-ohjain toimii samalla tavalla. Asenna haluamasi (Traefik, ingress-nginx, …) ja julkaise se type: LoadBalancer -palveluna NodePort-palvelun sijaan. Kiinnitettäviä varattuja solmuportteja ei enää ole: Kubernetes valitsee solmuportit itse, eikä sinun tarvitse tietää niitä. TLS päättyy klusterissasi omilla varmenteillasi — alusta ei koskaan käsittele avaimiasi. Mitä muuta voit asentaa ja mitä arvoja jotkin kaaviot tarvitsevat, kerrotaan kohdassa Mitä voit tehdä klusterissasi.
Muutamia hyödyllisiä ominaisuuksia:
- Jokainen tällainen palvelu saa oman kuormantasaajansa. Se näkyy tavallisessa kuormantasaajaluettelossasi ja laskutetaan kuormantasaajana kuten mikä tahansa muu.
- Hallitse sitä Kubernetesista, ei kuormantasaaja-API:n kautta. Palvelu on se, jota vasten kuormantasaaja täsmäytetään: muuta sen portteja tai valitsinta, niin kuormantasaaja seuraa mukana.
- Kun poistat palvelun, sen kuormantasaaja poistuu mukana. Poista palvelusi ennen kuin poistat klusterin, jotta mitään ei jää jälkeen.
- Kubernetes API -päätepiste on erillinen eikä ole yksi näistä — sen luo alusta, ei mikään palvelusi.
Julkinen vai sisäinen
Oletuksena palvelun kuormantasaaja saa sisäisen osoitteen klusterin omasta aliverkosta — tavoitettavissa VPC:n sisältä, ei internetistä. Altista se julkisesti annotoimalla palvelu:
- Julkinen IP poolista —
frostmoln.se/lb-scheme: public. Alusta varaa julkisen IP:n, liittää sen kuormantasaajaan, julkaisee sen palvelunEXTERNAL-IP-osoitteena ja vapauttaa sen, kun poistat palvelun. - Tuo oma julkinen IP — aseta myös
frostmoln.se/lb-public-ip-id: <public-ip-id>. Alusta käyttää omistamaasi julkista IP:tä (se ei saa olla jo käytössä) ja säilyttää sen, kun poistat palvelun. Arvo on julkisen IP:n id (UUID), ei sen osoite — löydät sen julkisten IP:iden listasta tai CLI:llä.
apiVersion: v1
kind: Service
metadata:
name: web
annotations:
frostmoln.se/lb-scheme: public
spec:
type: LoadBalancer
selector:
app: web
ports:
- name: https
port: 443
targetPort: 8443
# Kuka voi tavoittaa sen — katso alla oleva varoitus.
loadBalancerSourceRanges:
- 203.0.113.0/24Käyttääksesi jo hallussasi olevaa julkista IP:tä, lisää sen id skeeman viereen:
metadata:
annotations:
frostmoln.se/lb-scheme: public
frostmoln.se/lb-public-ip-id: 3f2504e0-4f89-41d3-9a0c-0305e82c3301Julkinen palvelu ilman lähdealueita on avoin koko internetille
loadBalancerSourceRanges on julkisen kuormantasaajan pääsynhallinta: datapolku säilyttää asiakkaan lähdeosoitteen, joten se on todellista suodatusta, ei vihje. Jätä se pois, ja palvelu on tavoitettavissa osoitteesta 0.0.0.0/0 — sama oletus kuin muissakin pilvissä. Aseta se CIDR-lohkoihin, joiden pitäisi tavoittaa palvelu.
Mitä alusta kirjaa Serviceesi
Kun alusta käsittelee Servicen kuormantasaajaa, se kirjaa Serviceen Kubernetes-tapahtumia samoilla syillä kuin pilvipalveluntarjoajan ohjain, joten kubectl describe service <name> näyttää tilanteen:
EnsuringLoadBalancer, kun se alkaa luoda kuormantasaajaa tai toteuttaa siihen muutosta;EnsuredLoadBalancer, kun se on valmis, taiUpdatedLoadBalancer, kun vain sen takana olevien solmujen joukko on muuttunut;DeletingLoadBalancerja sittenDeletedLoadBalancer, kun Service poistetaan tai se lakkaa olemastatype: LoadBalancer(poistetun Servicen tapahtumat näkyvät edelleen sen nimiavaruudessa komennollakubectl get events);- varoitus
SyncLoadBalancerFailedjokaisesta epäonnistuneesta yrityksestä. Service jää tilaanEXTERNAL-IP <pending>, ja viesti alkaaError syncing load balancer: failed to ensure load balancer:, jota seuraa tarkempi syy —PublicIPNotFoundtaiPublicIPInUseomalle tunnisteelle, joka ei ole sinun tai on jo käytössä,PublicIPForbiddenloppuneelle Public IP -varannolle tai kiintiölle,RealiseFailedmuulle — sekä mitä asialle voi tehdä.
Muuttumaton Service ei saa tapahtumia, kun alusta tarkistaa sen uudelleen. Klusteri, jonka hallintataso on näitä tapahtumia vanhempi, kirjaa vain varoituksen, ja sen syynä on tarkempi syy; muut näkyvät, kun hallintataso on päivitetty. Kubernetes säilyttää tapahtumat tunnin ajan.
Työsolmujen automaattinen sisääntulon kuormantasaaja on poistettu
Klusterit saivat aiemmin luontihetkellä sisääntulon kuormantasaajan, joka välitti TCP 80:n ja 443:n kiinteisiin solmuportteihin jokaisella työsolmulla, valittuna ingressScheme-asetuksella (Terraformissa ingress_scheme) ja valinnaisella tuo-omasi-osoitteella. Kaikki tämä on poistettu: klusteria luodessa ei ole sisääntuloasetusta eikä julkaistavia kiinteitä solmuportteja. Käytä Servicea, jonka type: LoadBalancer, kuten yllä.
API-päätepisteen näkyvyys ei ole asetus
Klusterilla ei ole scheme-asetusta eikä publicIpId-asetusta — molemmat hylätään. Vastaus on kiinteä, ei vain alustan päättämä: API-päätepiste on yksityinen VPC:llesi, aina. Katso Hae kubeconfigisi.
Solmupoolit
Klusterilla on yksi tai useampi solmupooli — tietyn koon työsolmujen ryhmiä. Klusterin tietosivulta voit:
- Lisätä solmupoolin (nimi, koko, solmujen määrä), valinnaisesti labelien ja taintien kanssa ajoituksen ohjaamiseksi (labelit ja taintit ovat toistaiseksi käytettävissä vain portaalissa — Terraform-resurssi ei vielä tue niitä).
- Skaalata poolia asettamalla uuden solmujen määrän.
- Poistaa poolin.
Skaalaa toistaiseksi manuaalisesti
Klusterin automaattiskaalaus ei ole vielä saatavilla — aseta solmujen määrä nimenomaisesti ja skaalaa pooleja manuaalisesti työkuormasi muuttuessa.
Pysyvä tallennustila
Klusterit toimitetaan Frostmoln CSI -tallennusluokan frostmoln-block (oletus-StorageClass) kanssa, jota tukee Frostmoln-lohkotallennustila. Luo PersistentVolumeClaim, niin volyymi luodaan ja liitetään automaattisesti; volyymit tukevat verkossa tapahtuvaa laajennusta.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data
spec:
accessModes: ['ReadWriteOnce']
storageClassName: frostmoln-block
resources:
requests:
storage: 20GiJokaisen claimin taltio näkyy myös taltioluettelossasi merkittynä Kubernetes. Katso Kubernetes-taltiot, miten niitä hallinnoidaan ja mitä niille tapahtuu, kun poistat klusterin.
Verkottuminen
Klusterin CNI on Cilium. Klusterin solmut pääsevät internetiin vain, jos klusterin VPC:llä on Gateway — ilman sitä solmuilla ei ole lähtevää yhteyttä, nimenselvitystä eikä yhteyttä hallittuihin palveluihin, joten lisää VPC:hen Gateway itse, jos solmut tarvitsevat jotakin näistä. Klusterin luominen ei koskaan lisää sitä puolestasi. Solmut on joka tapauksessa eristetty Frostmolnin sisäverkoista — työkuormasi ajetaan omassa tenant-kohtaisessa verkossaan. Tavoita API-palvelin yllä olevan klusterin päätepisteen kautta, ja julkaise omat palvelusi Servicella, jonka type: LoadBalancer (katso Työkuormien tavoittaminen).
Mitä voit tehdä klusterissasi
Olet klusterin ylläpitäjä. Kubeconfigillasi voit luoda minkä tahansa resurssin omiin nimiavaruuksiisi ja minkä tahansa klusterinlaajuisen resurssin, jota alusta ei ole varannut itselleen — myös CustomResourceDefinitionit, ClusterRolet ja ClusterRoleBindingit (millä tahansa verbeillä, myös *) sekä admission-webhookit. Asennat siis operaattorit niiden virallisista Helm-kaavioista: Traefik (CRD-tarjoajineen), Argo CD, cert-manager (webhook mukaan lukien), Kyverno, CloudNativePG, kube-prometheus-stack ja vastaavat.
Luomiisi ServiceAccounteihin sovelletaan samoja sääntöjä kuin kubeconfigiisi.
Frostmolnille varattua
- Alustan nimiavaruudet —
kube-system,kube-public,kube-node-lease,frostmoln-system,frostmoln-workload-identity,external-secretssekä Frostmolnin puolestasi asentamien lisäosien nimiavaruudet (esimerkiksiexternal-dns). Näet, mitä niissä ajetaan, mutta et voi muuttaa sitä. Poikkeus on ExternalDNS:n nimiavaruuteen luomasifrostmoln-dns-salaisuus: se pysyy sinun. Kuudessa ensin mainitussa (kube-system–external-secrets) kubeconfigisi ei myöskään voi lukea Secretejä, ConfigMapeja tai podien lokeja. Lisäosien nimiavaruuksissa ei ole alustan tunnistetietoja, joten niiden Secretit ja ConfigMapit ovat luettavissasi nimiavaruus kerrallaan: kaikkien nimiavaruuksien luku (kubectl get secrets -A) estetään, koska se kattaa alustan nimiavaruudet. - Klusterin infrastruktuuri — Nodet, StorageClassit, CSI-ajurit ja PersistentVolumet (pyydä tallennustilaa
PersistentVolumeClaimilla, katso Pysyvä tallennustila), APIServicet, API Priority and Fairness (FlowSchemat) ja ServiceCIDRit. - Alustan API-ryhmät — CustomResourceDefinitionit ryhmissä
frostmoln.cloud,frostmoln.se,cilium.io,external-secrets.io,k8s.iojakubernetes.io(ja niiden aliverkkotunnuksissa) sekä objektit Ciliumin (esimerkiksiCiliumNetworkPolicy) ja alustan ryhmissä. Käytä verkkosääntöihin tavallistaNetworkPolicyä; omat ExternalSecretisi ja SecretStoresi ovat sallittuja. - Servicet — Service ei saa asettaa
spec.externalIPs-kenttää, etkä voi itse kirjoittaa Servicenstatus-tietoja: kuormantasaajan osoitteet tulevat alustalta, joten käytä tyyppiätype: LoadBalancer. Myös API-palvelimen omakubernetes-Service nimiavaruudessadefaultja sen endpointit ovat varattuja. Itse ajamasi kuormantasaajakontrolleri (esimerkiksi MetalLB tai kube-vip) ei siksi voi jakaa osoitteita; käytä tyyppiätype: LoadBalancer, jonka Frostmoln tarjoaa (katso Työkuormien tavoittaminen). - Admission-käytännöt — ValidatingAdmissionPolicyt ja MutatingAdmissionPolicyt. Käytä niiden sijaan admission-webhookia.
- Identiteetti — minkään muun kuin omien ServiceAccountiesi nimissä esiintyminen (impersonointi) sekä varmenteiden allekirjoitus
kubernetes.io-allekirjoittajilla. - Pod Security — Pod Security
restrictedon voimassa koko klusterissa, eikä nimiavaruuden Pod Security -tunnisteita voi muuttaa, joten etuoikeutetut podit ja podit, joilla onhostNetwork,hostPIDtaihostPath, hylätään. - Järjestelmän prioriteettiluokat — nimiavaruuksiesi podit eivät voi käyttää luokkia
system-node-criticaltaisystem-cluster-criticaleivätkä mitään prioriteettia yli 1000000000, eikä näitä kahta luokkaa voi muuttaa; ne pitävät alustan omat podit ajoitettavina. Luo sen sijaan oma PriorityClass. Kaavio, joka käyttää oletuksena järjestelmäluokkaa, kuten metrics-server, tarvitseepriorityClassName-arvoksi oman luokkasi tai tyhjän merkkijonon. - Hallintatason päätepisteet — hallintatason metriikka- ja vianetsintäpäätepisteet. Kubernetes-API:n kautta kubelet-API on rajattu solmujen metriikoihin ja tilastoihin (
nodes/metrics,nodes/stats);nodes/proxyjanodes/logeivät ole käytettävissä. Työkalut, jotka tavoittavat kubeletin API-palvelimen välityspalvelimen kautta — esimerkiksi Grafana Alloy tai k8s-monitoring, joka kerää/api/v1/nodes/<node>/proxy/metrics/cadvisor-polkua, tai Fluent Bit asetuksellaUse_Kubelet On— hylätään; määritä ne keräämään kubeletin tiedot suoraan solmulta (kuten kube-prometheus-stack ja metrics-server tekevät), jolloin käytetään sallittuja solmujen metriikka- ja tilasto-oikeuksia.
Admission-webhookit
Webhookin on osoitettava klusterisi Serviceen, ei URL-osoitteeseen. Jos jokainen sääntö kohdistuu omiin CRD-API-ryhmiisi, webhook hyväksytään sellaisenaan. Webhookin, joka sieppaa sisäänrakennettuja resursseja — Podeja, Deploymentteja, Servicejä ja niin edelleen — on lisäksi:
- asetettava
timeoutSecondsarvoon10tai pienemmäksi; - asetettava
sideEffects: None(taiNoneOnDryRun); - rajattava alustan nimiavaruudet ja lisäosien objektit pois näillä valitsimilla:
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: NotIn
values:
[
kube-system,
kube-public,
kube-node-lease,
frostmoln-system,
frostmoln-workload-identity,
external-secrets,
]
- key: frostmoln.se/addon
operator: DoesNotExist
objectSelector:
matchExpressions:
- key: frostmoln.se/addon
operator: DoesNotExist- lueteltava resurssit jokaisessa säännössä — ei jokerimerkkiresurssia (
*tai*/status); - jos se sieppaa Servicejä, Endpointseja tai EndpointSliceja, lisättävä myös
defaultavaimenkubernetes.io/metadata.nameNotIn-arvoihin — API-palvelin ylläpitää siellä omia endpointejaan; - jätettävä sieppaamatta nodet, RBAC, CRD:t, admission-määritykset, leaset, varmenteet, tallennus- ja flowcontrol-resurssit sekä PersistentVolumet, IPAddressit, ServiceCIDRit ja PriorityClassit.
Helm-kaavioiden arvot
Argo CD, Traefik (rbac.enabled=true, CRD-tarjoajineen) ja CloudNativePG asennetaan oletusarvoillaan. Muutama muu kaavio tarvitsee seuraavat:
cert-manager —
global.leaderElection.namespace=cert-manager; oletusarvo sijoittaa leader election -objektit nimiavaruuteenkube-system.kube-prometheus-stack — hallintataso on hallinnoitu eikä sitä voi kerätä (scrape), ja kaavion hallintatasokomponentit loisivat Servicejä nimiavaruuteen
kube-system. node-exporter tarvitsee pääsyn isäntään, minkä Pod Security hylkää. Osoita kubelet-palvelu julkaisusi (release) nimiavaruuteen:yamlkubeControllerManager: enabled: false kubeScheduler: enabled: false kubeEtcd: enabled: false kubeProxy: enabled: false coreDns: enabled: false kubeApiServer: enabled: false nodeExporter: enabled: false prometheusOperator: kubeletService: namespace: monitoring # julkaisusi nimiavaruusKyverno — kun lisäät käytäntöjä, aseta sen
config.webhooksyllä olevaannamespaceSelectoriin sekäobjectSelectoriin (Kyvernon oletukset rajaavat pois vainkube-systemin). Sen TTL-siivouswebhook ja ValidatingAdmissionPolicyjen generointi eivät ole käytettävissä; käytännöt pannaan täytäntöön sen webhookien kautta.ingress-nginx — sen admission-webhook sieppaa Ingress-resursseja, jotka ovat sisäänrakennettuja. Aseta
controller.admissionWebhooks.namespaceSelectoryllä olevaksinamespaceSelectoriksi jacontroller.admissionWebhooks.objectSelectoryllä olevaksiobjectSelectoriksi (sen oletusaikakatkaisu jasideEffects: Nonetäyttävät jo vaatimukset), tai poista webhook käytöstä asetuksellacontroller.admissionWebhooks.enabled=false.
Rajoitukset
- Yksi vyöhyke klusteria kohti — solmut sijoitetaan klusterin alueelle/aliverkkoon; ei usean AZ:n hajautusta tänään.
- Cilium on ainoa CNI — sitä ei voi valita asiakkaan toimesta.
- Ei vielä paikallaan tehtäviä versiopäivityksiä — valitse versiosi luontihetkellä.
- Automaattiskaalaus ei ole vielä saatavilla (skaalaa solmupooleja manuaalisesti).
- Kiintiöt rajoittavat klustereita ja solmuja tenanttia kohden. Tarkista kiintiösi ja pyydä korotusta ennen kuin luot suuren klusterin.
- Työkuorman kuormantasaaja on oletuksena sisäinen —
Service, jonkatype: LoadBalancer, saa sisäisen VPC-osoitteen, ellet annotoi sitäfrostmoln.se/lb-scheme: public(katso Työkuormien tavoittaminen). - Klusterin poistaminen poistaa sen solmut, sen API-kuormantasaajan ja sen tallennetut tunnistetiedot.