Use Port Forwarding to Access Applications in a Cluster

    • You need to have a Kubernetes cluster, and the kubectl command-line tool must be configured to communicate with your cluster. It is recommended to run this tutorial on a cluster with at least two nodes that are not acting as control plane hosts. If you do not already have a cluster, you can create one by using or you can use one of these Kubernetes playgrounds:

      Your Kubernetes server must be at or later than version v1.10. To check the version, enter kubectl version.

    • Install MongoDB Shell.
    1. Create a Deployment that runs MongoDB:

      The output of a successful command verifies that the deployment was created:

      1. deployment.apps/mongo created

      View the pod status to check that it is ready:

      1. kubectl get pods

      The output displays the pod created:

      1. NAME READY STATUS RESTARTS AGE

      View the Deployment’s status:

      1. kubectl get deployment

      The output displays that the Deployment was created:

      1. NAME READY UP-TO-DATE AVAILABLE AGE
      2. mongo 1/1 1 1 2m21s

      The Deployment automatically manages a ReplicaSet. View the ReplicaSet status using:

      1. kubectl get replicaset

      The output displays that the ReplicaSet was created:

      1. NAME DESIRED CURRENT READY AGE
      2. mongo-75f59d57f4 1 1 1 3m12s
    2. The output of a successful command verifies that the Service was created:

      Check the Service created:

      1. kubectl get service mongo

      The output displays the service created:

      1. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
      2. mongo ClusterIP 10.96.41.183 <none> 27017/TCP 11s
    3. Verify that the MongoDB server is running in the Pod, and listening on port 27017:

      1. # Change mongo-75f59d57f4-4nd6q to the name of the Pod
      2. kubectl get pod mongo-75f59d57f4-4nd6q --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'

      The output displays the port for MongoDB in that Pod:

        27017 is the TCP port allocated to MongoDB on the internet.

      1. kubectl port-forward allows using resource name, such as a pod name, to select a matching pod to port forward to.

        1. # Change mongo-75f59d57f4-4nd6q to the name of the Pod
        2. kubectl port-forward mongo-75f59d57f4-4nd6q 28015:27017

        which is the same as

        1. kubectl port-forward pods/mongo-75f59d57f4-4nd6q 28015:27017

        or

        or

        1. kubectl port-forward replicaset/mongo-75f59d57f4 28015:27017

        Any of the above commands works. The output is similar to this:

        1. Forwarding from 127.0.0.1:28015 -> 27017
        2. Forwarding from [::1]:28015 -> 27017

        Note: kubectl port-forward does not return. To continue with the exercises, you will need to open another terminal.

      2. Start the MongoDB command line interface:

        1. mongosh --port 28015
      3. At the MongoDB command line prompt, enter the ping command:

        1. db.runCommand( { ping: 1 } )

        A successful ping request returns:

        1. { ok: 1 }

      If you don’t need a specific local port, you can let kubectl choose and allocate the local port and thus relieve you from having to manage local port conflicts, with the slightly simpler syntax:

      1. kubectl port-forward deployment/mongo :27017

      The kubectl tool finds a local port number that is not in use (avoiding low ports numbers, because these might be used by other applications). The output is similar to:

      Connections made to local port 28015 are forwarded to port 27017 of the Pod that is running the MongoDB server. With this connection in place, you can use your local workstation to debug the database that is running in the Pod.

      Note: kubectl port-forward is implemented for TCP ports only. The support for UDP protocol is tracked in .

      Learn more about .