启用ASM网关的压缩能力后,将对HTTP请求的Response进行压缩,从而加快响应速度,降低流量消耗。本文介绍如何为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. 在ASM创建VirtualService和Gateway。
    1. 登录ASM控制台
    2. 在左侧导航栏,选择服务网格 > 网格管理
    3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
    4. 控制平面(自定义资源管理)区域单击VirtualService页签。
    5. VirtualService页签下单击新建
    6. 新建面板选择命名空间,将以下内容复制到文本框,单击确定
      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
    7. 控制平面(自定义资源管理)区域单击Gateway页签。
    8. Gateway页签下单击新建
    9. 新建对话框选择命名空间,将以下内容复制到文本框,单击确定
      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
      • compression.content_type:需要被压缩的ContentType列表。
      • compression.enabled:是否启用入口网关压缩能力。
      • compression.gzip:允许压缩使用的内存空间规格。
      • compression.remove_accept_encoding_header:
        • 设置为true时,入口网关会将客户端请求转发至上游之前移除请求内的Accept-Encoding Header。
        • 设置为false时,入口网关会将客户端请求转发至上游之前保留请求内的Accept-Encoding Header。
      压缩

结果验证

  1. 打开浏览器的调试页面,本文以谷歌浏览器为例。
    1. 在谷歌浏览器右上角单击设置图标
    2. 选择更多工具 > 开发者工具
  2. 访问Nginx应用。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏中,单击集群
    3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
    4. 在集群管理页左侧导航栏中,选择服务与路由 > 服务
    5. 在服务页面顶部设置命名空间为istio_system,然后查看istio_ingressgateway外部端点列下的端口为80的IP地址。
    6. 在打开开发者工具的页面中输入istio_ingressgateway的外部端点地址。
      可以看到,Response中的Content-Encoding已经显示为gzip。说明为ASM网关启用压缩成功。压缩