Üzembehelyezési biztosítékok használata az ajánlott eljárások kikényszerítéséhez az Azure Kubernetes Service-ben (AKS) (előzetes verzió)
Ez a cikk bemutatja, hogyan érvényesítheti az ajánlott eljárásokat az Azure Kubernetes Service-fürtökön az üzembehelyezési garanciák használatával.
Áttekintés
A fejlesztési életciklus során gyakori, hogy hibák, problémák és egyéb problémák merülnek fel, ha a Kubernetes-erőforrások kezdeti üzembe helyezése helytelen konfigurációkat tartalmaz. A Kubernetes-fejlesztés terheinek csökkentése érdekében az Azure Kubernetes Service (AKS) üzembe helyezési biztosítékokat kínál (előzetes verzió). Az üzembe helyezési biztosítékok azure policy-vezérlőkkel kényszerítik ki a Kubernetes ajánlott eljárásait az AKS-fürtben.
Az üzembe helyezési biztosítékok két konfigurációs szintet kínálnak:
-
Warning
: Figyelmeztető üzeneteket jelenít meg a kódterminálban, hogy figyelmeztessen a nem megfelelő fürtkonfigurációkra, de továbbra is lehetővé teszi a kérés teljesítését. -
Enforcement
: A megfelelő konfigurációk kikényszerítéséhez tiltsa le és mutálja az üzemelő példányokat, ha nem követik az ajánlott eljárásokat.
Miután konfigurálta a "Figyelmeztetés" vagy a "Kényszerítés" üzembehelyezési biztosítékait, az üzembe helyezési védelem programozott módon értékeli a fürtöket a létrehozáskor vagy a frissítési időpontban a megfelelőség érdekében. Az üzembe helyezési biztosítékok emellett összesített megfelelőségi információkat is megjelenítenek a számítási feladatok között erőforrásszinten az Azure Policy megfelelőségi irányítópultján keresztül az Azure Portalon , illetve a parancssori felületen vagy a terminálon. A nem megfelelő számítási feladatok futtatása azt jelzi, hogy a fürt nem követi az ajánlott eljárásokat, és hogy a fürt számítási feladatait a fürt konfigurációja által okozott problémák fenyegetik.
Fontos
Az AKS előzetes verziójú funkciói önkiszolgáló, opt-in alapon érhetők el. Az előzetes verziókat "ahogy van" és "rendelkezésre állóként" biztosítjuk, és a szolgáltatási szerződésekből és a korlátozott jótállásból kizárjuk őket. Az AKS előzetes verzióit részben az ügyfélszolgálat fedezi a legjobb munkamennyiség alapján. Ezért ezek a funkciók nem éles használatra vannak szánva. További információkért tekintse meg az alábbi támogatási cikkeket:
Előfeltételek
Engedélyeznie kell az Azure Policy bővítményt az AKS-hez. További információ: Azure Policy engedélyezése az AKS-fürtön.
Az üzembehelyezési biztosítékok konfigurálásához a bővítmény verziójával vagy újabb verziójával
2.0.0b1
kell rendelkeznieaks-preview
. A bővítmény telepítéséhez lásd : Az aks-preview CLI bővítmény telepítése. Azt is javasoljuk, hogy frissítse az Azure CLI-t, hogy biztosan a legújabb verzió legyen telepítve.Az üzembe helyezési védelem konfigurációjának létrehozásához és módosításához az AKS-fürtön az alábbi engedélyekkel rendelkező előfizetésre van szüksége:
- Microsoft.Authorization/policyAssignments/write
- Microsoft.Authorization/policyAssignments/read
Regisztrálnia kell az üzembehelyezési biztonsági funkciók jelzőjét. A funkciójelző regisztrálásához tekintse meg a funkciójelző regisztrálását az üzembe helyezési védelmi funkciókhoz.
Az aks-preview CLI-bővítmény telepítése
Telepítse a
aks-preview
PARANCSSOR-bővítményt aaz extension add
paranccsal.az extension add --name aks-preview
Frissítse a bővítményt, hogy biztosan a legújabb verzió legyen telepítve a
az extension update
parancs használatával.az extension update --name aks-preview
Az üzembe helyezési védelmi funkciók jelölőjének regisztrálása
Regisztrálja a
SafeguardsPreview
funkciójelzőt aaz feature register
paranccsal.az feature register --namespace Microsoft.ContainerService --name SafeguardsPreview
Néhány percig tart, amíg az állapot megjelenik a Regisztrált állapotban.
Ellenőrizze a regisztrációs állapotot a
az feature show
paranccsal.az feature show --namespace Microsoft.ContainerService --name SafeguardsPreview
Ha az állapot a Regisztrált állapotot tükrözi, frissítse a Microsoft.ContainerService erőforrás-szolgáltató regisztrációját a
az provider register
paranccsal.az provider register --namespace Microsoft.ContainerService
Üzembe helyezési biztonsági szabályzatok
Feljegyzés
A ReadOnlyRootFilesystem
szabályzatok és RootfilesystemInitContainers
szabályzatok jelenleg csak Linuxon érhetők el.
Az alábbi táblázat azokat a szabályzatokat sorolja fel, amelyek aktívvá válnak, és azokat a Kubernetes-erőforrásokat, amelyeket az üzembehelyezési védelem engedélyezésekor megcéloznak. Az Azure Portalon jelenleg elérhető üzembehelyezési biztosítékokat Azure Policy-definícióként vagy az Azure Kubernetes Service beépített Azure Policy-definícióiban tekintheti meg. A gyűjtemény célja, hogy létrehozzák a legtöbb felhasználóra és használati esetekre vonatkozó ajánlott eljárások általános és általános listáját.
Üzembehelyezési védelmi szabályzat | Célzott Kubernetes-erőforrás | Mutáció eredménye, ha elérhető |
---|---|---|
[Előzetes verzió]: Nem szerkeszthetők az egyes csomópontok | Csomópont | n/a |
A Kubernetes-fürttárolók CPU- és memóriaerőforrás-korlátai nem léphetik túl a megadott korlátokat | Pod | 500 m-re állítja a CPU-erőforráskorlátokat, ha nincs megadva, és a memóriakorlátokat 500Mi értékre állítja, ha nincs elérési út |
[Előzetes verzió]: Affinitás elleni szabályokkal kell rendelkeznie | Üzembe helyezés, StatefulSet, ReplicationController, ReplicaSet | n/a |
[Előzetes verzió]: Nincsenek AKS-specifikus címkék | Üzembe helyezés, StatefulSet, Replikakészlet | n/a |
A Kubernetes-fürttárolók csak engedélyezett lemezképeket használhatnak | Pod | n/a |
[Előzetes verzió]: Fenntartott rendszerkészlet-fertőzöttek | Csomópont | Eltávolítja a CriticalAddonsOnly fertőzöttet egy felhasználói csomópontkészletből, ha nincs beállítva. Az AKS a fertőzöttel CriticalAddonsOnly távol tartja az ügyfél podjait a rendszerkészlettől. Ez a konfiguráció biztosítja az AKS-összetevők és az ügyfél podok egyértelmű elkülönítését, és megakadályozza az olyan ügyfél podok kiürítését, amelyek nem tolerálják a CriticalAddonsOnly fertőzést. |
Győződjön meg arról, hogy a fürttárolók készenlét- vagy élettartam-mintavételeket konfiguráltak | Pod | n/a |
A Kubernetes-fürtöknek a StorageClass tárolótároló-illesztőt (CSI) kell használniuk | StorageClass | n/a |
[Előzetes verzió]: A Kubernetes-fürtnek pontos podkimaradási költségvetéseket kell implementálnia | Üzembe helyezés, ReplicaSet, StatefulSet | A maxUnavailable PodDisruptionBudget erőforrás beállítása 1 értékre. |
[Előzetes verzió]: A Kubernetes-fürtszolgáltatásoknak egyedi választókat kell használniuk | Szolgáltatás | n/a |
[Előzetes verzió]: ReadOnlyRootFilesystem a Pod specifikációja igaz értékre van állítva |
Pod | Ha readOnlyRootFilesystem nincs beállítva, a Pod specifikációban true beállítja a beállításokat. Ez a konfiguráció megakadályozza, hogy a tárolók a gyökér fájlrendszerbe írjanak. |
[Előzetes verzió]: RootfilesystemInitContainers a Pod specifikációja igaz értékre van állítva |
Pod | Ha rootFilesystemInitContainers nincs beállítva, a Pod specifikációban true beállítja a beállításokat. |
[Előzetes verzió]: A Kubernetes-fürttároló lemezképei nem tartalmazhatják a legújabb képcímkét | Üzembe helyezés, StatefulSet, ReplicationController, ReplicaSet | n/a |
[Előzetes verzió]: A Kubernetes-fürttároló lemezképeinek tartalmazniuk kell a preStop hookot | Üzembe helyezés, StatefulSet, ReplicationController, ReplicaSet | n/a |
Ha el szeretne küldeni egy ötletet vagy egy üzembehelyezési biztonsági műveletet, nyisson meg egy problémát az AKS GitHub-adattárban , és adja hozzá [deployment safeguards request]
a cím elejéhez.
Üzembe helyezési biztosítékok engedélyezése
Feljegyzés
Ha első alkalommal engedélyezte az Azure Policyt az üzembehelyezési biztosítékok használatára, előfordulhat, hogy akár 20 percet is várnia kell, amíg az Azure Policy érvénybe lép.
Az üzembehelyezési védelmi Enforcement
szint használata azt jelenti, hogy ön úgy dönt, hogy letiltja és mutálja az üzemelő példányokat. Mielőtt engedélyezné, gondolja át, hogyan működnek ezek a szabályzatok az AKS-fürttel Enforcement
.
Üzembehelyezési biztosítékok engedélyezése új fürtön
Engedélyezze az üzembehelyezési védelmet egy új fürtön a az aks create
parancs és a --safeguards-version
--safeguards-level
jelzők használatával.
Ha meg nem felelési figyelmeztetéseket szeretne kapni, állítsa a --safeguards-level
következőre Warning
: . Ha meg szeretné tagadni vagy mutálni szeretné az összes nem megfelelő üzemelő példányt, állítsa be a következőre Enforcement
: . A figyelmeztetések fogadásához állítsa a --safeguards-level
"Figyelmeztetés" értéket. Ha minden olyan üzembe helyezést meg szeretne tagadni vagy mutálni, amely nem tartja be az üzembe helyezési biztosítékokat, állítsa a --safeguards-level
"Kényszerítés" értéket. Az üzembe helyezési védelmi verzió beállításához használja a jelölőt --safeguards-version
. Jelenleg a 2.0.0-s verzió az üzembe helyezési biztosítékok legújabb verziója.
az aks create \
--name myAKSCluster \
--resource-group myResourceGroup \
--enable-addons azure-policy \
--safeguards-level Warning \
--safeguards-version v2.0.0 \
--generate-ssh-keys
Üzembehelyezési biztosítékok engedélyezése meglévő fürtön
Engedélyezze az üzembehelyezési védelmet egy meglévő fürtön, amelyen engedélyezve van az Azure Policy bővítmény a az aks update
parancs és a --safeguards-level
--safeguards-version
jelzők használatával. Ha meg nem felelési figyelmeztetéseket szeretne kapni, állítsa a --safeguards-level
következőre Warning
: . Ha meg szeretné tagadni vagy mutálni szeretné az összes nem megfelelő üzemelő példányt, állítsa be a következőre Enforcement
: .
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement --safeguards-version v2.0.0
Ha frissíteni szeretné egy meglévő fürt üzembehelyezési védelmi szintjét, használja a az aks update
parancsot a --safeguards-level
következőre beállított Warning
jelölővel: vagy Enforcement
.
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Enforcement
Névterek kizárása
Bizonyos névtereket kizárhat az üzembe helyezési védelemből is. Ha kizár egy névteret, az abban a névtérben lévő tevékenységeket az üzembe helyezési figyelmeztetések és kényszerítések nem érintik.
Például a névterek ns1
kizárásához használja ns2
a névterek vesszővel tagolt listáját a --safeguards-excluded-ns
jelölővel, ahogyan az az alábbi példában látható:
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Warning --safeguards-version v2.0.0 --safeguards-excluded-ns ns1,ns2
Az üzembehelyezési védelmi verzió frissítése
Feljegyzés
A 2.0.0-s verzió az üzembe helyezési biztosítékok legújabb verziója.
Frissítse az üzembehelyezési védelmi verziót a az aks update
parancs használatával az --safeguards-version
új verzióra beállított jelzővel. Az alábbi példa egy meglévő fürtöt frissít a 2.0.0-s verzió használatára:
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-version v2.0.0
Megfelelőség ellenőrzése fürtök között
A Kubernetes-jegyzék üzembe helyezése után figyelmeztetések vagy lehetséges megtagadási üzenet jelenik meg a parancssori felületen vagy a terminálon, ha a fürt nem felel meg az üzembehelyezési garanciáknak, ahogyan az alábbi példákban is látható:
Figyelmeztetés
$ kubectl apply -f pod.yml
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
Warning: [azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
Warning: [azurepolicy-k8sazurev3containerlimits-a8754961dbd4c1d8b49d] container <my-container> has no resource limits
Warning: [azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
pod/my-pod created
Kikényszerítés
Az üzembe helyezési védelmi mutációkkal a Enforcement
szint adott esetben mutálja a Kubernetes-erőforrásokat. A Kubernetes-erőforrásoknak azonban továbbra is át kell adniuk az összes biztonsági elemet a sikeres üzembe helyezéshez. Ha a védelmi szabályzatok nem sikerülnek, a rendszer megtagadja az erőforrást, és nem lesz üzembe helyezve.
$ kubectl apply -f pod.yml
Error from server (Forbidden): error when creating ".\pod.yml": admission webhook "validation.gatekeeper.sh" denied the request: [azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <livenessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerenforceprob-0e8a839bcd103e7b96a8] Container <my-container> in your Pod <my-pod> has no <readinessProbe>. Required probes: ["readinessProbe", "livenessProbe"]
[azurepolicy-k8sazurev2containerallowedimag-1ff6d14b2f8da22019d7] Container image my-image for container my-container has not been allowed.
[azurepolicy-k8sazurev1restrictedlabels-67c4210cc58f28acdfdb] Label <{"kubernetes.azure.com"}> is reserved for AKS use only
[azurepolicy-k8sazurev1containerrestrictedi-bde07e1776cbcc9aa8b8] my-pod in default does not have imagePullSecrets. Unauthenticated image pulls are not recommended.
Ha a Kubernetes-erőforrások megfelelnek a vonatkozó mutációs garanciáknak, és megfelelnek az összes többi védelmi követelménynek, sikeresen üzembe lesznek helyezve az alábbi példában látható módon:
$ kubectl apply -f pod.yml
pod/my-pod created
A fürtök közötti megfelelőség ellenőrzése az Azure Policy irányítópultján
Ha ellenőrizni szeretné, hogy az üzembehelyezési biztosítékok alkalmazva lettek-e, és ellenőrizni szeretné a fürt megfelelőségét, lépjen a fürt Azure Portal oldalára, és válassza a Szabályzatok lehetőséget, majd válassza az Azure Policy megnyitása lehetőséget.
A szabályzatok és kezdeményezések listájában válassza ki az üzembe helyezési biztosítékokkal kapcsolatos kezdeményezést. Megjelenik egy irányítópult, amelyen a megfelelőségi állapot látható az AKS-fürtön.
Feljegyzés
Az AKS-fürt megfelelőségének megfelelő értékeléséhez az Azure Policy-kezdeményezésnek a fürt erőforráscsoportjára kell kiterjednie.
Az üzembehelyezési biztosítékok letiltása
Tiltsa le a fürt üzembehelyezési védelmét a az aks update
parancs használatával, és állítsa a --safeguards-level
következőre Off
: .
az aks update --name myAKSCluster --resource-group myResourceGroup --safeguards-level Off
--
GYIK
Első alkalommal engedélyeztem az üzembe helyezési védelmet az Azure Policy használatával. Miért nem látok figyelmeztetést? Miért nem utasítják el a podokat?
Az Azure Policy az első engedélyezés után akár 35 percet is igénybe vehet a fürttel való szinkronizáláshoz.
Most váltottam a Figyelmeztetésről a Végrehajtásra. Ez azonnal érvénybe lép?
Az üzembehelyezési védelmi szintek közötti váltáskor előfordulhat, hogy akár 15 percet is várnia kell az új szint érvénybe lépéséhez.
Létrehozhatok saját mutációkat?
Szám Ha van ötlete a védelemre, nyisson meg egy problémát az AKS GitHub-adattárban , és adja hozzá [deployment safeguards request]
a cím elejéhez.
Választhatom ki és választhatom ki, hogy mely mutációkat szeretném a kényszerítésben?
Szám Az üzembe helyezési védelem teljes vagy semmi. A figyelmeztetés vagy a kényszerítés bekapcsolása után minden biztonsági funkció aktív lesz.
Miért lett elismerve az üzembehelyezési erőforrásom annak ellenére, hogy nem követte az ajánlott eljárásokat?
Az üzembe helyezési biztosítékok az ajánlott eljárásokra vonatkozó szabványokat érvényre juttatják az Azure Policy-vezérlőkkel, és olyan szabályzatokkal rendelkezik, amelyek a Kubernetes-erőforrásokon érvényesítik azokat. A fürtösszetevők kiértékeléséhez és kényszerítéséhez az Azure Policy kibővíti a Gatekeepert. A gatekeeper-kényszerítés jelenleg egy fail-open
modellben is működik. Mivel nincs garancia arra, hogy a Gatekeeper válaszol a hálózati hívásunkra, győződjön meg arról, hogy ebben az esetben az ellenőrzés kimarad, hogy a megtagadás ne blokkolja az üzemelő példányokat.
További információ: számítási feladatok érvényesítése a Gatekeeperben.
Következő lépések
Azure Kubernetes Service