Introducción
Una forma práctica de administrar los microservicios de una aplicación nativa de la nube es automatizar las funciones de red de la aplicación.
Istio es una plataforma de malla de servicio configurable que actúa como un plano de control, distribuyendo la configuración a servidores proxy y puertas de enlace sidecar. Es una opción popular para conectar, monitorear y asegurar contenedores en un clúster de Kubernetes.
En este tutorial, aprenderá a instalar Istio, implementar una aplicación de prueba y configurar su clúster de Kubernetes para que funcione con la plataforma.
Requisitos previos
- Un clúster de Kubernetes (o minikube)
- herramienta de línea de comandos kubectl
Descargue la última versión de Istio
Para descargar la versión más reciente de Istio, vaya a la página de versiones de Istio en GitHub.
Alternativamente, los usuarios de Linux pueden usar curl
para descargar y extraer la última versión automáticamente:
curl -L https://istio.io/downloadIstio | sh -
El comando extrae los archivos de instalación a la carpeta llamada istio-[version]
:
Para descargar una versión anterior de Istio, use curl
, pero especifique la versión y la arquitectura del procesador utilizando la siguiente sintaxis:
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.6.8 TARGET_ARCH=x86_64 sh -
Guía de instalación de Istio
1. Inicie su clúster de Kubernetes. Este artículo usa minikube:
minikube start
2. A continuación, inicie la instalación de Istio moviéndose a la carpeta con los archivos extraídos:
cd istio-1.9.2
3. El bin/
directorio contiene istioctl
binario del cliente. En Linux, agregue el cliente a su ruta escribiendo:
export PATH=$PWD/bin:$PATH
La variable configurada de esta manera solo dura hasta que finaliza la sesión de shell actual. Para establecer la variable de forma permanente, lea cómo establecer variables de entorno en Linux.
4. Usa el istioctl
herramienta para iniciar el proceso de instalación:
istioctl install --set profile=demo -y
El resultado confirma la instalación exitosa:
5. Istio puede inyectar automáticamente proxies sidecar de Envoy al implementar la aplicación. Para habilitar esto, use kubectl
para agregar una etiqueta de espacio de nombres que contenga esta instrucción:
kubectl label namespace default istio-injection=enabled
Esto concluye el proceso de instalación de Istio.
Implementación de prueba a través de la aplicación Bookinfo
El archivo de instalación de Istio contiene todos los archivos necesarios para implementar la aplicación de muestra llamada Bookinfo .
1. Comienza aplicando el bookinfo.yaml
archivo usando kubectl
:
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
El sistema crea varias implementaciones, servicios y pods:
2. Compruebe los servicios en ejecución:
kubectl get services
3. Compruebe si los pods están listos:
kubectl get pods
A medida que suben los pods, Istio despliega sidecars junto con ellos:
4. Espera hasta que aparezca READY
la etiqueta de cada grupo es 2/2
. Luego ejecute el siguiente comando para ver si la aplicación está sirviendo páginas HTML correctamente:
kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o ""
El resultado debe ser la etiqueta de título de la página, junto con el título mismo:
5. El siguiente paso es abrir la aplicación al tráfico externo. Aplicar bookinfo-gateway.yaml
archivo de las samples
carpeta:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
El resultado confirma que la aplicación se asoció correctamente con la puerta de enlace de Istio:
6. Usa istioctl
para analizar la configuración y verificar posibles problemas:
istioctl analyze
Si el sistema no encuentra problemas, se muestra el siguiente mensaje:
7. Para acceder a la puerta de enlace configurada en el paso anterior, configure las variables de ingreso. Primero, exporta INGRESS_PORT
:
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
8. Ahora, repita el proceso para SECURE_INGRESS_PORT
:
export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
9. Utilice el comando echo para comprobar si los puertos se han asignado correctamente:
echo "$INGRESS_PORT" && echo "$SECURE_INGRESS_PORT"
La salida muestra los números de puerto:
10. Exporte el INGRESS_HOST
variables:
export INGRESS_HOST=$(minikube ip)
11. Comprueba la variable con echo
:
echo "$INGRESS_HOST"
12. Para dirigir el tráfico a Istio Ingress Gateway, abra una nueva ventana de terminal y escriba el siguiente comando:
minikube tunnel
Minikube ahora sirve como balanceador de carga para Istio. El resultado muestra minikube dirigiendo el tráfico:
13. Vuelva a la ventana de terminal anterior y exporte el GATEWAY_URL
variable, que consiste en INGRESS_HOST
y INGRESS_PORT
Variables:
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
14. Usa echo
para ver la dirección IP completa y el número de puerto:
echo "$GATEWAY_URL"
15. Escriba el siguiente comando para ver la dirección externa de la aplicación:
echo http://$GATEWAY_URL/productpage
16. Copie la dirección obtenida en el paso anterior y péguela en un navegador web. El sitio web de Bookinfo se carga correctamente:
Configurar un clúster de Kubernetes para Istio
Istio viene con una serie de complementos para los servicios populares de Istio, como el panel de control de Grafana, el software de seguimiento de transacciones de Jaeger, el extractor de métricas de Prometheus y la consola de administración de Kiali.
1. Instale esos complementos aplicando los samples/addons
carpeta:
kubectl apply -f samples/addons
2. Ahora, cree un recurso de Kubernetes Ingress para cada uno de los complementos. Haga esto pegando lo siguiente en un yaml
archivo.
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: istio-system
namespace: istio-system
annotations:
kubernetes.io/ingress.class: istio
spec:
rules:
- host: my-istio-dashboard.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: grafana
servicePort: 3000
- host: my-istio-tracing.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: tracing
servicePort: 9411
- host: my-istio-logs-database.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: prometheus
servicePort: 9090
- host: my-kiali.io
http:
paths:
- path: /
pathType: Prefix
backend:
serviceName: kiali
servicePort: 20001
3. Guarde el archivo y aplique la configuración con kubectl:
kubectl apply -f [file-name]
Los complementos ahora están configurados y listos para usarse.