Todos los productos
Search
Centro de documentos

Alibaba Cloud Service Mesh:Despliegue de la aplicación HTTPBin

Última actualización: Sep 09, 2026

HTTPBin es una herramienta de código abierto para pruebas HTTP que facilita la depuración web. Después de desplegar HTTPBin en su service mesh, puede inspeccionar los métodos de solicitud, los encabezados y los detalles de autorización mediante endpoints HTTP sencillos.

Este tema describe cómo desplegar HTTPBin en un clúster ACK, enrutar el tráfico externo hacia esta aplicación a través de una puerta de enlace de entrada de ASM y comprobar la configuración.

Requisitos previos

Antes de empezar, asegúrese de contar con lo siguiente:

Paso 1: Desplegar HTTPBin en el clúster ACK

La aplicación HTTPBin se ejecuta en el clúster de Container Service for Kubernetes (ACK) del plano de datos.

  1. Guarde el siguiente contenido YAML como httpbin-application.yaml.

    Este manifiesto crea tres recursos: un ServiceAccount, un Service que expone el puerto 8000 y un Deployment de una sola réplica que ejecuta el contenedor HTTPBin.

    httpbin-application.yaml

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: httpbin
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: httpbin
      labels:
        app: httpbin
        service: httpbin
    spec:
      ports:
      - name: http
        port: 8000
        targetPort: 80
      selector:
        app: httpbin
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: httpbin
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: httpbin
          version: v1
      template:
        metadata:
          labels:
            app: httpbin
            version: v1
        spec:
          serviceAccountName: httpbin
          containers:
          - image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/httpbin:0.1.0
            imagePullPolicy: IfNotPresent
            name: httpbin
            ports:
            - containerPort: 80
  2. Aplique el manifiesto:

    kubectl apply -f httpbin-application.yaml
  3. Compruebe que el pod de HTTPBin se está ejecutando:

    kubectl get pods -l app=httpbin

Paso 2: Configurar el enrutamiento de tráfico

Para enrutar el tráfico externo hacia HTTPBin, cree dos recursos de Istio: un Gateway que acepte conexiones entrantes en el borde de la malla y un VirtualService que reenvíe las solicitudes coincidentes al servicio HTTPBin.

Crear una puerta de enlace de Istio

Un recurso Gateway define los puertos, protocolos y hosts en los que escucha la puerta de enlace de entrada. El siguiente Gateway acepta tráfico HTTP en el puerto 80 para todos los hosts.

Para obtener más información, consulte Manage Istio gateways.

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: httpbin
  namespace: default
spec:
  selector:
    istio: ingressgateway
  servers:
    - hosts:
        - '*'
      port:
        name: test
        number: 80
        protocol: HTTP

Crear un servicio virtual

Un recurso VirtualService se vincula al Gateway y define las reglas de enrutamiento. El siguiente VirtualService enruta todas las solicitudes HTTP al servicio HTTPBin en httpbin.default.svc.cluster.local:8000.

Para obtener más información, consulte Manage virtual services.

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: httpbin-vs
  namespace: default
spec:
  gateways:
    - httpbin
  hosts:
    - '*'
  http:
    - name: test
      route:
        - destination:
            host: httpbin.default.svc.cluster.local
            port:
              number: 8000

Paso 3: Comprobar el despliegue

Envíe solicitudes a través de la puerta de enlace de entrada para confirmar que HTTPBin responde correctamente.

Sustituya ${GATEWAY_IP} en los siguientes comandos por la dirección IP real de la puerta de enlace de ASM. Para conocer cómo obtener la dirección IP de la puerta de enlace, consulte Obtain the IP address of the ingress gateway.

Probar códigos de estado HTTP

El endpoint /status/<code> devuelve el código de estado HTTP especificado. Úselo para validar que la puerta de enlace reenvía las solicitudes correctamente.

# Expect: 200 OK
curl http://${GATEWAY_IP}/status/200 -v

# Expect: 418 Unknown
curl http://${GATEWAY_IP}/status/418 -v

# Expect: 403 Forbidden
curl http://${GATEWAY_IP}/status/403 -v

Probar el reenvío de encabezados

El endpoint /headers devuelve todos los encabezados incluidos en la solicitud. Úselo para comprobar que los encabezados atraviesan intactos la puerta de enlace y los proxies sidecar.

curl http://${GATEWAY_IP}/headers -H "test-header: test-value" -v

El cuerpo de la respuesta contiene todos los encabezados de la solicitud, incluido test-header: test-value.

(Opcional) Comprobación con el servicio sleep

Como alternativa a curl desde su computadora local, despliegue un pod sleep dentro de la malla y envíe solicitudes desde el interior del clúster. Esto confirma la conectividad entre servicios a través de los sidecars de Envoy.

  1. Guarde el siguiente contenido YAML como sleep.yaml.

    ##################################################################################################
    # Sample sleep service
    ##################################################################################################
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: sleep
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: sleep
      labels:
        app: sleep
        service: sleep
    spec:
      ports:
      - port: 80
        name: http
      selector:
        app: sleep
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: sleep
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: sleep
      template:
        metadata:
          labels:
            app: sleep
        spec:
          terminationGracePeriodSeconds: 0
          serviceAccountName: sleep
          containers:
          - name: sleep
            image: registry.cn-hangzhou.aliyuncs.com/acs/curl:8.1.2
            command: ["/bin/sleep", "infinity"]
            imagePullPolicy: IfNotPresent
            volumeMounts:
            - mountPath: /etc/sleep/tls
              name: secret-volume
          volumes:
          - name: secret-volume
            secret:
              secretName: sleep-secret
              optional: true
  2. Despliegue el servicio sleep:

    kubectl apply -f sleep.yaml -n default
  3. Abra un shell en el pod sleep:

    kubectl exec -it deploy/sleep -- sh
  4. Envíe una solicitud a HTTPBin desde el interior de la malla:

    curl -I http://httpbin:8000/headers

    Resultado esperado:

    HTTP/1.1 200 OK
    server: envoy
    date: Tue, 26 Dec 2023 07:23:49 GMT
    content-type: application/json
    content-length: 353
    access-control-allow-origin: *
    access-control-allow-credentials: true
    x-envoy-upstream-service-time: 1

    Una respuesta 200 OK con server: envoy confirma que el tráfico fluye a través del sidecar de Envoy y llega correctamente a HTTPBin.

Limpieza

Para eliminar todos los recursos creados en este tema:

kubectl delete -f httpbin-application.yaml
kubectl delete gateway httpbin -n default
kubectl delete virtualservice httpbin-vs -n default

# If you deployed the sleep service
kubectl delete -f sleep.yaml -n default