Todos os produtos
Search
Central de documentação

Alibaba Cloud Service Mesh:Implantar o aplicativo HTTPBin

Última atualização: Jun 28, 2026

O HTTPBin é uma ferramenta de teste HTTP de código aberto para depuração web. Após implantar o HTTPBin em sua service mesh, inspecione métodos de requisição, cabeçalhos e detalhes de autorização por meio de endpoints HTTP simples.

Este tópico descreve como implantar o HTTPBin em um cluster ACK, rotear tráfego externo para ele por um gateway de entrada ASM e verificar a configuração.

Pré-requisitos

Antes de começar, certifique-se de que:

Etapa 1: Implantar o HTTPBin no cluster ACK

O aplicativo HTTPBin executa no cluster Container Service for Kubernetes (ACK) no plano de dados.

  1. Salve o seguinte YAML como httpbin-application.yaml.

    Este manifesto cria três recursos: uma ServiceAccount, um Service que expõe a porta 8000 e um Deployment de réplica única com o contêiner 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 o manifesto:

    kubectl apply -f httpbin-application.yaml
  3. Verifique se o pod do HTTPBin está em execução:

    kubectl get pods -l app=httpbin

Etapa 2: Configure o roteamento de tráfego

Para rotear tráfego externo para o HTTPBin, crie dois recursos Istio: um Gateway que aceita conexões de entrada na borda da malha e um VirtualService que encaminha requisições correspondentes ao serviço HTTPBin.

Crie um gateway Istio

Um Gateway define as portas, os protocolos e os hosts nos quais o gateway de entrada escuta. O exemplo a seguir aceita tráfego HTTP na porta 80 para todos os hosts.

Para mais informações, consulte Gerencie gateways Istio.

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

Crie um serviço virtual

Um VirtualService vincula-se ao Gateway e define regras de roteamento. O exemplo a seguir roteia todas as requisições HTTP para o serviço HTTPBin em httpbin.default.svc.cluster.local:8000.

Para mais informações, consulte Gerencie serviços virtuais.

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

Etapa 3: Verifique a implantação

Envie requisições pelo gateway de entrada para confirme se o HTTPBin responde corretamente.

Substitua ${GATEWAY_IP} nos comandos a seguir pelo endereço IP real do gateway ASM. Para obter mais informações sobre como recuperar o endereço IP do gateway, consulte Obter o endereço IP do gateway de entrada.

Testar códigos de status HTTP

O endpoint /status/<code> retorna o código de status HTTP especificado. Use-o para validar se o gateway encaminha requisições corretamente.

# 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

Testar o encaminhamento de cabeçalhos

O endpoint /headers retorna todos os cabeçalhos incluídos na requisição. Use-o para verifique se os cabeçalhos passam intactos pelo gateway e pelos proxies sidecar.

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

O corpo da resposta contém todos os cabeçalhos da requisição, incluindo test-header: test-value.

(Opcional) Verifique com o serviço sleep

Como alternativa ao uso de curl na máquina local, implante um pod sleep dentro da malha e envie requisições de dentro do cluster. Essa ação confirma a conectividade serviço a serviço pelos sidecars Envoy.

  1. Salve o seguinte 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. Implante o serviço sleep:

    kubectl apply -f sleep.yaml -n default
  3. Abra um shell no pod sleep:

    kubectl exec -it deploy/sleep -- sh
  4. Envie uma requisição para o HTTPBin de dentro da malha:

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

    Saída esperada:

    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

    Uma resposta 200 OK com server: envoy confirma que o tráfego flui pelo sidecar Envoy e chega ao HTTPBin com sucesso.

Limpeza

Para remover todos os recursos criados neste tópico:

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