Una puerta de enlace serverless de Service Mesh (ASM) es un nuevo tipo de puerta de enlace que proporciona ASM. Estas puertas de enlace le ayudan a manejar picos de tráfico para mejorar la estabilidad de su sistema y mantener bajos los costos de cómputo. En comparación con las puertas de enlace de ASM que se ejecutan en clústeres de Container Service for Kubernetes (ACK) del plano de datos, las puertas de enlace serverless de ASM ofrecen mayor estabilidad, alta elasticidad y menor costo. Además, se despliegan de forma serverless y ASM las gestiona directamente. Por lo tanto, cuentan con alta disponibilidad porque no dependen de clústeres de ACK. Este tema describe cómo usar las puertas de enlace serverless de ASM y presenta los registros y métricas relacionados con ellas.
Requisitos previos
An ACK cluster is added to your Una instancia de ASM cuya versión sea 1.18.0.147 o posterior.
An application is deployed in the cluster that is added to the ASM instance.
Escenarios
Las puertas de enlace serverless de ASM le ayudan a manejar picos de tráfico para mejorar la estabilidad de su sistema y mantener bajos los costos de cómputo. Se usan comúnmente en los siguientes escenarios:
Para servicios en línea con fluctuaciones evidentes de tráfico, como educación en línea y comercio electrónico, utilice estas puertas de enlace para manejar los picos de tráfico. Gracias a la arquitectura serverless, puede reducir significativamente la cantidad de recursos fijos y disminuir los costos de cómputo.
Cuando se agregan varios clústeres a una instancia de ASM, por ejemplo, dos clústeres de ACK, las puertas de enlace serverless de ASM se despliegan de forma independiente a cualquier clúster específico. Esto proporciona alta disponibilidad.
Paso 1: Cree una puerta de enlace de entrada serverless de ASM
Actualmente, solo puede crear una puerta de enlace serverless de ASM mediante un archivo YAML. A diferencia de una puerta de enlace estándar de ASM que se ejecuta en un clúster de ACK del plano de datos, la versión serverless requiere la anotación asm.alibabacloud.com/managed-by-asm: 'true' y no necesita un ID de clúster de ACK. Para recopilar métricas, use la anotación asm.alibabacloud.com/export-metrics y exporte las métricas de la puerta de enlace a un clúster de ACK de destino en el plano de datos.
Inicie sesión en la consola de ASM. En el panel de navegación izquierdo, seleccione .
En la página Mesh Management, haga clic en el nombre de la instancia de ASM. En el panel de navegación izquierdo, seleccione .
-
En la página Ingress Gateway, haga clic en Create from YAML. Introduzca un nombre para la puerta de enlace, utilice la siguiente configuración YAML y luego haga clic en Create.
apiVersion: istio.alibabacloud.com/v1beta1 kind: IstioGateway metadata: annotations: asm.alibabacloud.com/managed-by-asm: 'true' asm.alibabacloud.com/export-metrics: 'ack-cluster-id' name: ingressgateway namespace: istio-system spec: gatewayType: ingress dnsPolicy: ClusterFirst externalTrafficPolicy: Local hostNetwork: false ports: - name: http port: 80 protocol: TCP targetPort: 80 - name: https port: 443 protocol: TCP targetPort: 443 replicaCount: 1 resources: limits: cpu: '2' memory: 2G requests: cpu: 200m memory: 256Mi rollingMaxSurge: 100% rollingMaxUnavailable: 25% runAsRoot: true serviceType: LoadBalancerNota: La puerta de enlace serverless de ASM que creó admite servicios de tipo LoadBalancer y ClusterIP. Si establece el parámetro serviceType en ClusterIP, asegúrese de que los pods del cliente y de la puerta de enlace tengan conectividad entre sí. Por ejemplo, de manera predeterminada, los pods dentro de la misma red privada virtual (VPC) pueden comunicarse mediante el complemento Terway.
Paso 2: Cree una regla de tráfico
-
Cree un nombre de dominio HTTP.
Inicie sesión en la consola de ASM. En el panel de navegación izquierdo, seleccione .
En la página Mesh Management, haga clic en el nombre de la instancia de ASM. En el panel de navegación izquierdo, seleccione .
En la página Ingress Gateway, haga clic en la puerta de enlace de destino. En el panel de navegación izquierdo de la puerta de enlace, haga clic en Domain/Certificate. En la pestaña Domain, haga clic en Create.
En el panel Add domain, establezca Domain en *, Protocol en HTTP, Port Name en http y port en 80. Luego, haga clic en Create.
-
Importe el servicio productpage.
En el panel de navegación izquierdo de la puerta de enlace, haga clic en Upstream Service y luego en Import service.
En el panel Import service, seleccione el espacio de nombres default, elija productpage, haga clic en el ícono
y luego en Submit.
-
Cree una regla de enrutamiento.
En el panel de navegación izquierdo de la puerta de enlace, haga clic en Route management y luego en Create.
En el paso set route detail, establezca route type en http, Namespaces en default y Route Name en productpage. En la sección Matching Rules, configure matchRules como Prefix y Content como /. Después, haga clic en Next.
En el paso set route destination, establezca select upstream service en productpage y haga clic en Next.
En el paso Advanced Options, haga clic en Create.
Paso 3: Acceda al servicio productpage a través de la puerta de enlace serverless de ASM
En la barra de direcciones de su navegador, introduzca {Gateway IP address}/productpage para consultar la interfaz de usuario de la aplicación. Para obtener la dirección IP de la puerta de enlace, consulte Obtain the IP address of an ingress gateway.
Paso 4: Configure la función de recopilación de registros de acceso de la puerta de enlace serverless de ASM
Si configura la función de recopilación de registros de acceso, la puerta de enlace se reiniciará. Se recomienda realizar esta operación fuera del horario de mayor demanda.
Inicie sesión en la consola de ASM. En el panel de navegación izquierdo, seleccione .
En la página Mesh Management, haga clic en el nombre de la instancia de ASM. En el panel de navegación izquierdo, seleccione .
-
En la página Ingress Gateway, busque la puerta de enlace de destino y haga clic en View YAML en la columna Actions. En el editor YAML, agregue la anotación
asm.alibabacloud.com/aliyun-logs-project: k8s-log-****para especificar un proyecto de Log Service.En este ejemplo, los registros de acceso de la puerta de enlace serverless de ASM se recopilan en el proyecto mesh-log-c4e1bbed247634d0482000d94e947****. El siguiente bloque de código muestra la configuración de ejemplo:
Haga clic en OK para actualizar la puerta de enlace serverless.
Paso 5: Configure el acceso mediante HTTPS
-
Ejecute los siguientes comandos para generar un certificado de autoridad certificadora (CA).
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization" openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt -
Configure el certificado.
Inicie sesión en la consola de ASM. En el panel de navegación izquierdo, seleccione .
En la página Mesh Management, haga clic en el nombre de la instancia de ASM. En el panel de navegación izquierdo, seleccione .
-
En la página Certificate Management, haga clic en Create. En el panel Certificate Information, configure los parámetros y haga clic en OK.
Parámetro
Descripción
Name
El nombre del certificado. Para este ejemplo, introduzca myexample-credential.
Public Key Certificate
El documento electrónico que demuestra la validez de la clave pública. Para este ejemplo, introduzca el contenido del archivo aliyun.com.crt generado en substep 1 in Step 5.
Private Key
La clave privada. Para este ejemplo, introduzca el contenido del archivo aliyun.com.key generado en substep 1 in Step 5.
-
Cree un nombre de dominio HTTPS.
En el panel de navegación izquierdo, haga clic en Ingress Gateway. Haga clic en la puerta de enlace de destino. En el panel de navegación izquierdo de la puerta de enlace, haga clic en Domain/Certificate. En la pestaña Domain, haga clic en Create.
En el panel Add domain, establezca Domain en *, Protocol en HTTPS, Port Name en https y port en 443. Para Certificate, seleccione myexample-credential. Marque Secure connections with standard TLS semantics. y luego haga clic en Create.
-
Ejecute el siguiente comando para acceder a la puerta de enlace serverless de ASM mediante HTTPS:
curl -k -H Host:aliyun.com --resolve aliyun.com:443:{IP address of the desired ASM serverless gateway} https://aliyun.com/productpage -I
Paso 6: Consulte los registros de acceso de la puerta de enlace serverless de ASM
Inicie sesión en la consola de Simple Log Service.
-
En el área Projects, haga clic en el nombre del logstore de destino (el que configuró en Step 4.1). En la barra de navegación izquierda, haga clic en el ícono
(Log Storage). En la lista Logstore, haga clic en mesh-ingress-log. En el cuadro de búsqueda, introduzca productpage y luego haga clic en Search & Analyze.Los resultados de la consulta muestran los registros de acceso de
istio-ingressgateway. En el campocontentde una entrada de registro, un valor deroute_nameigual aproductpagey unresponse_codede503indican que la puerta de enlace devolvió una respuesta 503 para esa ruta.
Preguntas frecuentes
¿Cómo exporto las métricas de una puerta de enlace serverless de ASM?
Asegúrese de que la generación y recopilación de métricas estén habilitadas en ASM. Esto le permitirá consultar el panel de métricas en la página . Para más información, consulte Collect metrics to Managed Service for Prometheus.
-
En el archivo YAML de la puerta de enlace serverless, agregue la anotación
asm.alibabacloud.com/export-metrics: ${ack-cluster-id}para exportar las métricas.Esta función solo está disponible para instancias de ASM con versión 1.18.0.147 o posterior. Para más información sobre cómo actualizar una instancia de ASM, consulte Upgrade an ASM instance.
Después de agregar la anotación asm.alibabacloud.com/export-metrics: ${ack-cluster-id}, los servicios y endpoints de la puerta de enlace serverless de ASM se sincronizan con el clúster de ACK especificado. Posteriormente, solo necesita configurar el endpoint para la recopilación de datos en Managed Service for Prometheus.
-
En la consola de Application Real-Time Monitoring Service (ARMS), configure el endpoint para la recopilación de datos.
Inicie sesión en la consola de ARMS.
En el panel de navegación izquierdo, seleccione . En la esquina superior izquierda, seleccione la región de destino.
En la página Instances, haga clic en el nombre de la instancia de Prometheus. En el panel de navegación izquierdo, haga clic en Settings.
-
En la pestaña Settings de la página Settings, haga clic en Edit Prometheus.yaml, agregue la siguiente configuración y luego haga clic en Save.
¿Qué hago si no puedo acceder a una aplicación de backend mediante una puerta de enlace serverless de ASM?
-
Compruebe que el security group del clúster de destino en el plano de datos no bloquee el tráfico proveniente de la puerta de enlace serverless de ASM.
-
Consulte el bloque CIDR del vSwitch de su instancia de ASM.
Inicie sesión en la consola de ASM. En el panel de navegación izquierdo, seleccione .
En la página Mesh Management, haga clic en el nombre de la instancia de ASM. En el panel de navegación izquierdo, seleccione .
En la página Basic Information, haga clic en el enlace situado a la derecha de vSwitch. En la página de detalles del vSwitch, localice su bloque CIDR.
-
Revise el security group del clúster de destino en el plano de datos.
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Cluster Information.
En la página Cluster Information, haga clic en la pestaña Cluster Resources y luego en el enlace situado a la derecha de Security Group.
En la página de detalles del security group, revise las reglas de entrada. Asegúrese de que el bloque CIDR del vSwitch de su instancia de ASM y el puerto del pod de la aplicación de backend estén dentro del rango que definen dichas reglas.
-
Si se devuelven códigos de estado como 404 o 503, compruebe que las reglas de tráfico estén configuradas correctamente y que la aplicación de backend se ejecute sin problemas.