Mizu tap analyze

This commit is contained in:
Igor Gov
2021-06-29 17:05:44 +03:00
parent c59aadb221
commit b84c698c1a
7 changed files with 125 additions and 10 deletions

View File

@@ -15,6 +15,7 @@ type MizuTapOptions struct {
GuiPort uint16
Namespace string
AllNamespaces bool
Analyze bool
KubeConfigPath string
MizuImage string
MizuPodPort uint16
@@ -22,7 +23,6 @@ type MizuTapOptions struct {
TapOutgoing bool
}
var mizuTapOptions = &MizuTapOptions{}
var direction string
@@ -30,7 +30,7 @@ var tapCmd = &cobra.Command{
Use: "tap [POD REGEX]",
Short: "Record ingoing traffic of a kubernetes pod",
Long: `Record the ingoing traffic of a kubernetes pod.
Supported protocols are HTTP and gRPC.`,
Supported protocols are HTTP and gRPC.`,
RunE: func(cmd *cobra.Command, args []string) error {
if len(args) == 0 {
return errors.New("POD REGEX argument is required")
@@ -62,6 +62,7 @@ func init() {
tapCmd.Flags().Uint16VarP(&mizuTapOptions.GuiPort, "gui-port", "p", 8899, "Provide a custom port for the web interface webserver")
tapCmd.Flags().StringVarP(&mizuTapOptions.Namespace, "namespace", "n", "", "Namespace selector")
tapCmd.Flags().BoolVarP(&mizuTapOptions.Analyze, "analyze", "", false, "Analyze traffic")
tapCmd.Flags().BoolVarP(&mizuTapOptions.AllNamespaces, "all-namespaces", "A", false, "Tap all namespaces")
tapCmd.Flags().StringVarP(&mizuTapOptions.KubeConfigPath, "kube-config", "k", "", "Path to kube-config file")
tapCmd.Flags().StringVarP(&mizuTapOptions.MizuImage, "mizu-image", "", fmt.Sprintf("gcr.io/up9-docker-hub/mizu/%s:latest", mizu.Branch), "Custom image for mizu collector")

View File

@@ -2,7 +2,10 @@ package cmd
import (
"context"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"os"
"os/signal"
"regexp"
@@ -79,6 +82,32 @@ func RunMizuTap(podRegexQuery *regexp.Regexp, tappingOptions *MizuTapOptions) {
waitForFinish(ctx, cancel)
}
type guestToken struct {
Token string `json:"token"`
Model string `json:"model"`
}
func CreateAnonymousToken(baseUrl string) guestToken {
resp, httpErr := http.Get("https://trcc." + baseUrl + "/anonymous/token")
if httpErr != nil {
fmt.Println(httpErr)
}
body, ioErr := ioutil.ReadAll(resp.Body)
resp.Body.Close()
if ioErr != nil {
fmt.Println(ioErr)
}
token := guestToken{}
jsonErr := json.Unmarshal(body, &token)
if jsonErr != nil {
fmt.Println(jsonErr)
}
fmt.Println("Token:", token.Token, "model:", token.Model)
return token
}
func createMizuResources(ctx context.Context, kubernetesProvider *kubernetes.Provider, nodeToTappedPodIPMap map[string][]string, tappingOptions *MizuTapOptions, mizuApiFilteringOptions *shared.TrafficFilteringOptions) error {
if err := createMizuAggregator(ctx, kubernetesProvider, tappingOptions, mizuApiFilteringOptions); err != nil {
return err
@@ -244,6 +273,17 @@ func portForwardApiPod(ctx context.Context, kubernetesProvider *kubernetes.Provi
var err error
portForward, err = kubernetes.NewPortForward(kubernetesProvider, mizu.ResourcesNamespace, mizu.AggregatorPodName, tappingOptions.GuiPort, tappingOptions.MizuPodPort, cancel)
fmt.Printf("Web interface is now available at http://localhost:%d\n", tappingOptions.GuiPort)
if tappingOptions.Analyze {
baseUrl := "igorgov-dev.dev.testr.io"
token := CreateAnonymousToken(baseUrl)
_, err := http.Get("http://localhost:8899/api/uploadEntries")
if err != nil {
fmt.Println(err)
}
fmt.Println("https://" + baseUrl + "/share/" + token.Token)
}
if err != nil {
fmt.Printf("error forwarding port to pod %s\n", err)
cancel()