kubearmor / kubearmor-client

KubeArmor cli tool aka kArmor :robot:

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

bug(karmor logs): karmor logs are getting panicked when we use label function

yasin-cs-ko-ak opened this issue · comments

Refer below:

~ karmor logs --json -n wordpress-mysql -l app=mysql | jq .

local port to be used for port forwarding kubearmor-relay-6fddb8865b-d6v2f: 32775 
Created a gRPC client (localhost:32775)
Checked the liveness of the gRPC server
Started to watch alerts
panic: interface conversion: interface {} is nil, not string

goroutine 44 [running]:
github.com/kubearmor/kubearmor-client/log.WatchTelemetryHelper({0xc000032480, 0x232, _}, {_, _}, {{0x0, 0x0}, {0x1ea1d7a, 0x4}, {0x1ea4d05, ...}, ...})
	/home/runner/work/kubearmor-client/kubearmor-client/log/logClient.go:304 +0xd27
github.com/kubearmor/kubearmor-client/log.(*Feeder).WatchAlerts(0xc00068de00, {{0x0, 0x0}, {0x1ea1d7a, 0x4}, {0x1ea4d05, 0x6}, {0x1ea49e7, 0x6}, 0x1, ...})
	/home/runner/work/kubearmor-client/kubearmor-client/log/logClient.go:249 +0x105
created by github.com/kubearmor/kubearmor-client/log.StartObserver
	/home/runner/work/kubearmor-client/kubearmor-client/log/log.go:173 +0x5cc

To Reproduce:

  1. Deploy this wordpress-mysql deployment
kubectl apply -f https://raw.githubusercontent.com/kubearmor/KubeArmor/main/examples/wordpress-mysql/wordpress-mysql-deployment.yaml
  1. Install karmor client
  2. Deploy kubearmor in your cluster
  3. Check for logs using karmor logs --json -n wordpress-mysql -l app=mysql | jq . this.
commented

i can't repeat your results,what is your version of karmor?

root@yyj-test-master1:/home/ubuntu# karmor logs --json -n wordpress-mysql -l app=mysql | jq .
local port to be used for port forwarding kubearmor-relay-64c6fff875-q67l9: 32863 
Created a gRPC client (localhost:32863)
Checked the liveness of the gRPC server
Started to watch alerts

https://github.com/kubearmor/kubearmor-client/blob/main/log/logClient.go#L304
may be the result of the res["Labels"] is nil?

func WatchTelemetryHelper(arr []byte, t string, o Options) {
	var res map[string]interface{}
	err := json.Unmarshal(arr, &res)
	if err != nil {
		return
	}

	// Filter Telemetry based on provided options
	if len(o.Selector) != 0 {
304		val := selectLabels(o, res["Labels"].(string))
		if val != nil {
			return
		}
	}

	if o.Namespace != "" {
		ns, ok := res["NamespaceName"].(string)
		if !ok {
			return
		}
		match := regexMatcher(CNamespace, ns)
		if !match {
			return
		}
	}

@xiao-jay Thank you for looking into this issue. I was using 11.4 version. But now I updated to the latest version.

commented

@yasin-cs-ko-ak Oh i find the reason why will lead to panic.
file path:log/logClient_test.go,i change test file some place,i found when have no label but have Selector: []string{"foo"},must have panic.Selector []string{"foo"} is a example.

func TestLogClient(t *testing.T) {
	var res = &pb.Alert{
		ClusterName:    "breaking-bad",
		HostName:       "saymyname",
		NamespaceName:  "heisenberg",
		PodName:        "new-mexico",
		ContainerID:    "12345678901234567890",
		ContainerName:  "los-polos",
		ContainerImage: "evergreen",
		Type:           "MatchedPolicy",
	}
	eventChan = make(chan EventInfo, maxEvents)
	var o = Options{
		EventChan: eventChan,
		Selector:  []string{"foo"},
	}

/assign

@xiao-jay That's a great finding. Thank you. If you can raise a PR for that issue. That would be better. Thanks