Skip to content

Commit

Permalink
Merge pull request #101 from nyrahul/main
Browse files Browse the repository at this point in the history
sysdump issue fixes
  • Loading branch information
nyrahul authored Jul 12, 2022
2 parents 8ab545e + 78bfaf4 commit 4354f2f
Showing 1 changed file with 43 additions and 38 deletions.
81 changes: 43 additions & 38 deletions sysdump/sysdump.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,12 @@ func Collect(c *k8s.Client) error {

for _, p := range pods.Items {
// KubeArmor Logs
fmt.Printf("getting logs from %s\n", p.Name)
v := c.K8sClientset.CoreV1().Pods("kube-system").GetLogs(p.Name, &corev1.PodLogOptions{})
s, err := v.Stream(context.Background())
if err != nil {
return err
fmt.Printf("failed getting logs from pod=%s err=%s\n", p.Name, err)
continue
}
defer s.Close()
var logs bytes.Buffer
Expand Down Expand Up @@ -157,7 +159,7 @@ func Collect(c *k8s.Client) error {

// AppArmor Gzip
errs.Go(func() error {
if err := copyFromPod("/etc/apparmor.d", path.Join(d, "apparmor.tar.gz"), c); err != nil {
if err := copyFromPod("/etc/apparmor.d", d, c); err != nil {
return err
}
return nil
Expand Down Expand Up @@ -210,48 +212,51 @@ func writeYaml(p string, o runtime.Object) error {
return writeToFile(p, b.String())
}

func copyFromPod(srcPath string, destPath string, c *k8s.Client) error {
func copyFromPod(srcPath string, d string, c *k8s.Client) error {
pods, err := c.K8sClientset.CoreV1().Pods("kube-system").List(context.Background(), metav1.ListOptions{
LabelSelector: "kubearmor-app=kubearmor",
})
if err != nil {
return err
}
reader, outStream := io.Pipe()
cmdArr := []string{"tar", "cf", "-", srcPath}
req := c.K8sClientset.CoreV1().RESTClient().
Get().
Namespace("kube-system").
Resource("pods").
Name(pods.Items[0].Name).
SubResource("exec").
VersionedParams(&corev1.PodExecOptions{
Container: pods.Items[0].Spec.Containers[0].Name,
Command: cmdArr,
Stdin: true,
Stdout: true,
Stderr: true,
TTY: false,
}, scheme.ParameterCodec)
exec, err := remotecommand.NewSPDYExecutor(c.Config, "POST", req.URL())
if err != nil {
return err
}
go func() {
defer outStream.Close()
err = exec.Stream(remotecommand.StreamOptions{
Stdin: os.Stdin,
Stdout: outStream,
Stderr: os.Stderr,
Tty: false,
})
}()
buf, err := io.ReadAll(reader)
if err != nil {
return err
}
if err := os.WriteFile(destPath, buf, 0600); err != nil {
return err
for _, pod := range pods.Items {
destPath := path.Join(d, fmt.Sprintf("%s_apparmor.tar.gz", pod.Name))
reader, outStream := io.Pipe()
cmdArr := []string{"tar", "cf", "-", srcPath}
req := c.K8sClientset.CoreV1().RESTClient().
Get().
Namespace("kube-system").
Resource("pods").
Name(pod.Name).
SubResource("exec").
VersionedParams(&corev1.PodExecOptions{
Container: pods.Items[0].Spec.Containers[0].Name,
Command: cmdArr,
Stdin: true,
Stdout: true,
Stderr: true,
TTY: false,
}, scheme.ParameterCodec)
exec, err := remotecommand.NewSPDYExecutor(c.Config, "POST", req.URL())
if err != nil {
return err
}
go func() {
defer outStream.Close()
err = exec.Stream(remotecommand.StreamOptions{
Stdin: os.Stdin,
Stdout: outStream,
Stderr: os.Stderr,
Tty: false,
})
}()
buf, err := io.ReadAll(reader)
if err != nil {
return err
}
if err := os.WriteFile(destPath, buf, 0600); err != nil {
return err
}
}
return nil
}
Expand Down

0 comments on commit 4354f2f

Please sign in to comment.