Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel leest u hoe u Istio CNI inschakelt voor de op Istio gebaseerde service-mesh-invoegtoepassing in Azure Kubernetes Service (AKS). Istio CNI verbetert de beveiliging door de noodzaak van bevoegde netwerkmogelijkheden in toepassingsworkloads in de service-mesh te elimineren.
Overzicht
Istio leidt toepassingsverkeer om naar de Envoy sidecar-proxy met behulp van een van de twee mechanismen:
-
Istio CNI (
CNIChaining): Een CNI-invoegtoepassing op clusterniveau configureert verkeersomleiding, zodat toepassingspods geen bevoegde netwerkmogelijkheden nodig hebben. Deistio-validationinitcontainer wordt toegevoegd tijdens de sidecar-injectie om te controleren of de verkeersomleiding correct is geconfigureerd. -
Init-containers (
InitContainers): Elke applicatiepod gebruikt een geprivilegieerdeistio-initinit-container die de capaciteitenNET_ADMINenNET_RAWvereist om verkeersomleiding te configureren. Deze mogelijkheden veroorzaken vaak beveiligingsproblemen in bedrijfsomgevingen.
Vanaf revisie asm-1-30is Istio CNI het standaardomleidingsmechanisme voor nieuwe mesh-installaties. Voor revisies asm-1-25 tot en met asm-1-29 blijven init-containers de standaard en moet u Istio CNI expliciet inschakelen. Eerdere revisies bieden geen ondersteuning voor Istio CNI.
Istio CNI biedt de volgende voordelen ten opzichte van init-containers:
-
Verbetert de beveiliging: hiermee verwijdert u de noodzaak van bevoegde netwerkmogelijkheden (
NET_ADMIN,NET_RAW) van toepassingsworkloads - Vereenvoudigt het beveiligingsbeleid voor pods: toepassingspods vereisen alleen minimale mogelijkheden
- Onderhoudt functionaliteit: biedt dezelfde mogelijkheden voor verkeerbeheer als de traditionele init-containerbenadering
Opmerking
Istio CNI is geen vervanging voor Azure CNI en zal uw normale AKS-netwerk niet verstoren. Het is een afzonderlijke invoegtoepassing die is ontworpen om de verkeersomleiding op knooppuntniveau te beheren, waardoor de beveiliging wordt verbeterd door de noodzaak van bevoegde init-containers in toepassingspods weg te nemen.
Voordat u begint
Installeer de Azure CLI versie 2.86.0 of hoger. U kunt
az --versionuitvoeren om de versie te controleren. Voor het installeren of upgraden, zie Azure CLI installeren.U hebt een AKS-cluster nodig waarvoor de Istio-gebaseerde service mesh plug-in is ingeschakeld. Als u deze installatie niet hebt, raadpleegt u de Implementatie van de Istio-gebaseerde service mesh add-on voor Azure Kubernetes Service.
Zorg ervoor dat uw Istio-service-mesh revisie
asm-1-25of hoger gebruikt. U kunt de huidige revisie controleren met:az aks show --resource-group <resource-group-name> --name <cluster-name> --query 'serviceMeshProfile.istio.revisions'
Omgevingsvariabelen instellen
export CLUSTER=<cluster-name>
export RESOURCE_GROUP=<resource-group-name>
Istio CNI inschakelen
Istio CNI inschakelen op een nieuwe mesh-installatie
Voor revisies asm-1-30 en later is CNIChaining het standaardmechanisme voor proxyomleiding voor nieuwe installaties van de service-mesh-invoegtoepassing. U hoeft geen extra parameters op te geven. Schakel Istio CNI expliciet in voor revisies asm-1-25 tot en met asm-1-29 door de parameter --proxy-redirection-mechanism op te geven:
az aks mesh enable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --proxy-redirection-mechanism CNIChaining
Istio CNI inschakelen op een bestaande mesh-installatie
Als u de invoegtoepassing Istio-service-mesh al hebt ingeschakeld, kunt u met de volgende opdracht overschakelen naar Istio CNI:
az aks mesh proxy-redirection-mechanism --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --mechanism CNIChaining
De asm-1-30 standaardwaarde is alleen van toepassing op nieuwe installaties, dus het bijwerken van een bestaande mesh wijzigt het omleidingsmechanisme niet.
Opmerking
Bestaande pods schakelen niet automatisch over naar de istio-validation init-container. Start uw implementaties opnieuw op nadat u Istio CNI hebt ingeschakeld, zodat pods de wijziging (bijvoorbeeld kubectl rollout restart deployment/<name>) kunnen ophalen.
Controleren of Istio CNI ingeschakeld is
Gebruik az aks get-credentials om de referenties voor uw AKS-cluster op te halen:
az aks get-credentials --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
Nadat u Istio CNI hebt ingeschakeld, controleert u de installatie door te controleren of de CNI DaemonSet wordt uitgevoerd:
kubectl get daemonset -n aks-istio-system
U ziet dat de Istio CNI DaemonSet wordt uitgevoerd:
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
azure-service-mesh-istio-cni-addon-node 3 3 3 3 3 kubernetes.io/os=linux 94s
Workloads implementeren en gedrag controleren
Als u de beveiligingsverbetering wilt controleren, kunt u de voorbeeldtoepassing bookinfo implementeren en controleren of workloads gebruikmaken van de beveiligde istio-validation init-container in plaats van de bevoegde istio-init container.
Voorbeeldtoepassing implementeren
Schakel eerst sidecar injection in voor de standaardnamespace.
# Get the current Istio revision
REVISION=$(az aks show --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --query 'serviceMeshProfile.istio.revisions[0]' -o tsv)
# Label the namespace for sidecar injection
kubectl label namespace default istio.io/rev=${REVISION}
Implementeer de voorbeeldapplicatie bookinfo:
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.25/samples/bookinfo/platform/kube/bookinfo.yaml
Veilig gebruik van init-containers controleren
Controleer of de geïmplementeerde pods de beveiligde istio-validation init-container gebruiken in plaats van istio-init:
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.initContainers[0].name}{"\t"}{.spec.initContainers[0].securityContext.capabilities}{"\n"}{end}'
Verwachte uitvoer moet istio-validation tonen als de init-container met verwijderde capabilities:
details-v1-799dc5d847-7x9gl istio-validation {"drop":["ALL"]}
productpage-v1-99d6d698f-89gpj istio-validation {"drop":["ALL"]}
ratings-v1-7545c4bb6c-m7t42 istio-validation {"drop":["ALL"]}
reviews-v1-8679d76d6c-jz4vg istio-validation {"drop":["ALL"]}
reviews-v2-5b9c77895c-b2b7m istio-validation {"drop":["ALL"]}
reviews-v3-5b57874f5f-kk9rt istio-validation {"drop":["ALL"]}
U kunt ook de YAML voor een specifieke pod controleren om de beveiligingscontext te controleren:
kubectl get pod <pod-name> -n <namespace> -o yaml | grep -A 20 -B 25 "name: istio-validation"
In de uitvoer moet worden weergegeven dat de istio-validation init-container geen bevoegde mogelijkheden heeft:
initContainers:
- args:
…
name: istio-validation
…
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
privileged: false
readOnlyRootFilesystem: true
runAsGroup: 1337
runAsNonRoot: true
runAsUser: 1337
Istio CNI uitschakelen
Als u Istio CNI wilt uitschakelen en wilt terugkeren naar het gebruik van traditionele init-containers, gebruikt u de volgende opdracht:
az aks mesh proxy-redirection-mechanism --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --mechanism InitContainers
Na het uitschakelen van Istio CNI:
De CNI DaemonSet wordt verwijderd:
kubectl get daemonset azure-service-mesh-istio-cni-addon-node -n aks-istio-systemVerwachte uitvoer (geen CNI DaemonSet):
Error from server (NotFound): daemonsets.apps "azure-service-mesh-istio-cni-addon-node" not foundNieuwe workloads maken gebruik van de traditionele
istio-initinit-container met netwerkmogelijkheden. Start alle bestaande implementaties opnieuw om de wijziging op te halen:kubectl rollout restart deployment/details-v1 kubectl rollout restart deployment/productpage-v1 kubectl rollout restart deployment/ratings-v1 kubectl rollout restart deployment/reviews-v1 kubectl rollout restart deployment/reviews-v2 kubectl rollout restart deployment/reviews-v3Controleer de naam en mogelijkheden van de init-container:
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.initContainers[0].name}{"\t"}{.spec.initContainers[0].securityContext.capabilities}{"\n"}{end}'Verwachte uitvoer moet
istio-inittonen met netwerkmogelijkheden:details-v1-57bc58c559-722v8 istio-init {"add":["NET_ADMIN","NET_RAW"],"drop":["ALL"]} productpage-v1-7bb64f657c-jw6gs istio-init {"add":["NET_ADMIN","NET_RAW"],"drop":["ALL"]} ratings-v1-57d5594c75-4zd49 istio-init {"add":["NET_ADMIN","NET_RAW"],"drop":["ALL"]} reviews-v1-7fd8f9cd59-mdcf9 istio-init {"add":["NET_ADMIN","NET_RAW"],"drop":["ALL"]} reviews-v2-7b8bdc9cdf-k9qgb istio-init {"add":["NET_ADMIN","NET_RAW"],"drop":["ALL"]} reviews-v3-588854d9d7-s2f7j istio-init {"add":["NET_ADMIN","NET_RAW"],"drop":["ALL"]}