我有一個路由到 kubernetes 叢集外部的自訂端點的入口。此服務僅偵聽連接埠 8006 上的 HTTPS。
apiVersion: v1
kind: Service
metadata:
name: pve
spec:
ports:
- protocol: TCP
port: 8006
---
apiVersion: v1
kind: Endpoints
metadata:
name: pve
subsets:
- addresses:
- ip: 10.0.1.2
ports:
- port: 8006
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: pve
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/auth-tls-verify-client: "off"
nginx.ingress.kubernetes.io/whitelist-source-range: "10.0.0.0/16"
spec:
tls:
- hosts:
- pve.example.com
secretName: pve-tls
rules:
- host: pve.example.com
http:
paths:
- backend:
serviceName: pve
servicePort: 8006
path: /
nginx pod 中報錯誤:
10.0.0.25 - - [28/Aug/2020:01:17:58 +0000]「GET / HTTP/1.1」502 157「-」「Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:79.00)Gecko /20100101 火狐/79.0" "-"
2020/08/28 01:17:58 [錯誤] 2609#2609: *569 上游在從上游讀取回應標頭時過早關閉連接,客戶端:10.0.0.25,伺服器:pve.example.com,請求:“GET / HTTP /1.1”,上游:“http://10.0.1.2:8006/”,主機:“pve.example.com”
編輯
刪除代理協定後,出現錯誤
10.0.10.1 - - [28/8/2020:02:19:18 +0000]“GET / HTTP/1.1”400 59“-”“curl/7.58.0”“-”
2020/08/28 02:19:26 [錯誤] 2504#2504: *521 從上游讀取回應頭時上游過早關閉連接,客戶端:10.0.10.1,伺服器:pve.example.com,請求:「 GET / HTTP /1.1”,上游:“http://10.0.1.2:8006/”,主機:“pve.example.com”
10.0.10.1 - - [28/8/2020:02:19:26 +0000]“GET / HTTP/1.1”502 157“-”“curl/7.58.0”“-”
如果相關的話,我的 nginx 設定是透過 helm char 部署的nginx-stable/nginx-ingress
## nginx configuration
## Ref: https://github.com/kubernetes/ingress/blob/master/controllers/nginx/configuration.md
##
controller:
config:
entries:
hsts-include-subdomains: "false"
ssl-ciphers: "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"
ssl-protocols: "TLSv1.1 TLSv1.2"
ingressClass: nginx
service:
externalTrafficPolicy: Local
annotations:
metallb.universe.tf/address-pool: default
defaultBackend:
enabled: true
tcp:
22: "gitlab/gitlab-gitlab-shell:22"
答案1
這個註釋可能是問題的原因。
nginx.ingress.kubernetes.io/use-proxy-protocol: "true"
這文件狀態:
啟用或停用 PROXY 協定以接收透過代理伺服器和負載平衡器(例如 HAProxy 和 Amazon Elastic Load Balancer (ELB))傳遞的用戶端連線(真實 IP 位址)資訊。
如果您的 Ingress 前面沒有使用 PROXY 協定傳遞連接的負載平衡器,那麼這不是您想要的,而此註解不應該存在(或應該存在"false"
)。
答案2
這是社區維基的答案。請隨意擴展它。
您看到的錯誤:upstream prematurely closed connection while reading response header from upstream
來自 Nginx,表示連線已被您的「上游」關閉。
如果沒有必要的細節,很難說這個問題的確切原因是什麼,但無論如何你可以做的是嘗試根據以下內容增加超時值本文檔, 具體來說:
proxy_read_timeout
proxy_connect_timeout
您也可以調整「上游」的程式碼/配置,無論您的用例是什麼。