Google cloud platform 无法将Google Cloud CDN缓存与入口控制器、传输编码头一起使用

Google cloud platform 无法将Google Cloud CDN缓存与入口控制器、传输编码头一起使用,google-cloud-platform,google-kubernetes-engine,transfer-encoding,kubernetes-ingress,google-cloud-cdn,Google Cloud Platform,Google Kubernetes Engine,Transfer Encoding,Kubernetes Ingress,Google Cloud Cdn,我尝试将Google Cloud CDN配置到我的容器引擎项目中 在文档之后,它有一个内容长度头或传输编码头以便缓存 我的后端使用gzip压缩,所以我使用了传输编码:chunked 问题是入口负载平衡器似乎删除了传输编码头,所以我不能有“缓存命中” 我使用“kubectl port forward”将direclty连接到一个实例后端,我有传输编码头 但是当我连接到外部IP时,头已经消失了 这里是我的入口配置 apiVersion: extensions/v1beta1 kind: Ingres

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

在文档之后,它有一个内容长度头或传输编码头以便缓存

我的后端使用gzip压缩,所以我使用了传输编码:chunked

问题是入口负载平衡器似乎删除了传输编码头,所以我不能有“缓存命中”

我使用“kubectl port forward”将direclty连接到一个实例后端,我有传输编码头

但是当我连接到外部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
这里是我的部署配置

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的资源,会给出内容长度头,我成功地“缓存命中”

kubernetes版本是1.7.12-gke.1


这里有一个URL来测试它:

我不确定为什么您的响应有
传输编码
标题。此标头不应位于源(您的应用程序)处,它通常由其他跃点添加,例如云HTTP负载平衡器(=入口)等代理

有关传输编码的更多信息,请参见:


我能够让CDN自己使用
内容编码
标题处理GZIP响应:

首先阅读下面的缓存要求。您需要
内容长度
和/或
缓存控制:公共
标题。因此,将这些头编码到应用程序服务器中

在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

您正在使用哪些文档通过GKE部署CDN?。您用于测试CDN的确切请求是什么?。此外,您需要查看有关“Ilegal请求处理”的文档,其中解释了LB阻止客户端请求到达后端的许多原因。可以测试所有静态资源:例如,我有负载平衡器的响应。问题是我没有后端发送的头=>Transfer Encoding你能提供我在上一封邮件中请求的文档吗?这将有助于我重现这个问题。此外,您可能需要查看常见云CDN问题的基本故障排除指南。看看这对你是否也有帮助。我不明白你的问题。你说的是文档吗?这里是cdn配置,还是您在谈论cdn配置?我使用默认的我已经检查过的文档我无法复制这个问题。看起来您已经检查了文档,其中他们提到了“压缩不起作用”的可能原因。此时,如果问题仍然存在,我建议您通过此方式打开缺陷报告,这样做会对大型传输产生可测量的性能负面影响,因为在发送第一个字节之前,必须压缩整个源代码。“传输编码:分块”的使用对于传输数据的服务器非常常见。我使用的是JavaSpringBoot应用服务器,在使用GZIP时默认使用“传输编码:分块”。这似乎是一个标准。即使nginx也会使用它。Apache http服务器的另一个示例。Apache仅在压缩文件大小大于DeflateBufferSize时才使用分块编码。因此,增加此缓冲区大小将阻止服务器对较大的文件也使用分块编码,从而导致即使对于压缩数据也发送内容长度。这里有更多信息:根据Google Cloud CDN文档,可以使用传输编码代替内容长度“状态代码为200、203、300、301、302、307或410。它有内容长度头或传输编码头。”抱歉,我不知道。我对传输编码的接触是有限的。考虑在谷歌云的公共问题跟踪器中为负载均衡器(不是GKE)提交一个bug。