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.
- 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. - 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
Azure Kubernetes Service