Partekatu honen bidez:


Implementar complemento de malla de servicios basado en Istio para Azure Kubernetes Service

En este artículo se muestra cómo instalar el complemento de malla de servicio basado en Istio para Azure Kubernetes Service clúster (AKS).

Para obtener más información sobre Istio y el complemento de malla de servicio, consulte Complemento de malla de servicio basado en Istio para Azure Kubernetes Service.

Antes de empezar

  • El complemento requiere tener instalada la versión 2.57.0 o posterior de la CLI de Azure. Puede ejecutar az --version para comprobar la versión. Para la instalación o la actualización, consulte Instalación de la CLI de Azure.

  • Para encontrar información sobre qué revisiones de complementos de Istio están disponibles en una región y su compatibilidad con las versiones del clúster de AKS, use el comando az aks mesh get-revisions.

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

Establecimiento de variables de entorno

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

Instalación del complemento de Istio

En esta sección se incluyen los pasos para instalar el complemento de Istio durante la creación del clúster o habilitarlo para un clúster existente mediante la CLI de Azure. Si quiere instalar el complemento usando Bicep, consulte la guía para instalar un clúster de AKS con el complemento de malla del servicio de Istio mediante Bicep. Para más información sobre la definición de recursos de Bicep para un clúster de AKS, consulte Referencia de managedCluster de Bicep.

Selección de revisión

Si se habilita el complemento sin especificar una revisión, se instalará automáticamente una revisión admitida predeterminada.

Para especificar una revisión, realice los pasos siguientes.

  1. Use el comando az aks mesh get-revisions para comprobar qué revisiones están disponibles para diferentes versiones del clúster de AKS en una región.
  2. En función de las revisiones disponibles, es posible incluir la marca --revision asm-X-Y (por ejemplo: --revision asm-1-20) en el comando enable que se use para la instalación de malla.

Instalación de malla durante la creación de clústeres

Para instalar el complemento de Istio al crear el clúster, use el parámetro --enable-azure-service-mesh o--enable-asm.

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

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

Instalación de malla para clústeres existentes

En el ejemplo siguiente se habilita el complemento Istio para un clúster de AKS existente:

Importante

No se puede habilitar el complemento de Istio en un clúster existente si ya hay un complemento de OSM en el clúster. Desinstale el complemento de OSM antes de instalar el complemento de Istio. Para más información, consulte desinstalación del complemento de OSM del clúster de AKS. El complemento de Istio solo se puede habilitar en clústeres de AKS de la versión >= 1.23.

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

Comprobación de instalación correcta

Para comprobar que el complemento de Istio está instalado en el clúster, ejecute el siguiente comando:

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

Confirme que la salida muestra Istio.

Use az aks get-credentials para las credenciales del clúster de AKS:

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

Use kubectl para comprobar que istiod los pods (plano de control de Istio) se ejecutan correctamente:

kubectl get pods -n aks-istio-system

Confirme que el pod istiod tiene un estado de Running. Por ejemplo:

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

Habilitación de la inserción de sidecar

Para instalar sidecar automáticamente en los pods nuevos, será necesario anotar los espacios de nombres con la etiqueta de revisión correspondiente a la revisión del plano de control instalada actualmente.

Si no estuviera seguro de qué revisión está instalada, use:

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

Aplique la etiqueta de revisión:

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

Importante

El etiquetado predeterminado istio-injection=enabled no funciona. Se requiere un control de versiones explícito que coincida con la revisión del plano de control (por ejemplo: istio.io/rev=asm-1-18).

Para la inyección manual de sidecar mediante istioctl kube-inject, debe especificar parámetros adicionales para istioNamespace (-i) y revision (-r). Por ejemplo:

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

Inyección de sidecar de desencadenador

Es posible implementar la aplicación de ejemplo proporcionada para pruebas o desencadenar la inserción de sidecar para cargas de trabajo existentes.

Aplicaciones existentes

Si tuviera aplicaciones existentes que se fueran a agregar a la malla, asegúrese de que los espacios de nombres estén etiquetados como en el paso anterior y, a continuación, reinicie las implementaciones para desencadenar la inserción de sidecar:

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

Compruebe que la inserción de sidecar se haya realizado correctamente asegurándose de que todos los contenedores estén listos y buscando el contenedor istio-proxy en la salida kubectl describe. Por ejemplo:

kubectl describe pod -n namespace <pod name>

El contenedor istio-proxy es el sidecar de Envoy. La aplicación ya forma parte del plano de datos.

Implementación de una aplicación de ejemplo

Use kubectl apply para implementar la aplicación de ejemplo en el clúster:

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

Nota:

Los clústeres que usan un proxy HTTP para el acceso saliente a Internet deberán configurar una entrada de servicio. Para obtener instrucciones de configuración, consulte Compatibilidad con proxy HTTP en Azure Kubernetes Service.

Confirme que se crean varias implementaciones y servicios en el clúster. Por ejemplo:

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

Use kubectl get services para comprobar que los servicios se crearon correctamente:

kubectl get services

Confirme que se implementaron los siguientes servicios:

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

Confirme que todos los pods tengan el estado de Running con dos contenedores en la columna READY. El segundo contenedor (istio-proxy) agregado a cada pod es el sidecar de Envoy insertado por Istio y el otro es el contenedor de aplicaciones.

Para probar esta aplicación de ejemplo con la entrada, consulte los pasos siguientes.

Eliminar recursos

Use kubectl delete para eliminar la aplicación de ejemplo:

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

Si no tiene previsto habilitar la entrada de Istio en el clúster y desea deshabilitar el complemento Istio, ejecute el siguiente comando:

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

Precaución

Al deshabilitar el complemento de malla de servicio, se quitará completamente el plano de control de Istio del clúster.

Los CRD de Istio CustomResourceDefintion no se eliminan de forma predeterminada. Para limpiarlos, use:

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

Use az group delete para eliminar el clúster y los recursos asociados:

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

Pasos siguientes