1

我尝试将 Google Cloud CDN 配置到我的容器引擎项目。

按照文档它有一个 Content-Length 标头或一个 Transfer-Encoding 标头以便被缓存。

我的后端使用 gzip 压缩,所以我有 Transfer-Encoding: chunked

问题是入口负载均衡器似乎删除了 Transfer-encoding 标头,所以我不能有“缓存命中”

我使用“kubectl port-forward”将直接连接到实例后端,并且我有 Transfer-encoding 标头。

但是当我连接到外部 IP 时,标头已经消失。

这是我的入口配置

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: gateway-preprod3-ingress
  annotations:
    kubernetes.io/ingress.global-static-ip-name: gateway-preprod2-static-ip
spec:
  tls:
  - secretName: gateway-preprod-secret-2018-with-ca-7
  backend:
    serviceName: gateway-preprod
    servicePort: 80

这是我的部署配置

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: gateway-preprod
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
  minReadySeconds: 50
  template:
    metadata:
      labels:
        app: gateway-preprod
    spec:
      containers:
      - name: gateway-preprod
        image: eu.gcr.io/writecontrol-1055/gateway:v305
        env:
        - name: writecontrolEnv
          value: preprod
        ports:
        - containerPort: 80

相反,对于某些未经过 GZIP 压缩的资源,会给出 Content-length 标头,并且我有一个成功的“缓存命中”

kubernetes 版本是 1.7.12-gke.1

这是一个测试它的 URL:https ://preprod-writecontrol.ovh

4

1 回答 1

2

我不确定你的回复为什么有Transfer-Encoding标题。此标头并不意味着位于源(您的应用程序),它通常由其他跃点添加,例如 Cloud HTTP Load Balancer (=Ingress) 等代理。

更多信息在Transfer-Encoding这里:https ://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Transfer-Encoding


我能够让 CDN 自己使用Content-Encoding标头处理 GZIP 响应:

首先阅读https://cloud.google.com/cdn/docs/caching上的缓存要求。您需要一个Content-Length和/或Cache-Control: public标题。因此,将这些标头编码到您的应用程序服务器中。

在 Ingress 创建的负载均衡器上启用 CDN 后,发出两个请求,如果您Age在第二个请求上看到标头(如下所示),这意味着您的请求现在正在从 CDN 提供服务。

curl -vH Accept-Encoding:gzip 35.186.195.233
> [...]
>
< HTTP/1.1 200 OK
< Content-Encoding: gzip
< Date: Tue, 27 Mar 2018 19:38:20 GMT
< Content-Length: 87
< Content-Type: application/x-gzip
< Via: 1.1 google
< Cache-Control: max-age=600,public

��H����Q(�/�IQ�
* Connection #0 to host 35.186.195.233 left intact
K-*��ϳR0�3�3���/.�K�M�R�)+OM�55575��L�4ѭ�N+L���K��4A

第二个请求(注意Age标题):

$ curl -vH Accept-Encoding:gzip 35.186.195.233
[...]
>
< HTTP/1.1 200 OK
< Cache-Control: max-age=600,public
< Content-Encoding: gzip
< Date: Tue, 27 Mar 2018 19:42:01 GMT
< Content-Length: 87
< Content-Type: application/x-gzip
< Via: 1.1 google
< Age: 314
<
��H����Q(�/�IQ�
* Connection #0 to host 35.186.195.233 left intact
K-*��ϳR0�3�3���/.�K�M�R�)+OM�55575��L�4ѭ�N+L���K��4A
于 2018-03-27T19:43:52.520 回答