Использовать переадресацию порта k8s в текущем процессе - PullRequest
0 голосов
/ 17 января 2019

Я бы хотел перенаправить TCP-соединение с моей программой и использовать его для связи с модулем. Я могу установить соединение с модулем и выполнить завиток на http://localhost:9200/ из другой оболочки. Однако при попытке получить доступ к службе из моей программы я получаю отказ в соединении.

Вот мой фрагмент для установления соединения и локального скручивания.

stopChan, readyChan := make(chan struct{}, 1), make(chan struct{}, 1)
out, errOut := new(bytes.Buffer), new(bytes.Buffer)
path := fmt.Sprintf("/api/v1/namespaces/%s/pods/%s/portforward", "default", "my-http-server")
hostIP := strings.TrimLeft(config.Host, "https://")
serverURL := url.URL{Scheme: "https", Path: path, Host: hostIP}

dialer := spdy.NewDialer(upgrader, &http.Client{Transport: roundTripper}, http.MethodGet, &serverURL)
forwarder, err := portforward.New(dialer, []string{flagPort}, stopChan, readyChan, out, errOut)
if err != nil {
    panic(err)
}

/* From here, I can make a curl to http://localhost:9200/ from a different shell */

/* But I can't curl from within this process */
resp, err := http.Get("http://localhost:9200/")
if err != nil {
    /* It is exiting here */
    panic(err)
}
fmt.Println(resp.Status, resp.Body)
defer resp.Body.Close()

Я получаю: panic: dial tcp [::1]:9200: connect: connection refused

Должен ли я повторно использовать номеронабиратель, который я настроил для связи с модулем? В идеале мне нужно будет повторно использовать это соединение с клиентом Elasticsearch Почему мне отказывают как в 127.0.0.1, так и localhost, так как он отлично работает вне этого процесса?

...