k8s: Mock etcd information collection 95/100695/2
authorPawel Wieczorek <p.wieczorek2@samsung.com>
Mon, 7 Oct 2019 15:00:49 +0000 (17:00 +0200)
committerPawel Wieczorek <p.wieczorek2@samsung.com>
Wed, 29 Jan 2020 16:14:53 +0000 (17:14 +0100)
Rancher does not provide information on etcd as container arguments.
Its collection requires implementation of a new information extraction
method.

RKE does not include etcd process name in container arguments.

Issue-ID: SECCOM-235
Change-Id: I7576474fb2848962360771d2850aeb3f3869790a
Signed-off-by: Pawel Wieczorek <p.wieczorek2@samsung.com>
test/security/k8s/src/check/check.go
test/security/k8s/src/check/cmd/check/check.go
test/security/k8s/src/check/errors.go [new file with mode: 0644]
test/security/k8s/src/check/rancher/rancher.go
test/security/k8s/src/check/raw/raw.go

index cf412c1..728be18 100644 (file)
@@ -8,6 +8,8 @@ type Informer interface {
        GetSchedulerParams() ([]string, error)
        // GetControllerManagerParams returns controller manager parameters.
        GetControllerManagerParams() ([]string, error)
+       // GetEtcdParams returns etcd parameters.
+       GetEtcdParams() ([]string, error)
 }
 
 // Command represents commands run on cluster.
@@ -20,6 +22,8 @@ const (
        SchedulerProcess
        // ControllerManagerProcess represents controller manager command ("kube-controller-manager").
        ControllerManagerProcess
+       // EtcdProcess represents controller manager service ("etcd").
+       EtcdProcess
 )
 
 func (c Command) String() string {
@@ -27,9 +31,10 @@ func (c Command) String() string {
                "kube-apiserver",
                "kube-scheduler",
                "kube-controller-manager",
+               "etcd",
        }
 
-       if c < APIProcess || c > ControllerManagerProcess {
+       if c < APIProcess || c > EtcdProcess {
                return "exit"
        }
        return names[c]
@@ -45,6 +50,8 @@ const (
        SchedulerService
        // ControllerManagerService represents controller manager service ("kubernetes/controller-manager").
        ControllerManagerService
+       // EtcdService represents etcd service ("kubernetes/etcd").
+       EtcdService
 )
 
 func (s Service) String() string {
@@ -52,9 +59,10 @@ func (s Service) String() string {
                "kubernetes/kubernetes",
                "kubernetes/scheduler",
                "kubernetes/controller-manager",
+               "kubernetes/etcd",
        }
 
-       if s < APIService || s > ControllerManagerService {
+       if s < APIService || s > EtcdService {
                return ""
        }
        return names[s]
index d717617..98254ae 100644 (file)
@@ -54,4 +54,14 @@ func main() {
                log.Fatal(err)
        }
        master.CheckControllerManager(controllerManagerParams)
+
+       _, err = info.GetEtcdParams()
+       if err != nil {
+               switch err {
+               case check.ErrNotImplemented:
+                       log.Print(err) // Fail softly.
+               default:
+                       log.Fatal(err)
+               }
+       }
 }
diff --git a/test/security/k8s/src/check/errors.go b/test/security/k8s/src/check/errors.go
new file mode 100644 (file)
index 0000000..d657c18
--- /dev/null
@@ -0,0 +1,10 @@
+package check
+
+import (
+       "errors"
+)
+
+var (
+       // ErrNotImplemented is returned when function is not implemented yet.
+       ErrNotImplemented = errors.New("function not implemented")
+)
index b5e3822..2cf2fbe 100644 (file)
@@ -46,6 +46,12 @@ func (r *Rancher) GetControllerManagerParams() ([]string, error) {
        return getProcessParams(check.ControllerManagerProcess, check.ControllerManagerService)
 }
 
+// GetEtcdParams returns parameters of running etcd.
+// It queries only cluster nodes with "controlplane" role.
+func (r *Rancher) GetEtcdParams() ([]string, error) {
+       return []string{}, check.ErrNotImplemented
+}
+
 func getProcessParams(process check.Command, service check.Service) ([]string, error) {
        hosts, err := listHosts()
        if err != nil {
index 5551159..eea5c01 100644 (file)
@@ -46,6 +46,12 @@ func (r *Raw) GetControllerManagerParams() ([]string, error) {
        return getProcessParams(check.ControllerManagerProcess)
 }
 
+// GetEtcdParams returns parameters of running etcd.
+// It queries only cluster nodes with "controlplane" role.
+func (r *Raw) GetEtcdParams() ([]string, error) {
+       return []string{}, check.ErrNotImplemented
+}
+
 func getProcessParams(process check.Command) ([]string, error) {
        nodes, err := config.GetNodesInfo()
        if err != nil {