Version: 5.3

Configure Port-Forwarding

Port-forwarding allows you to access your application on localhost:[PORT] by forwarding the network traffic from a localhost port to a specified port of a container.

When starting the development mode, DevSpace starts port-forwarding as configured in the dev.ports section of the devspace.yaml.

images:
backend:
image: john/devbackend
backend-debugger:
image: john/debugger
deployments:
- name: app-backend
helm:
componentChart: true
values:
containers:
- image: john/devbackend
- image: john/debugger
dev:
ports:
- imageName: backend
forward:
- port: 8080
remotePort: 80
Unique Local Port

The port option must be unique across your entire ports section, e.g. you can only use the value 8080 once for the port option in your ports section.

Every port-forwarding configuration consists of two parts:

Pod Selection

The following config options are needed to determine the pod to which the traffic should be forwarded:

Combine Options

If you specify multiple of these config options, they will be jointly used to select the pod / container (think logical AND / &&).

Auto Reconnect

If DevSpace is unable to establish a port-forwarding connection to the selected pod or loses it after starting the port-forwarding, DevSpace will try to restart port-forwarding several times.

imageName

The imageName option expects a string with the name of an image from the images section of the devspace.yaml. Using imageName tells DevSpace to select the container/pod based on the referenced image that was last built using DevSpace.

warning

Using imageName is not possible if multiple deployments use the same image that belongs to this imageName referencing the images section of the devspace.yaml.

Example: Select Pod by Image Name

images:
backend:
image: john/devbackend
backend-debugger:
image: john/debugger
deployments:
- name: app-backend
helm:
componentChart: true
values:
containers:
- name: container-0
image: john/devbackend
- name: container-1
image: john/debugger
dev:
ports:
- imageName: backend
forward:
- port: 8080
remotePort: 80
- imageName: backend-debugger
forward:
- port: 3000

Explanation:

  • The above example defines two images that can be used as imageName: backend and backend-debugger
  • The deployment starts two containers and each of them uses an image from the images section.
  • The imageName option of the first port-forwarding configuration in the dev.ports section references backend. That means DevSpace would select the first container for port-forwarding, as this container uses the image: john/devbackend which belongs to the backend image as defined in the images section.
  • The imageName option of the second port-forwarding configuration in the dev.ports section references backend-debugger. That means DevSpace would select the second container for port-forwarding, as this container uses the image: john/debugger which belongs to the backend-debugger image as defined in the images section.

In consequence, the following port-forwarding processes would be started when using the above config example:

  • localhost:8080 forwards to container-0:80
  • localhost:3000 forwards to container-1:3000

labelSelector

The labelSelector option expects a key-value map of strings with Kubernetes labels.

Example: Select Pod by Label

images:
backend:
image: john/devbackend
backend-debugger:
image: john/debugger
deployments:
- name: app-backend
helm:
componentChart: true
values:
containers:
- name: container-0
image: john/devbackend
- name: container-1
image: john/debugger
dev:
ports:
- labelSelector:
app.kubernetes.io/name: devspace-app
app.kubernetes.io/component: app-backend
custom-label: custom-label-value
forward:
- port: 8080
remotePort: 80

Explanation:

  • The labelSelector would select the pod created for the component deployment app-backend.
  • Because containers in the same pod share the same network stack, we do not need to specify which container should be selected.

namespace

The namespace option expects a string with a Kubernetes namespace used to select the pod from.

warning

It is generally not needed (nor recommended) to specify the namespace option because, by default, DevSpace uses the default namespace of your current kube-context which is usually the one that has been used to deploy your containers to.

Port Mapping forward

The forward section defines which localhost port should be forwarded to the remotePort of the selected container.

note

By default, remotePort will take the same value as port if remotePort is not explicitly defined.

port

The port option is mandatory and expects an integer from the range of user ports [1024 - 49151].

warning

Using a port < 1024 is likely to cause problems as these ports are reserved as system ports.

Example

See "Example: Select Pod by Image Name"

remotePort

The remotePort option expects an integer from the range of valid ports [0 - 65535].

info

By default, remotePort has the same value as port if remotePort is not explictly defined.

Example

See "Example: Select Pod by Image Name"

bindAddress

The bindAddress option expects a valid IP address that the local port should be bound to.

Default Value For bindAddress

bindAddress: "0.0.0.0" # listen on all network interfaces