为ASM网关启用压缩

启用ASM网关的压缩能力后,将对HTTP请求的Response进行压缩,从而加快响应速度,降低流量消耗。本文介绍如何为ASM网关启用压缩。

前提条件

  • 已添加集群到ASM实例。具体操作,请参见添加集群到ASM实例

  • 已部署入口网关。具体操作,请参见创建入口网关

  • 如果您需要使用域名,则您的域名需要备案才能正常访问。

操作步骤

  1. 在ACK集群中部署Nginx。

    1. 使用以下内容,创建nginx.yaml文件。

      展开查看nginx.yaml

      apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
      kind: Deployment
      metadata:
        name: nginx-deployment
      spec:
        selector:
          matchLabels:
            app: nginx
        replicas: 1
        template:
          metadata:
            labels:
              app: nginx
              sidecarset-injected: "true"
          spec:
            containers:
            - name: nginx
              image: nginx:1.14.2
              ports:
              - containerPort: 80
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: nginx
      spec:
        ports:
          - name: http
            port: 80
            protocol: TCP
            targetPort: 80
        selector:
          app: nginx
        type: ClusterIP
    2. 执行以下命令,部署Nginx应用。

      kubectl apply -f nginx.yaml
  2. 创建虚拟服务和网关规则。

    1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

    2. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理

    3. 在网格详情页面左侧导航栏,选择流量管理中心 > 虚拟服务,然后在右侧页面,单击使用YAML创建

    4. 创建页面,选择目标命名空间,将以下内容复制到文本框,然后单击创建

      apiVersion: networking.istio.io/v1beta1
      kind: VirtualService
      metadata:
        name: nginx
        namespace: default
      spec:
        gateways:
          - nginx-gateway
        hosts:
          - '*'
        http:
          - match:
              - uri:
                  exact: /
            route:
              - destination:
                  host: nginx
                  port:
                    number: 80
    5. 在网格详情页面左侧导航栏,选择ASM网关 > 网关规则,然后在右侧页面,单击使用YAML创建

    6. 创建页面,选择目标命名空间,将以下内容复制到文本框,单击创建

      apiVersion: networking.istio.io/v1beta1
      kind: Gateway
      metadata:
        name: nginx-gateway
        namespace: default
      spec:
        selector:
          istio: ingressgateway
        servers:
          - hosts:
              - '*'
            port:
              name: http
              number: 80
              protocol: HTTP
  3. 为ASM网关启用压缩。

    1. 在网格详情页面左侧导航栏,选择ASM网关 > 入口网关

    2. 入口网关页面的ingressgateway右侧,单击查看YAML

    3. 编辑对话框,增加以下内容,然后单击确定

      compression:
        content_type:
          - text/html
        enabled: true
        gzip:
          memory_level: 9
        remove_accept_encoding_header: true

      部分字段说明如下。关于压缩字段的更多说明,请参见使用KubeAPI管理入口网关

      字段

      说明

      compression.content_type

      需要被压缩的ContentType列表。

      compression.enabled

      是否启用入口网关压缩能力。

      compression.gzip

      允许压缩使用的内存空间规格。

      compression.remove_accept_encoding_header

      • 设置为true时,入口网关会将客户端请求转发至上游之前移除请求内的Accept-Encoding Header。

      • 设置为false时,入口网关会将客户端请求转发至上游之前保留请求内的Accept-Encoding Header。

      示例效果如下:

      压缩

验证ASM网关启用压缩是否成功

  1. 打开浏览器进行调试。本文以谷歌浏览器为例。

    1. 在谷歌浏览器右上角单击设置图标。

    2. 选择更多工具 > 开发者工具

  2. 访问Nginx应用。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择网络 > 服务

    3. 服务页面顶部,设置命名空间istio-system,在External IP列查看istio-ingressgateway对应的IP地址(端口为80)。

    4. 在打开的开发者工具页面,输入上一步获取的istio-ingressgateway的IP地址。

      可以看到Response中的Content-Encoding已经显示为gzip,说明为ASM网关启用压缩成功。压缩