Skip to content

Commit 2c0e4c6

Browse files
committed
fix(services): use COREOS_PUBLIC_IPV4 for advertised IP
Currently, all containers use a hacky method to determine the IP to advertise to etcd - the method determines the machine's default route, and uses that IP. However, this can be configured very differently depending on the environment, and in some cases doesn't work at all. Instead, we use COREOS_PUBLIC_IPV4, as that is set on every CoreOS host, and we trust that CoreOS knows the machine's networks better than we do. fixes #845
1 parent 9f8c0f3 commit 2c0e4c6

8 files changed

Lines changed: 16 additions & 9 deletions

File tree

builder/systemd/deis-builder.service

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22
Description=deis-builder
33

44
[Service]
5+
EnvironmentFile=/etc/environment
56
TimeoutStartSec=20m
67
ExecStartPre=/bin/sh -c "/usr/bin/docker history deis/builder >/dev/null || /usr/bin/docker pull deis/builder"
78
ExecStartPre=/bin/bash -c "/usr/bin/docker start deis-builder-data || /usr/bin/docker run --name deis-builder-data -v /var/lib/docker deis/base /bin/true"
8-
ExecStart=/bin/sh -c "IFACE=$(netstat -nr | grep ^0.0.0.0 | awk '{print $8}') && HOST_IP=$(/bin/ifconfig $IFACE | awk '/inet /{print $2}') && exec /usr/bin/docker run --name deis-builder -p 2222:22 -e PUBLISH=22 -e HOST=$HOST_IP -e PORT=2222 --volumes-from deis-builder-data --privileged deis/builder"
9+
ExecStart=/bin/sh -c "docker run --name deis-builder -p 2222:22 -e PUBLISH=22 -e HOST=$COREOS_PRIVATE_IPV4 -e PORT=2222 --volumes-from deis-builder-data --privileged deis/builder"
910
ExecStop=/usr/bin/docker rm -f deis-builder
1011

1112
[Install]

cache/systemd/deis-cache.service

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
Description=deis-cache
33

44
[Service]
5+
EnvironmentFile=/etc/environment
56
TimeoutStartSec=20m
67
ExecStartPre=/bin/sh -c "/usr/bin/docker history deis/cache || /usr/bin/docker pull deis/cache"
7-
ExecStart=/bin/sh -c "IFACE=$(netstat -nr | grep ^0.0.0.0 | awk '{print $8}') && HOST_IP=$(/bin/ifconfig $IFACE | awk '/inet /{print $2}') && exec /usr/bin/docker run --name deis-cache -p 6379:6379 -e PUBLISH=6379 -e HOST=$HOST_IP deis/cache"
8+
ExecStart=/bin/sh -c "docker run --name deis-cache -p 6379:6379 -e PUBLISH=6379 -e HOST=$COREOS_PRIVATE_IPV4 deis/cache"
89
ExecStop=/usr/bin/docker rm -f deis-cache
910

1011
[Install]

controller/scheduler/coreos.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ def attach(self, name):
223223
[Service]
224224
EnvironmentFile=/etc/environment
225225
ExecStartPre=/bin/sh -c "until /usr/bin/docker port {name} {port} >/dev/null 2>&1; do sleep 2; done; port=$(docker port {name} {port} | cut -d ':' -f2); echo Waiting for $port/tcp...; until netstat -lnt | grep :$port >/dev/null; do sleep 1; done"
226-
ExecStart=/bin/sh -c "port=$(docker port {name} {port} | cut -d ':' -f2); echo Connected to $COREOS_PUBLIC_IPV4:$port/tcp, publishing to etcd...; while netstat -lnt | grep :$port >/dev/null; do etcdctl set /deis/services/{app}/{name} $COREOS_PUBLIC_IPV4:$port --ttl 60 >/dev/null; sleep 45; done"
226+
ExecStart=/bin/sh -c "port=$(docker port {name} {port} | cut -d ':' -f2); echo Connected to $COREOS_PRIVATE_IPV4:$port/tcp, publishing to etcd...; while netstat -lnt | grep :$port >/dev/null; do etcdctl set /deis/services/{app}/{name} $COREOS_PRIVATE_IPV4:$port --ttl 60 >/dev/null; sleep 45; done"
227227
ExecStop=/usr/bin/etcdctl rm --recursive /deis/services/{app}/{name}
228228
229229
[X-Fleet]

controller/systemd/deis-controller.service

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ Requires=deis-logger.service deis-builder.service
44
After=deis-logger.service deis-builder.service
55

66
[Service]
7+
EnvironmentFile=/etc/environment
78
TimeoutStartSec=20m
89
ExecStartPre=/bin/sh -c "/usr/bin/docker history deis/controller >/dev/null || /usr/bin/docker pull deis/controller"
9-
ExecStart=/bin/sh -c "IFACE=$(netstat -nr | grep ^0.0.0.0 | awk '{print $8}') && HOST_IP=$(/bin/ifconfig $IFACE | awk '/inet /{print $2}') && exec /usr/bin/docker run --name deis-controller -p 8000:8000 -e PUBLISH=8000 -e HOST=$HOST_IP --volumes-from=deis-logger deis/controller"
10+
ExecStart=/bin/sh -c "docker run --name deis-controller -p 8000:8000 -e PUBLISH=8000 -e HOST=$COREOS_PRIVATE_IPV4 --volumes-from=deis-logger deis/controller"
1011
ExecStop=/usr/bin/docker rm -f deis-controller
1112

1213
[Install]

database/systemd/deis-database.service

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22
Description=deis-database
33

44
[Service]
5+
EnvironmentFile=/etc/environment
56
TimeoutStartSec=20m
67
ExecStartPre=/bin/sh -c "/usr/bin/docker history deis/database >/dev/null || /usr/bin/docker pull deis/database"
78
ExecStartPre=/bin/bash -c "/usr/bin/docker start deis-database-data || /usr/bin/docker run --name deis-database-data -v /var/lib/postgresql deis/base /bin/true"
8-
ExecStart=/bin/sh -c "IFACE=$(netstat -nr | grep ^0.0.0.0 | awk '{print $8}') && HOST_IP=$(/bin/ifconfig $IFACE | awk '/inet /{print $2}') && exec /usr/bin/docker run --name deis-database -p 5432:5432 -e PUBLISH=5432 -e HOST=$HOST_IP --volumes-from deis-database-data deis/database
9+
ExecStart=/bin/sh -c "docker run --name deis-database -p 5432:5432 -e PUBLISH=5432 -e HOST=$COREOS_PRIVATE_IPV4 --volumes-from deis-database-data deis/database
910
ExecStop=/usr/bin/docker rm -f deis-database
1011
1112
[Install]

logger/systemd/deis-logger.service

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22
Description=deis-logger
33

44
[Service]
5+
EnvironmentFile=/etc/environment
56
TimeoutStartSec=20m
67
ExecStartPre=/bin/sh -c "/usr/bin/docker history deis/logger >/dev/null || /usr/bin/docker pull deis/logger"
78
ExecStartPre=/bin/bash -c "/usr/bin/docker start deis-logger-data || /usr/bin/docker run --name deis-logger-data -v /var/log/deis deis/base /bin/true"
8-
ExecStart=/bin/sh -c "IFACE=$(netstat -nr | grep ^0.0.0.0 | awk '{print $8}') && HOST_IP=$(/bin/ifconfig $IFACE | awk '/inet /{print $2}') && exec /usr/bin/docker run --name deis-logger -p 514:514/udp -e PUBLISH=514 -e HOST=$HOST_IP --volumes-from deis-logger-data deis/logger"
9+
ExecStart=/bin/sh -c "docker run --name deis-logger -p 514:514/udp -e PUBLISH=514 -e HOST=$COREOS_PRIVATE_IPV4 --volumes-from deis-logger-data deis/logger"
910
ExecStop=/usr/bin/docker rm -f deis-logger
1011

1112
[Install]

registry/systemd/deis-registry.service

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
Description=deis-registry
33

44
[Service]
5+
EnvironmentFile=/etc/environment
56
TimeoutStartSec=20m
67
ExecStartPre=/bin/sh -c "/usr/bin/docker history deis/registry >/dev/null || /usr/bin/docker pull deis/registry"
78
ExecStartPre=/bin/bash -c "/usr/bin/docker start deis-registry-data || /usr/bin/docker run --name deis-registry-data -v /data deis/base /bin/true"
8-
ExecStart=/bin/sh -c "IFACE=$(netstat -nr | grep ^0.0.0.0 | awk '{print $8}') && HOST_IP=$(/bin/ifconfig $IFACE | awk '/inet /{print $2}') && exec /usr/bin/docker run --name deis-registry -p 5000:5000 -e PUBLISH=5000 -e HOST=$HOST_IP --volumes-from deis-registry-data deis/registry"
9-
ExecStartPost=/bin/sh -c "IFACE=$(netstat -nr | grep ^0.0.0.0 | awk '{print $8}') && HOST_IP=$(/bin/ifconfig $IFACE | awk '/inet /{print $2}') && echo 'Waiting for listener on 5000/tcp...' && until cat </dev/null>/dev/tcp/$HOST_IP/5000; do sleep 1; done && docker pull deis/slugrunner:latest && docker tag deis/slugrunner $HOST_IP:5000/deis/slugrunner && docker push $HOST_IP:5000/deis/slugrunner"
9+
ExecStart=/bin/sh -c "docker run --name deis-registry -p 5000:5000 -e PUBLISH=5000 -e HOST=$COREOS_PRIVATE_IPV4 --volumes-from deis-registry-data deis/registry"
10+
ExecStartPost=/bin/sh -c "echo 'Waiting for listener on 5000/tcp...' && until cat </dev/null>/dev/tcp/$COREOS_PRIVATE_IPV4/5000; do sleep 1; done && docker pull deis/slugrunner:latest && docker tag deis/slugrunner $COREOS_PRIVATE_IPV4:5000/deis/slugrunner && docker push $COREOS_PRIVATE_IPV4:5000/deis/slugrunner"
1011
ExecStop=/usr/bin/docker rm -f deis-registry
1112

1213
[Install]

router/systemd/deis-router.service

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
Description=deis-router
33

44
[Service]
5+
EnvironmentFile=/etc/environment
56
TimeoutStartSec=20m
67
ExecStartPre=/bin/sh -c "/usr/bin/docker history deis/router >/dev/null || /usr/bin/docker pull deis/router"
7-
ExecStart=/bin/sh -c "IFACE=$(netstat -nr | grep ^0.0.0.0 | awk '{print $8}') && HOST_IP=$(/bin/ifconfig $IFACE | awk '/inet /{print $2}') && exec /usr/bin/docker run --name deis-router -p 80:80 -e PUBLISH=80 -e HOST=$HOST_IP deis/router"
8+
ExecStart=/bin/sh -c "docker run --name deis-router -p 80:80 -e PUBLISH=80 -e HOST=$COREOS_PRIVATE_IPV4 deis/router"
89
ExecStop=/usr/bin/docker rm -f deis-router
910

1011
[Install]

0 commit comments

Comments
 (0)