[k8s] Add base test for externaldns integration

- Add test for externaldns with coredns backend on basic
deployments.
- Add few core functions as remote executions of kubectl.

User-Story: https://mirantis.jira.com/browse/PROD-12826

Change-Id: I9230ddd75905759eb2d0ba8486ba896d2094cebb
diff --git a/tcp_tests/managers/k8smanager.py b/tcp_tests/managers/k8smanager.py
index f02c843..7d9b142 100644
--- a/tcp_tests/managers/k8smanager.py
+++ b/tcp_tests/managers/k8smanager.py
@@ -336,3 +336,48 @@
                                                  pillar='linux:network:fqdn')
         return [self._K8SManager__underlay.host_by_node_name(node_name=v)
                 for pillar in k8s_masters_fqdn for k, v in pillar.items()]
+
+    def kubectl_run(self, name, image, port):
+        with self.__underlay.remote(
+                host=self.__config.k8s.kube_host) as remote:
+            result = remote.check_call(
+                "kubectl run {0} --image={1} --port={2}".format(
+                    name, image, port
+                )
+            )
+            return result
+
+    def kubectl_expose(self, resource, name, port, type):
+        with self.__underlay.remote(
+                host=self.__config.k8s.kube_host) as remote:
+            result = remote.check_call(
+                "kubectl expose {0} {1} --port={2} --type={3}".format(
+                    resource, name, port, type
+                )
+            )
+            return result
+
+    def kubectl_annotate(self, resource, name, annotaion):
+        with self.__underlay.remote(
+                host=self.__config.k8s.kube_host) as remote:
+            result = remote.check_call(
+                "kubectl annotate {0} {1} {3}".format(
+                    resource, name, annotaion
+                )
+            )
+            return result
+
+    def get_svc_ip(self, name):
+        with self.__underlay.remote(
+                host=self.__config.k8s.kube_host) as remote:
+            result = remote.check_call(
+                "kubectl get svc --all-namespaces | grep {0} | "
+                "awk '{{print $2}}'".format(name)
+            )
+            return result['stdout'][0].strip()
+
+    def nslookup(self, host, src):
+        with self.__underlay.remote(
+                host=self.__config.k8s.kube_host) as remote:
+            remote.check_call("nslookup {0} {1}".format(host, src))
+