ZBLOG

在 kubernetes 集群内,如何用 go 获取其他名称空间的 pod 内的文件,需要什么权限和 secret 吗

要获取其他命名空间中的 Pod 文件,需要在 Kubernetes API 中使用 “kubectl cp” 命令或通过 REST API 进行访问。在 Go 语言中,可以使用 kubernetes-go 客户端库来访问 Kubernetes API。

要访问其他命名空间中的 Pod 文件,需要拥有以下权限:

  1. podspods/exec 的 get 权限
  2. 目标 Pod 所在命名空间的 secretsconfigmapspods 的 list 权限

如果需要在访问时进行身份验证,则需要提供相应的 secret。

代码示例:

  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "io/ioutil"
  6. "k8s.io/client-go/kubernetes"
  7. "k8s.io/client-go/rest"
  8. "k8s.io/client-go/tools/clientcmd"
  9. )
  10. func main() {
  11. config, err := clientcmd.BuildConfigFromFlags("", "")
  12. if err != nil {
  13. config, err = rest.InClusterConfig()
  14. if err != nil {
  15. panic(err)
  16. }
  17. }
  18. clientset, err := kubernetes.NewForConfig(config)
  19. if err != nil {
  20. panic(err)
  21. }
  22. podName := "example-pod"
  23. namespace := "example-namespace"
  24. filePath := "/path/to/file.txt"
  25. pod, err := clientset.CoreV1().Pods(namespace).Get(context.Background(), podName, metav1.GetOptions{})
  26. if err != nil {
  27. panic(err)
  28. }
  29. req := clientset.CoreV1().RESTClient().Post().
  30. Resource("pods").
  31. Name(pod.Name).
  32. Namespace(pod.Namespace).
  33. SubResource("exec")
  34. req.VersionedParams(&corev1.PodExecOptions{
  35. Command: []string{"cat", filePath},
  36. Container: pod.Spec.Containers[0].Name,
  37. Stdout: true,
  38. }, scheme.ParameterCodec)
  39. executor, err := remotecommand.NewSPDYExecutor(config, "POST", req.URL())
  40. if err != nil {
  41. panic(err)
  42. }
  43. reader, writer := io.Pipe()
  44. go func() {
  45. defer writer.Close()
  46. err = executor.Stream(remotecommand.StreamOptions{
  47. Stdout: writer,
  48. Tty: false,
  49. })
  50. if err != nil {
  51. panic(err)
  52. }
  53. }()
  54. data, err := ioutil.ReadAll(reader)
  55. if err != nil {
  56. panic(err)
  57. }
  58. fmt.Printf("File contents: %s", string(data))
  59. }

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=1673

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?