Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mendapatkan respons 'mesra' daripada Kubernetes APIServer menggunakan antara muka ReST
Editor php Apple akan memperkenalkan kepada anda cara menggunakan antara muka ReST untuk mendapatkan respons "mesra" daripada Pelayan API Kubernetes. Kubernetes ialah platform orkestrasi kontena popular yang menyediakan API untuk mengurus dan memantau pelbagai sumber dalam kelompok. Dengan menggunakan antara muka ReST, kami boleh berinteraksi dengan mudah dengan APIServer Kubernetes dan mendapatkan maklumat yang kami perlukan. Dalam artikel ini, kami akan meneroka secara terperinci cara untuk mengesahkan, menghantar permintaan dan mengendalikan respons menggunakan antara muka ReST, serta cara mengendalikan kemungkinan keadaan ralat. Sama ada anda seorang pemula atau pengguna Kubernetes yang berpengalaman, artikel ini akan memberi anda panduan berguna dan nasihat praktikal.
Saya menggunakan perpustakaan klien-golang untuk berkomunikasi dengan pelayan api kubernetes semasa rehat dapatkan, peringkat pos. Respons yang diterima bukanlah struktur json yang terbentuk dengan baik, dan juga bukan "jenis" objek api.
Serpihan program ialah:
kubeconfig := filepath.join( os.getenv("home"), ".kube", "config", ) config, err := clientcmd.buildconfigfromflags("", kubeconfig) if err != nil { log.fatal(err) } config.negotiatedserializer = scheme.codecs.withoutconversion() groupversion, _ := schema.parsegroupversion("api/v1") config.groupversion = &groupversion config.contenttype = "application/json" config.acceptcontenttypes = "application/json" examplerestclient, err := rest.restclientfor(config) if err != nil { panic(err) } var statuscode int var contenttype string response, err := examplerestclient. get(). resource("nodes"). do(context.background()). statuscode(&statuscode). contenttype(&contenttype). get() if err != nil { panic(err) } fmt.printf("content-type is %s\n", contenttype) fmt.printf("status code is %d\n", statuscode) fmt.printf("received response %v\n", response)
Tindak balas bermula dengan:
status code is 200 received response &nodelist{listmeta:{ 17299 <nil>},items:[]node{node{objectmeta:{dev-cluster-control-plane 7fe038c9-8be6-41a9-9f3f-5900abb0e34b 16922 0 2023-02-19 16:32:44 +0530 ist <nil> <nil> map[beta.kubernetes.io/arch:amd64 beta.kubernetes.io/os:linux kubernetes.io/arch:amd64 kubernetes.io/hostname:dev-cluster-control-plane kubernetes.io/os:linux node-role.kubernetes.io/control-plane: node.kubernetes.io/exclude-from-external-load-balancers:] map[kubeadm.alpha.kubernetes.io/cri-socket:unix:///run/containerd/containerd.sock node.alpha.kubernetes.io/ttl:0 volumes.kubernetes.io/controller-managed-attach-detach:true] [] [] ...
Saya menjangkakan output serupa dengan arahan berikut:
$ kubectl get --raw /api/v1/nodes {"kind":"NodeList","apiVersion":"v1","metadata":{"resourceVersion":"17481"},"items":[{"metadata":{"name":"dev-cluster-control-plane","uid":"7fe038c9-8be6-41a9-9f3f-5900abb0e34b","resourceVersion":"17351","creationTimestamp":"2023-02-19T11:02:44Z","labels":{"beta.kubernetes.io/arch":"amd64","beta.kubernetes.io/os":"linux","kubernetes.io/arch":"amd64","kubernetes.io/hostname":"dev-cluster-control-plane","kubernetes.io/os":"linux","node-role.kubernetes.io/control-plane":"","node.kubernetes.io/exclude-from-external-load-balancers":""},"annotations":{"kubeadm.alpha.kubernetes.io/cri-socket":"unix:///run/containerd/containerd.sock","node.alpha.kubernetes.io/ttl":"0" ...
Maklum balas yang diterima bukanlah struktur json yang terbentuk dengan baik
Saya rasa anda keliru tentang cara modul client-go
berfungsi.
Maklum balas daripada api yang lain pastinya respons json yang terbentuk dengan baik, tetapi ini akan dipecahkan ke dalam struktur data go (seperti ini ).
Jika anda ingin mengakses nod yang dikembalikan, anda boleh berinteraksi dengan keputusan menggunakan sintaks go standard:
response, err := examplerestclient. get(). resource("nodes"). do(context.background()). statuscode(&statuscode). contenttype(&contenttype). get() if err != nil { panic(err) } nodes := response.(*v1.nodelist) for _, node := range nodes.items { fmt.printf("name: %s\n", node.objectmeta.getname()) fmt.printf("addresses:\n") for _, addr := range node.status.addresses { fmt.printf(" %s: %s\n", addr.type, addr.address) } }
Saya menjangkakan output serupa dengan arahan berikut:
kenapa?client-go
Binding mengembalikan data yang berguna kepada kod go anda. Jika anda ingin menjana output json, anda perlu menyusun sumber secara eksplisit ke format json:
response, err := exampleRestClient. Get(). Resource("nodes"). Do(context.Background()). StatusCode(&statusCode). ContentType(&contentType). Get() if err != nil { panic(err) } out, err := json.Marshal(response) fmt.Print(string(out))
Atas ialah kandungan terperinci Bagaimana untuk mendapatkan respons 'mesra' daripada Kubernetes APIServer menggunakan antara muka ReST. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!