如何解决Ingress-nginx-套接字挂断,connResetException?
我的系统:使用microk8s kubectl的Ubuntu
我正在上在线课程,遇到了找不到解决方案的问题。我无法在应用程序内部访问以下URL
http://ingress-nginx-controller.ingress-nginx.svc.cluster.local
我的网络浏览器出现以下错误
"page": "/","query": {},"buildId": "development","isFallback": false,"err": {"name": "Error","message": "socket hang up","stack": "Error: socket hang up at connResetException (internal/errors.js:613:14) at Socket.socketOnEnd (_http_client.js:493:23) at Socket.emit (events.js:326:22) at endReadableNT (_stream_readable.js:1226:12) at processTicksAndRejections (internal/process/task_queues.js:80:21)"},"gip": true
然后在节点上得到以下转储。
[client] Error: socket hang up
[client] at connResetException (internal/errors.js:613:14)
[client] at Socket.socketOnEnd (_http_client.js:493:23)
[client] at Socket.emit (events.js:326:22)
[client] at endReadableNT (_stream_readable.js:1226:12)
[client] at processTicksAndRejections (internal/process/task_queues.js:80:21) {
[client] code: 'ECONNRESET',[client] config: {
[client] url: 'http://ingress-nginx-controller.ingress-nginx.svc.cluster.local/api/users/currentuser',[client] method: 'get',[client] headers: {
[client] Accept: 'application/json,text/plain,*/*',[client] Host: 'tickets.dev',[client] 'User-Agent': 'axios/0.19.2'
[client] },[client] transformRequest: [ [Function: transformRequest] ],[client] transformResponse: [ [Function: transformResponse] ],[client] timeout: 0,[client] adapter: [Function: httpAdapter],[client] xsrfCookieName: 'XSRF-TOKEN',[client] xsrfHeaderName: 'X-XSRF-TOKEN',[client] maxContentLength: -1,[client] validateStatus: [Function: validateStatus],[client] data: undefined
[client] },[client] request: <ref *1> Writable {
[client] _writableState: WritableState {
[client] objectMode: false,[client] highWaterMark: 16384,[client] finalCalled: false,[client] needDrain: false,[client] ending: false,[client] ended: false,[client] finished: false,[client] destroyed: false,[client] decodeStrings: true,[client] defaultEncoding: 'utf8',[client] length: 0,[client] writing: false,[client] corked: 0,[client] sync: true,[client] bufferProcessing: false,[client] onwrite: [Function: bound onwrite],[client] writecb: null,[client] writelen: 0,[client] afterWriteTickInfo: null,[client] buffered: [],[client] bufferedIndex: 0,[client] allBuffers: true,[client] allNoop: true,[client] pendingcb: 0,[client] prefinished: false,[client] errorEmitted: false,[client] emitClose: true,[client] autoDestroy: true,[client] errored: false,[client] closed: false
[client] },[client] _events: [Object: null prototype] {
[client] response: [Function: handleResponse],[client] error: [Function: handleRequestError]
[client] },[client] _eventsCount: 2,[client] _maxListeners: undefined,[client] _options: {
[client] protocol: 'http:',[client] maxRedirects: 21,[client] maxBodyLength: 10485760,[client] path: '/api/users/currentuser',[client] method: 'GET',[client] headers: [Object],[client] agent: undefined,[client] agents: [Object],[client] auth: undefined,[client] hostname: 'ingress-nginx-controller.ingress-nginx.svc.cluster.local',[client] port: null,[client] nativeProtocols: [Object],[client] pathname: '/api/users/currentuser'
[client] },[client] _redirectCount: 0,[client] _redirects: [],[client] _requestBodyLength: 0,[client] _requestBodyBuffers: [],[client] _onNativeResponse: [Function (anonymous)],[client] _currentRequest: ClientRequest {
[client] _events: [Object: null prototype],[client] _eventsCount: 6,[client] _maxListeners: undefined,[client] outputData: [],[client] outputSize: 0,[client] writable: true,[client] _last: true,[client] chunkedEncoding: false,[client] shouldKeepAlive: false,[client] useChunkedEncodingByDefault: false,[client] sendDate: false,[client] _removedConnection: false,[client] _removedContLen: false,[client] _removedTE: false,[client] _contentLength: 0,[client] _hasBody: true,[client] _trailer: '',[client] finished: true,[client] _headerSent: true,[client] socket: [Socket],[client] _header: 'GET /api/users/currentuser HTTP/1.1\r\n' +
[client] 'Accept: application/json,*/*\r\n' +
[client] 'Host: tickets.dev\r\n' +
[client] 'User-Agent: axios/0.19.2\r\n' +
[client] 'Connection: close\r\n' +
[client] '\r\n',[client] _onPendingData: [Function: noopPendingOutput],[client] agent: [Agent],[client] socketPath: undefined,[client] maxHeaderSize: undefined,[client] insecureHTTPParser: undefined,[client] _ended: false,[client] res: null,[client] aborted: false,[client] timeoutCb: null,[client] upgradeOrConnect: false,[client] parser: null,[client] maxHeadersCount: null,[client] reusedSocket: false,[client] host: 'ingress-nginx-controller.ingress-nginx.svc.cluster.local',[client] protocol: 'http:',[client] _redirectable: [Circular *1],[client] [Symbol(kCapture)]: false,[client] [Symbol(kNeedDrain)]: false,[client] [Symbol(corked)]: 0,[client] [Symbol(kOutHeaders)]: [Object: null prototype]
[client] },[client] _currentUrl: 'http://ingress-nginx-controller.ingress-nginx.svc.cluster.local/api/users/currentuser',[client] [Symbol(kCapture)]: false
[client] },[client] response: undefined,[client] isAxiosError: true,[client] toJSON: [Function (anonymous)]
[client] }
我的ingress-nginx服务
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.152.183.138 <pending> 80:32160/TCP,443:30735/TCP 32d
ingress-nginx-controller-admission ClusterIP 10.152.183.198 <none> 443/TCP 32d
项目源代码
https://gitlab.com/emendoza1986/ticketingapp_microservicecourse
这是称为链接https://gitlab.com/emendoza1986/ticketingapp_microservicecourse/-/blob/master/client/api/build-client.js的源页面http://ingress-nginx-controller.ingress-nginx.svc.cluster.local,作为一个临时*补丁,我直接路由到需要http:// auth-srv:3000才能继续的服务课程。
解决方法
Error socket hang up
错误总是表示服务器由于各种原因关闭了连接(无法及时处理请求,或在处理请求时遇到一些错误等)。
检查您使用的库是否没有像pm.sendRequest()
那样异步发送请求。
尝试设置Connection: keep-alive
标头。
在服务器端,通过将keepAliveTimeout
设置为0
来禁用它。
另一个解决方案是关闭小于keepAliveTimeout
值的空闲套接字(默认情况下为5秒)。默认的http代理不支持这种功能(timeout
设置不支持此功能)。因此,请使用agentkeepalive lib
const HttpsAgent = require('agentkeepalive').HttpsAgent;
const agent = new HttpsAgent({
freeSocketTimeout: 5000
});
更多信息:connection-hang-up。
如果您使用 require('http')
来使用 https 服务,并且显示的是“ socket hang up
”。
尝试将 require('http')
更改为 require('https')
,并且它可以正常工作。
查看更多:socket-hang-up。 有用的博客:solutions-to-socket-hang-up。
总的来说,在群集内部内部使用入口服务并不常见。入口资源旨在管理对内部服务的外部访问。
请注意,这也是一个安全问题,因为您要在外部公开auth服务(UI层使用的后端服务)。
您的网络负载平衡器有待处理的External IP
。
metalK附带MicroK8s,您可以这样启用它:
microk8s enable metallb
然后应将其转换为实际的IP地址。
看看:kubernetes-ingress-nginx-routing-error,http-request_processing。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。