Bagaimana untuk mendapatkan respons 'mesra' daripada Kubernetes APIServer menggunakan antara muka ReST

WBOY
Lepaskan: 2024-02-09 08:10:18
ke hadapan
1195 orang telah melayarinya

如何使用 ReST 接口从 Kubernetes APIServer 获取“友善”响应

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.

Kandungan soalan

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)
Salin selepas log masuk

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] [] [] ...
Salin selepas log masuk

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" ...
Salin selepas log masuk

Penyelesaian

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)
  }
}
Salin selepas log masuk

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))
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!