После установки и настройки HCL Component Pack 6.5, я перешел к https://<cnx-ihs-host>/social/home
и увидел части OrientMe с некоторыми ошибками:
Консоль браузера отображает несколько ошибок http 500, например https://cnx-ihs-host/community_suggestions/api/recommend/communities?count=30
{"errorMessage":"Bad XML response from Search Application: Error: Unexpected close tag\nLine: 11\nColumn: 7\nChar: >","error":"Error: Error: Unexpected close tag\nLine: 11\nColumn: 7\nChar: >\n at getCommunitiesFromAtom (/home/ibm/app/lib/server/suggestedCommunitiesService.js:98:11)\n at Request.request [as _callback] (/home/ibm/app/lib/server/suggestedCommunitiesService.js:163:19)\n at Request.self.callback (/home/ibm/app/node_modules/request/request.js:185:22)\n at emitTwo (events.js:126:13)\n at Request.emit (events.js:214:7)\n at Request.<anonymous> (/home/ibm/app/node_modules/request/request.js:1161:10)\n at emitOne (events.js:116:13)\n at Request.emit (events.js:211:7)\n at IncomingMessage.<anonymous> (/home/ibm/app/node_modules/request/request.js:1083:12)\n at Object.onceWrapper (events.js:313:30)\n at emitNone (events.js:111:20)\n at IncomingMessage.emit (events.js:208:7)\n at endReadableNT (_stream_readable.js:1064:12)\n at _combinedTickCallback (internal/process/next_tick.js:139:11)\n at process._tickCallback (internal/process/next_tick.js:181:9)"}
Поэтому я увеличиваю журнал IHS для отладки и нахожу следующую запись:
[debug] mod_proxy_http.c(63): proxy: HTTP: canonicalising URL //cnx-ihs-host/community_suggestions/api/recommend/communities
...
[debug] vhost.c(791): [client 1.2.3.4:44004] [strict] Invalid host name 'cnx65.ihs-host, cnx65.ihs-host', problem near: , cnx6
[debug] vhost.c(886): [client 172.19.34.4:44004] Client sent malformed Host header: cnx65-test-daniel.k8s02.company.internal, cnx65.ihs-host
Мне кажется, что имя хоста было задано несколько раз, например:
Host: cnx65.ihs-host, cnx65.ihs-host
Почему это произошло и как его можно исправить?
Анализ компонента k8s pack
Я искал источник, который выглядит как развертывание community-suggestions
. Для упрощения поиска и устранения неисправностей (нужно только смотреть 1 модуль вместо 3), развертывание было уменьшено с 3 до 1 реплики:
kubectl scale deploy community-suggestions --replicas=1
Теперь есть только один модуль. Чтобы получить более детальный вывод, я нашел переменную env LOG_LEVEL
, которая придерживалась info
. Поэтому я использовал kubectl edit deploy community-suggestions
, чтобы настроить его на отладку. Это дало мне гораздо больше информации:
{"pid":23,"hostname":"community-suggestions-bdc8c6577-cxz5x","name":"community-suggestions/lib/server/suggestedCommunitiesService.js","level":30,"time":1583489495149,"msg":"Fetching Community Details using Blue API: https://cnx-ihs-host/search/atom/mysearch?returnType=json&constraint={'type':'field','id':'id','values':[\"ac16d726-118c-4876-a1fd-7f0574aa4cf3\",\"COMMUNITIES\"],'exactMatch':true}&scope=communities:entry","v":1}
2020-03-06T10:11:35.149Z - debug: [orient-web-client] ENTRY: RequestAuthUtils.sanitizeHeaders undefined
2020-03-06T10:11:35.149Z - debug: [orient-web-client] EXIT: RequestAuthUtils.sanitizeHeaders undefined
{"pid":23,"hostname":"community-suggestions-bdc8c6577-cxz5x","name":"community-suggestions/lib/server/suggestedCommunitiesService.js","level":20,"time":1583489495180,"msg":">> getCommunitiesFromAtom <!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>400 Bad Request</title>\n</head><body>\n<h1>Bad Request</h1>\n<p>Your browser sent a request that this server could not understand.<br />\n</p>\n<p>Additionally, a 400 Bad Request\nerror was encountered while trying to use an ErrorDocument to handle the request.</p>\n<hr>\n<address>IBM_HTTP_Server at cnx65.internal Port 443</address>\n</body></html> a","v":1}
{"pid":23,"hostname":"community-suggestions-bdc8c6577-cxz5x","name":"community-suggestions/lib/server/suggestedCommunitiesService.js","level":50,"time":1583489495180,"msg":"Error while calling resolve on getCommunitiesFromAtom {}","v":1}
{"pid":23,"hostname":"community-suggestions-bdc8c6577-cxz5x","name":"community-suggestions/lib/server/boot/root.js","level":50,"time":1583489495181,"msg":"Bad XML response from Search Application: Error: Error: Unexpected close tag\nLine: 11\nColumn: 7\nChar: >","v":1}
Это показывает, что проблема заключается в запросе API к поиску /search/atom/...
. Открыв эту ссылку в браузере с тем же пользователем CNX, который указан в пакете компонентов, я получаю действительный файл XML без каких-либо сообщений об ошибках.
В упомянутом файле /home/ibm/app/lib/server/suggestedCommunitiesService.js
из исключения генерируется его целевой адрес API с использованием эта функция:
function getSearchRoute(res, ids) {
const restEndPoint = `/atom/mysearch?returnType=json&constraint={'type':'field','id':'id','values':${JSON.stringify(ids)},'exactMatch':true}&scope=communities:entry`;
const connectionsSearchUrl = `${process.env.CONNECTIONS_SEARCH_URL}`;
return connectionsSearchUrl + getAuthSchemeFragment(res.locals.isOauth) + restEndPoint;
}
Внутри модуля переменная env CONNECTIONS_SEARCH_URL
правильно указывает на https://cnx-ihs-host/search
. Компонент Pack использует модуль request
nodejs для установки обычного запроса GET:
request({
method: 'GET',
headers: scHeaders,
uri,
jar
}, ...
Я не вижу причин, по которым должна быть проблема с заголовком узла, вызванная этим кодом.