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

前提条件

  • 已添加集群到ASM实例。具体操作,请参见添加集群到ASM实例
  • 已部署入口网关服务。具体操作,请参见创建入口网关服务
  • 如果您需要使用域名,则您的域名需要备案才能正常访问。

操作步骤

  1. 在ACK集群中部署Nginx。
    1. 使用以下内容,创建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,查看istio_ingressgateway外部端点列下的端口为80的IP地址。
    4. 在打开的开发者工具页面,输入istio_ingressgateway的外部端点地址。
      可以看到,Response中的Content-Encoding已经显示为gzip,说明为ASM网关启用压缩成功。压缩