亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過client-go升級端口轉發時出現連接錯誤

通過client-go升級端口轉發時出現連接錯誤

Go
鳳凰求蠱 2023-08-07 14:38:57
這是我編寫的通過 client-go 進行端口轉發的代碼的易于運行的版本。有硬編碼的 Pod 名稱、命名空間和端口。您可以使用您正在運行的程序來更改它們。package mainimport (    "flag"    "net/http"    "os"    "path/filepath"    "k8s.io/client-go/kubernetes"    "k8s.io/client-go/tools/clientcmd"    "k8s.io/client-go/tools/portforward"    "k8s.io/client-go/transport/spdy")func main() {    stopCh := make(<-chan struct{})    readyCh := make(chan struct{})    var kubeconfig *string    if home := "/home/gianarb"; home != "" {        kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file")    } else {        kubeconfig = flag.String("kubeconfig", "", "absolute path to the kubeconfig file")    }    flag.Parse()    // use the current context in kubeconfig    config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)    if err != nil {        panic(err.Error())    }    // create the clientset    clientset, err := kubernetes.NewForConfig(config)    if err != nil {        panic(err.Error())    }    reqURL := clientset.RESTClient().Post().        Resource("pods").        Namespace("default").        Name("test").        SubResource("portforward").URL()    transport, upgrader, err := spdy.RoundTripperFor(config)    if err != nil {        panic(err)    }    dialer := spdy.NewDialer(upgrader, &http.Client{Transport: transport}, http.MethodPost, reqURL)    fw, err := portforward.New(dialer, []string{"9999:9999"}, stopCh, readyCh, os.Stdout, os.Stdout)    if err != nil {        panic(err)    }    if err := fw.ForwardPorts(); err != nil {        panic(err)    }}golang 1.13版本:    k8s.io/api v0.0.0-20190409021203-6e4e0e4f393b    k8s.io/apimachinery v0.0.0-20190404173353-6a84e37a896d    k8s.io/cli-runtime v0.0.0-20190409023024-d644b00f3b79    k8s.io/client-go v11.0.0+incompatible我得到的錯誤是升級連接時出錯:但之后就什么也沒有了:。您對這個話題有什么經驗嗎?謝謝
查看完整描述

3 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

clientset.CoreV1().RESTClient().Post().

        Resource("pods").

        Namespace("default").

        Name("test").

        SubResource("portforward").URL()

對我有用,并給出帶有 .../api/v1/namespaces... 的 url


查看完整回答
反對 回復 2023-08-07
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

有*rest.Request一個Prefix(string)方法可以用來插入丟失的子路徑:


reqURL := clientset.RESTClient().Post().

        Prefix("api/v1").

        Resource("pods").

        Namespace("default").

        Name("test").

        SubResource("portforward").URL()


查看完整回答
反對 回復 2023-08-07
?
烙印99

TA貢獻1829條經驗 獲得超13個贊

我部分解決了問題。至少我讓它工作了并且我對此感到滿意。


下面的代碼生成的URL是https://192.168.99.125:8443/namespaces/default/pods/influxdb-65c9fdf9cb-nzvpf/portforward?timeout=32s


reqURL := clientset.RESTClient().Post().

        Resource("pods").

        Namespace("default").

        Name("test").

        SubResource("portforward").URL()

這是錯誤的,正確的是:


https://192.168.99.125:8443/api/v1/namespaces/default/pods/influxdb-65c9fdf9cb-nzvpf/portforward

這就是我現在生成該 URL 的方法:


    path := fmt.Sprintf("/api/v1/namespaces/%s/pods/%s/portforward", "default", podName)


    hostIP := strings.TrimLeft(config.Host, "htps:/")

    serverURL := url.URL{Scheme: "https", Path: path, Host: hostIP}

    dialer := spdy.NewDialer(upgrader, &http.Client{Transport: transport}, http.MethodPost, &serverURL)



查看完整回答
反對 回復 2023-08-07
  • 3 回答
  • 0 關注
  • 224 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號