From 822e1df0af1334e6cb34d0ebda005694b8a5dfc3 Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 10 Dec 2019 15:48:54 -0500 Subject: [PATCH 1/2] allow insecure backend proxy when getting pod logs --- pkg/cli/admin/inspect/pod.go | 41 +++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/pkg/cli/admin/inspect/pod.go b/pkg/cli/admin/inspect/pod.go index 2e08514a82..c4a9de57c4 100644 --- a/pkg/cli/admin/inspect/pod.go +++ b/pkg/cli/admin/inspect/pod.go @@ -10,7 +10,7 @@ import ( corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/util/errors" + utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/client-go/rest" "k8s.io/klog" ) @@ -56,7 +56,7 @@ func (o *InspectOptions) gatherPodData(destDir, namespace string, pod *corev1.Po } if len(errs) > 0 { - return fmt.Errorf("one or more errors ocurred while gathering container data for pod %s:\n\n %v", pod.Name, errors.NewAggregate(errs)) + return fmt.Errorf("one or more errors ocurred while gathering container data for pod %s:\n\n %v", pod.Name, utilerrors.NewAggregate(errs)) } return nil } @@ -94,7 +94,7 @@ func (o *InspectOptions) gatherContainerAllLogs(destDir string, pod *corev1.Pod, } if len(errs) > 0 { - return errors.NewAggregate(errs) + return utilerrors.NewAggregate(errs) } return nil } @@ -120,7 +120,7 @@ func (o *InspectOptions) gatherContainerEndpoints(destDir string, pod *corev1.Po } if len(errs) > 0 { - return errors.NewAggregate(errs) + return utilerrors.NewAggregate(errs) } return nil } @@ -283,6 +283,7 @@ func (o *InspectOptions) gatherContainerLogs(destDir string, pod *corev1.Pod, co if err := os.MkdirAll(destDir, os.ModePerm); err != nil { return err } + errs := []error{} logOptions := &corev1.PodLogOptions{ Container: container.Name, @@ -293,16 +294,36 @@ func (o *InspectOptions) gatherContainerLogs(destDir string, pod *corev1.Pod, co // first, retrieve current logs logsReq := o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) - filename := fmt.Sprintf("%s.log", "current") - + filename := "current.log" if err := o.fileWriter.WriteFromSource(path.Join(destDir, "/"+filename), logsReq); err != nil { - return err + errs = append(errs, err) + + // if we had an error, we will try again with an insecure backendproxy flag set + logOptions.InsecureSkipTLSVerifyBackend = true + logsReq = o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) + filename = "current.insecure.log" + if err := o.fileWriter.WriteFromSource(path.Join(destDir, "/"+filename), logsReq); err != nil { + errs = append(errs, err) + } } // then, retrieve previous logs logOptions.Previous = true - logsReqPrevious := o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) + logOptions.InsecureSkipTLSVerifyBackend = false + logsReq = o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) + + filename = "previous.log" + if err := o.fileWriter.WriteFromSource(path.Join(destDir, "/"+filename), logsReq); err != nil { + errs = append(errs, err) + + // if we had an error, we will try again with an insecure backendproxy flag set + logOptions.InsecureSkipTLSVerifyBackend = true + logsReq = o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) + filename = "previous.insecure.log" + if err := o.fileWriter.WriteFromSource(path.Join(destDir, "/"+filename), logsReq); err != nil { + errs = append(errs, err) + } + } - filename = fmt.Sprintf("%s.log", "previous") - return o.fileWriter.WriteFromSource(path.Join(destDir, "/"+filename), logsReqPrevious) + return utilerrors.NewAggregate(errs) } From b0ce0a81a4f50bc703ad31c8af179346f2230413 Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 10 Dec 2019 16:27:59 -0500 Subject: [PATCH 2/2] parallelize log collection --- pkg/cli/admin/inspect/pod.go | 93 ++++++++++++++++++++++-------------- 1 file changed, 58 insertions(+), 35 deletions(-) diff --git a/pkg/cli/admin/inspect/pod.go b/pkg/cli/admin/inspect/pod.go index c4a9de57c4..81e28c588b 100644 --- a/pkg/cli/admin/inspect/pod.go +++ b/pkg/cli/admin/inspect/pod.go @@ -7,6 +7,7 @@ import ( "os" "path" "strings" + "sync" corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -284,46 +285,68 @@ func (o *InspectOptions) gatherContainerLogs(destDir string, pod *corev1.Pod, co return err } errs := []error{} - - logOptions := &corev1.PodLogOptions{ - Container: container.Name, - Follow: false, - Previous: false, - Timestamps: true, - } - // first, retrieve current logs - logsReq := o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) - - filename := "current.log" - if err := o.fileWriter.WriteFromSource(path.Join(destDir, "/"+filename), logsReq); err != nil { - errs = append(errs, err) - - // if we had an error, we will try again with an insecure backendproxy flag set - logOptions.InsecureSkipTLSVerifyBackend = true - logsReq = o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) - filename = "current.insecure.log" + wg := sync.WaitGroup{} + errLock := sync.Mutex{} + + go func() { + wg.Add(1) + defer wg.Done() + + innerErrs := []error{} + logOptions := &corev1.PodLogOptions{ + Container: container.Name, + Follow: false, + Previous: false, + Timestamps: true, + } + filename := "current.log" + logsReq := o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) if err := o.fileWriter.WriteFromSource(path.Join(destDir, "/"+filename), logsReq); err != nil { - errs = append(errs, err) + innerErrs = append(innerErrs, err) + + // if we had an error, we will try again with an insecure backendproxy flag set + logOptions.InsecureSkipTLSVerifyBackend = true + logsReq = o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) + filename = "current.insecure.log" + if err := o.fileWriter.WriteFromSource(path.Join(destDir, "/"+filename), logsReq); err != nil { + innerErrs = append(innerErrs, err) + } } - } - // then, retrieve previous logs - logOptions.Previous = true - logOptions.InsecureSkipTLSVerifyBackend = false - logsReq = o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) - - filename = "previous.log" - if err := o.fileWriter.WriteFromSource(path.Join(destDir, "/"+filename), logsReq); err != nil { - errs = append(errs, err) - - // if we had an error, we will try again with an insecure backendproxy flag set - logOptions.InsecureSkipTLSVerifyBackend = true - logsReq = o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) - filename = "previous.insecure.log" + errLock.Lock() + defer errLock.Unlock() + errs = append(errs, innerErrs...) + }() + + go func() { + wg.Add(1) + defer wg.Done() + + innerErrs := []error{} + logOptions := &corev1.PodLogOptions{ + Container: container.Name, + Follow: false, + Previous: true, + Timestamps: true, + } + logsReq := o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) + filename := "previous.log" if err := o.fileWriter.WriteFromSource(path.Join(destDir, "/"+filename), logsReq); err != nil { - errs = append(errs, err) + innerErrs = append(innerErrs, err) + + // if we had an error, we will try again with an insecure backendproxy flag set + logOptions.InsecureSkipTLSVerifyBackend = true + logsReq = o.kubeClient.CoreV1().Pods(pod.Namespace).GetLogs(pod.Name, logOptions) + filename = "previous.insecure.log" + if err := o.fileWriter.WriteFromSource(path.Join(destDir, "/"+filename), logsReq); err != nil { + innerErrs = append(innerErrs, err) + } } - } + + errLock.Lock() + defer errLock.Unlock() + errs = append(errs, innerErrs...) + }() return utilerrors.NewAggregate(errs) }