(довольно новый в Kubernetes, заранее извините за возможные ошибки)
Я использую kind
( kind ) для моего двухузлового (основного и рабочего) кластера с StatefulSet
из 10 модулей, и у меня есть node.js
, который имитирует HTTP-сервер, который получает запросы HTTP GET, которые выполняются на каждом модуле.
Я пытаюсь установить соединение для отправки HTTP POST с бездействующим массажем всякий раз, когда модуль бездействует (после обработки HTTP-запроса GET) к функции NextEndpoint
в roundrobin.go
с ListenAndServe
для нового алгоритма балансировки нагрузки, который я хочу реализовать в roundrobin.go
, который основан на модулях, посылающих в LB бездействующий массаж всякий раз, когда они завершают sh обработку HTTP-запроса на получение, отправленного из внешнего сценария python.
Я получаю эту ошибку (из журналов модуля):
ECONNREFUSED 172.17.0.3:8081
, где 172.17.0.3 - локальный IP-адрес узла плоскости управления.
Редактировать
Я создал модуль webr-master
, работающий на узле плоскости управления (master), и его контейнером является nodeJS
, который успешно получает Http POST
от модулей в наборе состояний. Теперь мне нужно отправить Http POST
с сообщением, полученным webr-master
, в функцию ListenAndServe
, которая в данный момент вызывается в функции Run
в stateful_set.go
, которая, похоже, ничего не делает.
- Куда мне звонить
ListenAndServe
? - Должен ли я выставить другой порт на
webr-master
s 'контейнере, чтобы связь в направлении webr-master
-to-kubernetes работала? - Что именно означает
containerPort
поле a pod означает?
Кодовые выдержки:
В круглом. go:
type idleHandler struct{
lb LoadBalancer
svcPort proxy.ServicePortName
}
func (ih *idleHandler) handler(w http.ResponseWriter, r *http.Request) {
//something something
}
В функции NextEndpoint
:
handlerStruct := &idleHandler{lb: lb, svcPort: svcPort}
http.HandleFunc("/", handlerStruct.handler)
if err := http.ListenAndServe("172.17.0.3:8081", nil); err != nil {
log.Fatal("ListenAndServe: ", err)
}
В server.js
:
const http = require('http');
const fs = require('fs');
const url = require('url');
//HTTP POST
var postData = JSON.stringify({msg: 'IDLE'})
var options = {
hostname: '172.17.0.3', //control plane node
port: 8081, //NodePort
path: '/',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': postData.length
}
};
function handleRequest(request, response) {
//HTTP GET response here...
//HTTP POST
var req = http.request(options, (res) => {
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
res.on('data', (d) => {
process.stdout.write(d);
});
});
req.on('error', (e) => {
console.error(e);
});
//post IDLE
req.end(postData);
}
Спасибо.