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:
Veri düzlemindeki ACK kümesine bağlanacak şekilde yapılandırılmış kubectl
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.
-
Aşağıdaki YAML dosyasını
httpbin-application.yamlolarak 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.
-
Bildirimi uygulayın:
kubectl apply -f httpbin-application.yaml -
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.
-
Aşağıdaki YAML dosyasını
sleep.yamlolarak 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 -
Sleep hizmetini dağıtın:
kubectl apply -f sleep.yaml -n default -
Sleep pod'unda bir kabuk açın:
kubectl exec -it deploy/sleep -- sh -
Kumaş içinden HTTPBin'e bir istek gönderin:
curl -I http://httpbin:8000/headersBeklenen çı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: 1server: envoyiçeren bir200 OKyanı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