Поделиться через


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

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

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

Подсказка

Вы можете использовать Microsoft Copilot в Azure для развертывания Istio в кластерах AKS на портале Azure. Дополнительные сведения см. в статье "Работа с кластерами AKS эффективно с помощью Microsoft Copilot в Azure".

Перед началом

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

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

    az aks mesh get-revisions --location <location> -o table
    
  • В некоторых случаях CRD Istio от предыдущих установок могут не удаляться автоматически при деинсталляции. Убедитесь, что существующие CRD-файлы Istio удаляются:

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

    Рекомендуется также очистить другие ресурсы от самостоятельно управляемых установок Istio, таких как ClusterRoles, MutatingWebhookConfigurations и ValidatingWebhookConfigurations.

  • Обратите внимание, что если вы решили использовать какие-либо istioctl команды CLI, необходимо включить флаг, чтобы указать на установку надстройки Istio: --istioNamespace aks-istio-system

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

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.

Примечание.

Если вам нужны istiod модули pod шлюза и входящего трафика, запланированные на определенные узлы, можно использовать системные узлы AKS или azureservicemesh/istio.replica.preferred метку узла. Pod имеют привязанности к узлам с взвешанным предпочтением 100 для системных узлов AKS, помеченных kubernetes.azure.com/mode: system, и взвешанным предпочтением 50 для узлов, помеченных azureservicemesh/istio.replica.preferred: true.

Выбор ревизии

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

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

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

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

Чтобы установить надстройку 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 \
    --generate-ssh-keys    

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

Следующий пример включает надстройку 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 (контрольной плоскости Istio) успешно работают:

kubectl get pods -n aks-istio-system

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

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

Включение внедрения сайдкара

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

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

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

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

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

Внимание

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

Значение по умолчанию istio-injection=enabled не будет работать и вызовет пропуск пространственной области при внедрении побочного модуля для добавки.

Для ручного внедрения сайдкара с помощью 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 pod -n namespace <pod name>

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

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

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

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

Примечание.

Кластерам, использующим HTTP прокси-сервер для доступа в Интернет по исходящему трафику, потребуется настроить Service Entry. Для получения инструкций по настройке см. поддержку прокси-сервера HTTP в Службе Azure Kubernetes

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

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

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

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

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