Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule pokazano, jak włączyć funkcję Istio CNI dla dodatku siatki usługi opartej na technologii Istio w usłudze Azure Kubernetes Service (AKS). Istio CNI zwiększa bezpieczeństwo, eliminując konieczność korzystania z uprzywilejowanych funkcji sieciowych w obciążeniach aplikacji w ramach siatki usług.
Przegląd
Istio przekierowuje ruch aplikacyjny do serwera proxy Envoy typu sidecar za pomocą jednego z dwóch mechanizmów:
-
Istio CNI (
CNIChaining): wtyczka CNI na poziomie klastra konfiguruje przekierowywanie ruchu, więc zasobniki aplikacji nie potrzebują uprzywilejowanych możliwości sieciowych. Konteneristio-validationinit jest dodawany podczas iniekcji przyczepki, aby sprawdzić, czy przekierowanie ruchu jest poprawnie skonfigurowane. -
Kontenery init (
InitContainers): Każdy zasobnik aplikacji używa uprzywilejowanegoistio-initkontenera init, który wymaga uprawnieńNET_ADMINiNET_RAWdo skonfigurowania przekierowywania ruchu. Te możliwości często budzą obawy dotyczące zabezpieczeń w środowiskach przedsiębiorstwa.
Począwszy od wersji asm-1-30, Istio CNI jest domyślnym mechanizmem przekierowania dla nowych instalacji siatki. Dla rewizji od asm-1-25 do asm-1-29 kontenery init pozostają ustawieniem domyślnym i należy jawnie włączyć Istio CNI. Wcześniejsze wersje nie obsługują Istio CNI.
Istio CNI zapewnia następujące korzyści w porównaniu z kontenerami inicjalizującymi:
-
Zwiększa bezpieczeństwo: eliminuje konieczność korzystania z uprzywilejowanych funkcji sieciowych (
NET_ADMIN,NET_RAW) z obciążeń aplikacji - Upraszcza zasady zabezpieczeń zasobników: zasobniki aplikacji wymagają tylko minimalnych możliwości
- Utrzymuje funkcjonalność: zapewnia te same możliwości zarządzania ruchem co tradycyjne podejście kontenera init
Uwaga / Notatka
Istio CNI nie jest zamiennikiem usługi Azure CNI i nie zakłóca normalnego działania sieci usługi AKS. Jest to oddzielna wtyczka przeznaczona do konfigurowania przekierowania ruchu Istio na poziomie węzła, co zwiększa bezpieczeństwo, eliminując potrzebę kontenerów inicjujących o uprzywilejowanych uprawnieniach w zasobnikach aplikacji.
Zanim rozpoczniesz
Zainstaluj Azure CLI w wersji 2.86.0 lub nowszej. Możesz uruchomić polecenie
az --version, aby zweryfikować wersję. Aby zainstalować lub uaktualnić, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.Potrzebujesz klastra AKS z włączonym dodatkiem siatki usług opartym na Istio. Jeśli nie masz tej konfiguracji, zobacz Deploy Istio-based service mesh add-on for Azure Kubernetes Service (Wdrażanie dodatku siatki usługi opartej na środowisku Istio dla usługi Azure Kubernetes Service).
Upewnij się, że siatka usługi Istio używa wersji
asm-1-25lub nowszej. Bieżącą poprawkę można sprawdzić za pomocą następujących funkcji:az aks show --resource-group <resource-group-name> --name <cluster-name> --query 'serviceMeshProfile.istio.revisions'
Ustawianie zmiennych środowiskowych
export CLUSTER=<cluster-name>
export RESOURCE_GROUP=<resource-group-name>
Włącz Istio CNI
Włączanie Interfejsu CNI Istio w nowej instalacji sieci
Począwszy od wersji asm-1-30 i nowszych, CNIChaining jest domyślnym mechanizmem przekierowywania proxy dla nowych instalacji dodatku service mesh. Nie trzeba określać żadnych dodatkowych parametrów. W wersjach od asm-1-25 do asm-1-29 włącz jawnie Istio CNI, określając parametr --proxy-redirection-mechanism:
az aks mesh enable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --proxy-redirection-mechanism CNIChaining
Włączanie funkcji Istio CNI w istniejącej instalacji siatki
Jeśli masz już włączony dodatek siatki usług Istio, możesz przełączyć się na Istio CNI przy użyciu następującego polecenia:
az aks mesh proxy-redirection-mechanism --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --mechanism CNIChaining
Wartość domyślna asm-1-30 dotyczy tylko nowych instalacji, więc uaktualnienie istniejącej siatki nie zmienia mechanizmu przekierowania.
Uwaga / Notatka
Istniejące zasobniki nie będą automatycznie przełączać się do kontenera istio-validation init. Uruchom ponownie wdrożenia po włączeniu funkcji Istio CNI, aby zasobniki pobierały zmianę (na przykład kubectl rollout restart deployment/<name>).
Sprawdź, czy funkcja Istio CNI jest włączona
Użyj az aks get-credentials, aby uzyskać poświadczenia dla klastra usługi AKS.
az aks get-credentials --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}
Po włączeniu funkcji Istio CNI sprawdź instalację, sprawdzając, czy zestaw daemonSet CNI jest uruchomiony:
kubectl get daemonset -n aks-istio-system
Powinieneś zobaczyć uruchomiony DaemonSet Istio CNI.
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
Wdrażanie obciążeń i weryfikowanie zachowania
Aby sprawdzić poprawność zabezpieczeń, możesz wdrożyć przykładową aplikację bookinfo i sprawdzić, czy obciążenia używają bezpiecznego istio-validation kontenera init zamiast kontenera uprzywilejowanego istio-init .
Wdrażanie przykładowej aplikacji
Najpierw włącz iniekcję przyczepki dla domyślnej przestrzeni nazw:
# 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}
Wdróż przykładową aplikację bookinfo:
kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.25/samples/bookinfo/platform/kube/bookinfo.yaml
Zweryfikuj bezpieczne użycie kontenera init
Sprawdź, czy wdrożone pody używają bezpiecznego istio-validation kontenera init zamiast istio-init:
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.initContainers[0].name}{"\t"}{.spec.initContainers[0].securityContext.capabilities}{"\n"}{end}'
Oczekiwane dane wyjściowe powinny pokazywać istio-validation jako init container z ograniczonymi uprawnieniami:
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"]}
Możesz również sprawdzić kod YAML dla określonego zasobnika, aby sprawdzić kontekst zabezpieczeń:
kubectl get pod <pod-name> -n <namespace> -o yaml | grep -A 20 -B 25 "name: istio-validation"
Dane wyjściowe powinny wskazywać, że istio-validation kontener init nie ma uprzywilejowanych możliwości:
initContainers:
- args:
…
name: istio-validation
…
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
privileged: false
readOnlyRootFilesystem: true
runAsGroup: 1337
runAsNonRoot: true
runAsUser: 1337
Wyłączanie Istio CNI
Aby wyłączyć usługę Istio CNI i powrócić do używania tradycyjnych kontenerów inicjowania, użyj następującego polecenia:
az aks mesh proxy-redirection-mechanism --resource-group ${RESOURCE_GROUP} --name ${CLUSTER} --mechanism InitContainers
Po wyłączeniu interfejsu CNI Istio:
DaemonSet CNI zostanie usunięty:
kubectl get daemonset azure-service-mesh-istio-cni-addon-node -n aks-istio-systemOczekiwane dane wyjściowe (bez CNI DaemonSet):
Error from server (NotFound): daemonsets.apps "azure-service-mesh-istio-cni-addon-node" not foundNowe obciążenia będą używać tradycyjnego
istio-initkontenera inicjowania z funkcjami sieciowymi. Uruchom ponownie wszystkie istniejące wdrożenia, aby zastosować zmianę.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-v3Sprawdź nazwę i możliwości kontenera inicjowania:
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.initContainers[0].name}{"\t"}{.spec.initContainers[0].securityContext.capabilities}{"\n"}{end}'Oczekiwane dane wyjściowe powinny być wyświetlane
istio-initz możliwościami sieci: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"]}