As mentioned previously in universal you need to create a dataplane definition and pass it to the kuma-dp run
command.
When transparent proxying is not enabled, the outbound service dependencies have to be manually specified in the Dataplane
entity.
This also means that without transparent proxying you must update your codebases to consume those external services on 127.0.0.1
on the port specified in the outbound
section.
To avoid users bypassing the sidecar, have the service listen only on the internal interface (
127.0.0.1
or::1
) instead of all interfaces (0.0.0.0
or::
).
For example, this is how we start a Dataplane
for a hypothetical Redis service and then start the kuma-dp
process:
cat dp.yaml
type: Dataplane
mesh: default
name: redis-1
networking:
address: 23.234.0.1 # IP of the instance
inbound:
- port: 9000
servicePort: 6379
tags:
kuma.io/service: redis
kuma-dp run \
--cp-address=https://127.0.0.1:5678 \
--dataplane-file=dp.yaml
--dataplane-token-file=/tmp/kuma-dp-redis-1-token
In the example above, any external client who wants to consume Redis through the sidecar will have to use 23.234.0.1:9000
, which will redirect to the Redis service listening on address 127.0.0.1:6379
. If your service doesn’t listen on 127.0.0.1
and you can’t change the address it listens on, you can set the serviceAddress
as shown below.
type: Dataplane
...
networking:
...
inbound:
- port: 9000
serviceAddress: 192.168.1.10
servicePort: 6379
...
This configuration indicates that your service is listening on 192.168.1.10
, and incoming traffic will be redirected to that address.
Note that in Universal dataplanes need to start with a token for authentication. You can learn how to generate tokens in the security section.
Now let’s assume that we have another service called “Backend” that listens on port 80
, and that makes outgoing requests to the redis
service:
cat dp.yaml
type: Dataplane
mesh: default
name:
networking:
address:
inbound:
- port: 8000
servicePort: 80
tags:
kuma.io/service: backend
kuma.io/protocol: http
outbound:
- port: 10000
tags:
kuma.io/service: redis
kuma-dp run \
--cp-address=https://127.0.0.1:5678 \
--dataplane-file=dp.yaml \
--dataplane-var name=`hostname -s` \
--dataplane-var address=192.168.0.2 \
--dataplane-token-file=/tmp/kuma-dp-backend-1-token
In order for the backend
service to successfully consume redis
, we specify an outbound
networking section in the Dataplane
configuration instructing the DP to listen on a new port 10000
and to proxy any outgoing request on port 10000
to the redis
service.
For this to work, we must update our application to consume redis
on 127.0.0.1:10000
.
You can parametrize your
Dataplane
definition, so you can reuse the same file for manykuma-dp
instances or even services.