k8s~Ingress转发出现502的问题

发布时间 2023-03-27 20:58:15作者: 张占岭

目前在对接keycloak过程中,通过云端LB到ingress,再由ingress到k8s-service,在配置完成之后,偶发出现502的情况。

ingress的配置,先是实现了客户端的会话保持

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: pkulaw-cas-final
  name: nginx-keycloak
  annotations:
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "route"
    nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"

spec:
  rules:
    - host: xxx.product.com
      http:
        paths:
          - backend:
              serviceName: keycloak
              servicePort: 8080
            path: /

出现502

需要添加proxy-buffer-number的注释解决问题

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: pkulaw-cas-final
  name: nginx-keycloak
  annotations:
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "route"
    nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
    nginx.ingress.kubernetes.io/proxy-buffer-size: "16k" #缓冲区大小
    nginx.ingress.kubernetes.io/proxy-buffers-number: "8" #缓冲区数据,不加它参数多时返回502

其它缓冲区配置

代理缓冲

启用或禁用代理缓冲proxy_buffering。默认情况下,NGINX配置中禁用代理缓冲。

要为所有Ingress规则全局配置此设置,proxy-buffering可以在NGINX ConfigMap中设置该值。要在Ingress规则中使用自定义值,请定义以下注释:

nginx.ingress.kubernetes.io/proxy-buffering: "on"
代理缓冲区数

设置proxy_buffers用于读取从代理服务器接收到的响应的第一部分的缓冲区数。默认情况下,代理缓冲区数设置为4

要全局配置此设置,请proxy-buffers-number在NGINX ConfigMap中进行设置。要在Ingress规则中使用自定义值,请定义以下注释:

nginx.ingress.kubernetes.io/proxy-buffers-number: "4"
代理缓冲区大小

设置proxy_buffer_size用于读取从代理服务器接收到的响应的第一部分的缓冲区的大小。默认情况下,代理缓冲区大小设置为“ 4k”

要全局配置此设置,请proxy-buffer-size在NGINX ConfigMap中进行设置。要在Ingress规则中使用自定义值,请定义以下注释:

nginx.ingress.kubernetes.io/proxy-buffer-size: "8k"
代理最大临时文件大小

如果buffering启用了来自代理服务器的响应,并且整个响应不适合通过proxy_buffer_size和proxy_buffers指令设置的缓冲区,则可以将响应的一部分保存到临时文件中。此伪指令设置size临时文件的最大值,设置为proxy_max_temp_file_size。一次写入临时文件的数据大小由proxy_temp_file_write_size指令设置。

零值禁用对临时文件的响应的缓冲。

要在Ingress规则中使用自定义值,请定义以下注释:

nginx.ingress.kubernetes.io/proxy-max-temp-file-size: "1024m"