Tüm Ürünler
Search
Belge Merkezi

Alibaba Cloud Service Mesh:Deploy the HTTPBin application

Son Güncelleme:Oct 07, 2026

HTTPBin, web hata ayıklama için kullanılan açık kaynaklı bir HTTP test aracıdır. HTTPBin'i hizmet kumaşınıza dağıttıktan sonra, basit HTTP uç noktaları aracılığıyla istek yöntemlerini, üst bilgileri ve yetkilendirme ayrıntılarını inceleyebilirsiniz.

Bu konuda, HTTPBin'in bir ACK kümesine nasıl dağıtılacağı, dış trafiğin bir ASM giriş ağ geçidi üzerinden buna nasıl yönlendirileceği ve kurulumun nasıl doğrulanacağı açıklanmaktadır.

Önkoşullar

Başlamadan önce aşağıdakilere sahip olduğunuzdan emin olun:

1. Adım: HTTPBin'i ACK kümesine dağıtın

HTTPBin uygulaması, veri düzlemindeki Container Service for Kubernetes (ACK) kümesinde çalışır.

  1. Aşağıdaki YAML dosyasını httpbin-application.yaml olarak kaydedin.

    Bu bildirim üç kaynak oluşturur: bir ServiceAccount, 8000 bağlantı noktasını açan bir Service ve HTTPBin konteynerini çalıştıran tek çoğaltmalı bir Deployment.

    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. Bildirimi uygulayın:

    kubectl apply -f httpbin-application.yaml
  3. HTTPBin pod'unun çalıştığını doğrulayın:

    kubectl get pods -l app=httpbin

2. Adım: Trafik yönlendirmeyi yapılandırın

Dış trafiği HTTPBin'e yönlendirmek için iki Istio kaynağı oluşturun: Kumaş kenarında gelen bağlantıları kabul eden bir Gateway ve eşleşen istekleri HTTPBin hizmetine ileten bir VirtualService.

Bir Istio ağ geçidi oluşturun

Gateway, giriş ağ geçidinin dinlediği bağlantı noktalarını, protokolleri ve ana bilgisayarları tanımlar. Aşağıdaki Gateway, tüm ana bilgisayarlar için 80 bağlantı noktasındaki HTTP trafiğini kabul eder.

Daha fazla bilgi için bkz. Istio ağ geçitlerini yönetin.

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

Sanal bir hizmet oluşturun

VirtualService, Gateway'e bağlanır ve yönlendirme kurallarını tanımlar. Aşağıdaki VirtualService, tüm HTTP isteklerini httpbin.default.svc.cluster.local:8000 adresindeki HTTPBin hizmetine yönlendirir.

Daha fazla bilgi için bkz. Sanal hizmetleri yönetin.

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

3. Adım: Dağıtımı doğrulayın

HTTPBin'in doğru yanıt verdiğini onaylamak için giriş ağ geçidi üzerinden istekler gönderin.

Aşağıdaki komutlarda ${GATEWAY_IP} değerini ASM ağ geçidinin gerçek IP adresiyle değiştirin. Ağ geçidinin IP adresini elde etme hakkında daha fazla bilgi için bkz. Giriş ağ geçidinin IP adresini edinin.

HTTP durum kodlarını test edin

/status/<code> uç noktası, belirtilen HTTP durum kodunu döndürür. Ağ geçidinin istekleri doğru şekilde ilettiğini doğrulamak için bu uç noktayı kullanın.

# 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

Üst bilgi iletimini test edin

/headers uç noktası, istekte bulunan tüm üst bilgileri döndürür. Üst bilgilerin ağ geçidi ve sidecar proxy'lerinden bozulmadan geçtiğini doğrulamak için bu uç noktayı kullanın.

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

Yanıt gövdesi, test-header: test-value dahil olmak üzere tüm istek üst bilgilerini içerir.

(İsteğe bağlı) Sleep hizmeti ile doğrulayın

Yerel makinenizden curl kullanmaya alternatif olarak, kumaş içinde bir sleep pod'u dağıtın ve küme içinden istekler gönderin. Bu işlem, Envoy sidecar'ları aracılığıyla hizmetten hizmete bağlantıyı doğrular.

  1. Aşağıdaki YAML dosyasını sleep.yaml olarak kaydedin.

    ##################################################################################################
    # 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. Sleep hizmetini dağıtın:

    kubectl apply -f sleep.yaml -n default
  3. Sleep pod'unda bir kabuk açın:

    kubectl exec -it deploy/sleep -- sh
  4. Kumaş içinden HTTPBin'e bir istek gönderin:

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

    Beklenen çıktı:

    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

    server: envoy içeren bir 200 OK yanıtı, trafiğin Envoy sidecar'ından geçerek HTTPBin'e başarıyla ulaştığını doğrular.

Temizleme

Bu konuda oluşturulan tüm kaynakları kaldırmak için:

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