全部产品
Search
文档中心

服务网格 ASM:部署httpbin应用

更新时间:Jul 26, 2024

httpbin是一个用于测试的开源应用,常用于Web调试。部署该应用后,您可以方便地查看HTTP请求的Method、Header和授权等信息。本文介绍如何部署httpbin应用。

前提条件

操作步骤

  1. 在数据面集群中部署httpbin应用。

    1. 使用以下内容,创建httpbin-application.yaml

      展开查看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. 使用kubectl连接到ACK集群,执行以下命令,部署httpbin应用。

      kubectl apply -f httpbin-application.yaml
  2. 配置httpbin应用的流量规则。

    1. 使用以下内容,创建网关规则。具体操作,请参见管理网关规则

      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
    2. 使用以下内容,创建虚拟服务。具体操作,请参见管理虚拟服务

      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. 进行访问测试。

    请将下文命令中的${ASM网关IP}替换为实际的网关地址。关于如何获取网关地址,请参见获取入口网关地址

    1. 执行以下命令,访问httpbin的/status/200

      curl http://${ASM网关IP}/status/200 -v

      返回200 OK

    2. 执行以下命令,访问httpbin的/status/418

      curl http://${ASM网关IP}/status/418 -v

      返回418 Unknown

    3. 执行以下命令,访问httpbin的/status/403

      curl http://${ASM网关IP}/status/403 -v

      返回403 Forbidden

    4. 执行以下命令,访问httpbin的/headers

      curl http://${ASM网关IP}/headers -H test-header:test-value  -v

      Response会返回请求中携带的Header。

相关操作

您也可以通过在数据面集群部署sleep服务,并通过sleep服务去访问httpbin服务来验证httpbin服务已经部署成功。

  1. 使用以下内容,创建sleep.yaml。

    ##################################################################################################
    # 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应用。

    kubectl apply -f sleep.yaml -n default
  3. 执行以下命令,进入sleep Pod的sh终端。

    kubectl exec -it deploy/sleep -- sh
  4. 执行以下命令,向httpbin服务发送请求。

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

    预期输出:

    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

    返回200 OK,表明访问成功。httpbin服务已经正常部署。