Развертывание надстройки сетки служб на основе Istio для службы Azure Kubernetes

В этой статье показано, как установить надстройку сетки службы на основе Istio для кластера Служба Azure Kubernetes (AKS).

Дополнительные сведения о надстройке сетки Istio и сетке служб см. в надстройке сетки на основе Istio для Служба Azure Kubernetes.

Подготовка к работе

  • Для надстройки требуется установка Azure CLI версии 2.57.0 или более поздней. Чтобы проверить версию, можно запустить az --version . Чтобы выполнить установку или обновление, см. сведения в статье Установка Azure CLI.

  • Чтобы найти сведения о версиях кластеров AKS, доступных в регионе и их совместимости с версиями кластера AKS, используйте команду az aks mesh get-revisions:

    az aks mesh get-revisions --location <location> -o table
    

Настройка переменных среды

export CLUSTER=<cluster-name>
export RESOURCE_GROUP=<resource-group-name>
export LOCATION=<location>

Установка надстройки Istio

В этом разделе описано, как установить надстройку Istio во время создания кластера или включить для существующего кластера с помощью Azure CLI. Если вы хотите установить надстройку с помощью Bicep, ознакомьтесь с установкой кластера AKS с надстройкой сетки службы Istio с помощью Bicep. Дополнительные сведения об определении ресурсов Bicep для кластера AKS см . в справочнике по Bicep managedCluster.

Выбор редакции

Если надстройка включена без указания редакции, для вас устанавливается поддерживаемая по умолчанию редакция.

Чтобы указать редакцию, выполните следующие действия.

  1. az aks mesh get-revisions Используйте команду, чтобы проверка какие редакции доступны для разных версий кластера AKS в регионе.
  2. На основе доступных редакций можно включить --revision asm-X-Y флаг (например --revision asm-1-20, ) в команду включения, используемую для установки сетки.

Установка сетки во время создания кластера

Чтобы установить надстройку Istio при создании кластера, используйте --enable-azure-service-mesh или--enable-asm параметр.

az group create --name ${RESOURCE_GROUP} --location ${LOCATION}

az aks create \
--resource-group ${RESOURCE_GROUP} \
--name ${CLUSTER} \
--enable-asm

Установка сетки для существующего кластера

Следующий пример включает надстройку Istio для существующего кластера AKS:

Внимание

Невозможно включить надстройку Istio в существующем кластере, если надстройка OSM уже находится в кластере. Удалите надстройку OSM перед установкой надстройки Istio. Дополнительные сведения см. в статье об удалении надстройки OSM из кластера AKS. Надстройка Istio может быть включена только в кластерах AKS версии >= 1.23.

az aks mesh enable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}

Проверка установки

Чтобы проверить установку надстройки Istio в кластере, выполните следующую команду:

az aks show --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}  --query 'serviceMeshProfile.mode'

Подтвердите выходные данные Istio.

Используйте az aks get-credentials учетные данные для кластера AKS:

az aks get-credentials --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}

Используйте kubectl для проверки успешности istiod выполнения модулей pod (плоскости управления Istio):

kubectl get pods -n aks-istio-system

Убедитесь, что модуль istiod pod имеет состояние Running. Например:

NAME                               READY   STATUS    RESTARTS   AGE
istiod-asm-1-18-74f7f7c46c-xfdtl   1/1     Running   0          2m

Включение внедрения бокового автомобиля

Чтобы автоматически установить боковую панель в любые новые модули pod, вам потребуется заметить пространства имен с меткой редакции, соответствующей версии плоскости управления, установленной в настоящее время.

Если вы не уверены, какая редакция установлена, используйте:

az aks show --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}  --query 'serviceMeshProfile.istio.revisions'

Примените метку редакции:

kubectl label namespace default istio.io/rev=asm-X-Y

Внимание

Метка по умолчанию istio-injection=enabled не работает. Явное управление версиями, соответствующее редакции плоскости управления (например, istio.io/rev=asm-1-18требуется).

Для ручного внедрения бокового автомобиля istioctl kube-injectнеобходимо указать дополнительные параметры для istioNamespace (-i) и revision (-r). Например:

kubectl apply -f <(istioctl kube-inject -f sample.yaml -i aks-istio-system -r asm-X-Y) -n foo

Внедрение бокового автомобиля триггера

Вы можете развернуть пример приложения, предоставленного для тестирования, или активировать внедрение боковой кареты для существующих рабочих нагрузок.

Существующие приложения

Если у вас есть приложения, которые нужно добавить в сетку, убедитесь, что их пространства имен помечены как на предыдущем шаге, а затем перезапустите их развертывания, чтобы активировать внедрение бокового автомобиля:

kubectl rollout restart -n <namespace> <deployment name>

Убедитесь, что внедрение бокового istio-proxy автомобиля выполнено успешно, убедившись, что все контейнеры готовы и ищут контейнер в выходных kubectl describe данных, например:

kubectl describe pod -n namespace <pod name>

Контейнер — это istio-proxy боковая машина Envoy. Теперь приложение является частью плоскости данных.

Разверните пример приложения

Используйте kubectl apply для развертывания примера приложения в кластере:

kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.18/samples/bookinfo/platform/kube/bookinfo.yaml

Убедитесь, что в кластере создаются несколько развертываний и служб. Например:

service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created

Используйте kubectl get services для проверки успешности создания служб:

kubectl get services

Убедитесь, что развернуты следующие службы:

NAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.0.180.193   <none>        9080/TCP   87s
kubernetes    ClusterIP   10.0.0.1       <none>        443/TCP    15m
productpage   ClusterIP   10.0.112.238   <none>        9080/TCP   86s
ratings       ClusterIP   10.0.15.201    <none>        9080/TCP   86s
reviews       ClusterIP   10.0.73.95     <none>        9080/TCP   86s
kubectl get pods
NAME                              READY   STATUS    RESTARTS   AGE
details-v1-558b8b4b76-2llld       2/2     Running   0          2m41s
productpage-v1-6987489c74-lpkgl   2/2     Running   0          2m40s
ratings-v1-7dc98c7588-vzftc       2/2     Running   0          2m41s
reviews-v1-7f99cc4496-gdxfn       2/2     Running   0          2m41s
reviews-v2-7d79d5bd5d-8zzqd       2/2     Running   0          2m41s
reviews-v3-7dbcdcbc56-m8dph       2/2     Running   0          2m41s

Убедитесь, что все модули pod имеют состояние Running с 2 контейнерами в столбце READY . Второй контейнер (istio-proxy) добавляется к каждому модулю pod— это боковая машина Envoy, внедренная Istio, а другая — контейнер приложения.

Чтобы протестировать это пример приложения для входящего трафика, проверка дальнейшие действия.

Удаление ресурсов

Используется kubectl delete для удаления примера приложения:

kubectl delete -f https://raw.githubusercontent.com/istio/istio/release-1.18/samples/bookinfo/platform/kube/bookinfo.yaml

Если вы не планируете включить входящий трафик Istio в кластере и хотите отключить надстройку Istio, выполните следующую команду:

az aks mesh disable --resource-group ${RESOURCE_GROUP} --name ${CLUSTER}

Внимание

Отключение надстройки сетки службы полностью удаляет плоскость управления Istio из кластера.

Istio CustomResourceDefintions (CRD) не удаляются по умолчанию. Чтобы очистить их, используйте:

kubectl delete crd $(kubectl get crd -A | grep "istio.io" | awk '{print $1}')

Используется az group delete для удаления кластера и связанных ресурсов:

az group delete --name ${RESOURCE_GROUP} --yes --no-wait

Следующие шаги