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
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:
If you specify multiple of these config options, they will be jointly used to select the pod / container (think logical AND / &&
).
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.
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
andbackend-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 thedev.ports
section referencesbackend
. That means DevSpace would select the first container for port-forwarding, as this container uses theimage: john/devbackend
which belongs to thebackend
image as defined in theimages
section. - The
imageName
option of the second port-forwarding configuration in thedev.ports
section referencesbackend-debugger
. That means DevSpace would select the second container for port-forwarding, as this container uses theimage: john/debugger
which belongs to thebackend-debugger
image as defined in theimages
section.
In consequence, the following port-forwarding processes would be started when using the above config example:
localhost:8080
forwards tocontainer-0:80
localhost:3000
forwards tocontainer-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 deploymentapp-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.
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.
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].
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].
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