Неверный запрос / Неверное имя хоста от IHS в Connections 6.5 Вызов API поиска в пакете компонентов (OrientMe) - PullRequest
0 голосов
/ 06 марта 2020

После установки и настройки HCL Component Pack 6.5, я перешел к https://<cnx-ihs-host>/social/home и увидел части OrientMe с некоторыми ошибками:

enter image description here

Консоль браузера отображает несколько ошибок 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
}, ...

Я не вижу причин, по которым должна быть проблема с заголовком узла, вызванная этим кодом.

Ответы [ 2 ]

0 голосов
/ 06 марта 2020

У меня был вход перед IHS, который должен действовать как маршрутизатор для IHS или части K8 (наличие обратного прокси-сервера рекомендуется из документов):

User <-----> Ingress <-----> IHS

Позже этот прокси также должен использоваться для k8s, так что он решает, куда направить IHS (серверная часть WebSphere) или пакет компонентов (например, OrientMe).

Проблема заключалась в том, что x-forwarded-host было установлено на cnx65.ihs-host, cnx65.ihs-host в сочетании с стандартное поведение входа k8s , в котором заголовки x-forwarded-for установлены как Host. В настоящее время я выясняю, почему эти заголовки содержат имя хоста дважды. Но основной проблемой было поведение входа k8s, в результате чего Host: cnx65.ihs-host, cnx65.ihs-host передается в IHS.

Кажется, невозможно исправить это из коробки, но добавив пользовательский фрагмент в nginx.ingress.kubernetes.io/configuration-snippet, который устанавливает заголовок хоста на настоящий http хост:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: external-service
  annotations: 
    nginx.ingress.kubernetes.io/secure-backends: "true"

    # https://github.com/kubernetes/ingress-nginx/issues/2463#issuecomment-423230548
    nginx.ingress.kubernetes.io/configuration-snippet: |
      more_clear_input_headers "Host" "X-Forwarded-Host";
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-Host $http_x_forwarded_host;
0 голосов
/ 06 марта 2020

Установлен ли настройщик? Отсутствующий заголовок может быть связан с настройщиком.

Проверьте nginx правила пересылки, проверьте configmap (http и https).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...