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))
+
diff --git a/tcp_tests/settings_oslo.py b/tcp_tests/settings_oslo.py
index 741a487..cc50762 100644
--- a/tcp_tests/settings_oslo.py
+++ b/tcp_tests/settings_oslo.py
@@ -278,7 +278,15 @@
     ct.Cfg('kubernetes_virtlet_enabled', ct.Boolean(),
            help="", default=False),
     ct.Cfg('kubernetes_virtlet_image', ct.String(),
-           help="", default='mirantis/virtlet:v0.7.0')
+           help="", default='mirantis/virtlet:v0.7.0'),
+    ct.Cfg('kubernetes_externaldns_enabled', ct.Boolean(),
+           help="", default=False),
+    ct.Cfg('kubernetes_externaldns_image', ct.String(),
+           help="", default='mirantis/external-dns:latest'),
+    ct.Cfg('kubernetes_externaldns_provider', ct.String(),
+           help="", default='coredns'),
+    ct.Cfg('kubernetes_coredns_enabled', ct.Boolean(),
+           help="", default=False)
 ]
 
 k8s_opts = [
diff --git a/tcp_tests/tests/system/test_k8s_actions.py b/tcp_tests/tests/system/test_k8s_actions.py
new file mode 100644
index 0000000..77ed04a
--- /dev/null
+++ b/tcp_tests/tests/system/test_k8s_actions.py
@@ -0,0 +1,61 @@
+#    Copyright 2017 Mirantis, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import pytest
+
+from tcp_tests import logger
+from tcp_tests import settings
+
+LOG = logger.logger
+
+
+class TestMCPK8sActions(object):
+    """Test class for different k8s actions"""
+
+    @pytest.mark.fail_snapshot
+    def test_k8s_externaldns_coredns(self, show_step, config, k8s_deployed):
+        """Test externaldns integration with coredns
+
+        Scenario:
+        1. Install k8s with externaldns addon enabled(including etcd, coredns)
+        2. Start simple service
+        3. Expose deployment
+        4. Annotate service with domain name
+        5. Try to get service using nslookup
+        """
+
+        if not (config.k8s_deploy.kubernetes_externaldns_enabled and
+                config.k8s_deploy.kubernetes_coredns_enabled):
+            pytest.skip("Test requires Externaldns and coredns addons enabled")
+
+        show_step(1)
+        k8sclient = k8s_deployed.api
+        assert k8sclient.nodes.list() is not None, "Can not get nodes list"
+
+        show_step(2)
+        name = 'test-nginx'
+        k8s_deployed.kubectl_run(name, 'nginx', '80')
+
+        show_step(3)
+        k8s_deployed.kubectl_expose('deployment', name, '80', 'ClusterIP')
+
+        hostname = "test.{0}.local".format(settings.LAB_CONFIG_NAME)
+        annotation = "\"external-dns.alpha.kubernetes.io/" \
+                     "hostname={0}\"".format(hostname)
+        show_step(4)
+        k8s_deployed.kubectl_annotate('service', name, annotation)
+
+        show_step(5)
+        dns_host = k8s_deployed.get_svc_ip('coredns')
+        k8s_deployed.nslookup(hostname, dns_host)
