Skip to content

Commit

Permalink
Work in progress
Browse files Browse the repository at this point in the history
  • Loading branch information
amousset committed Sep 25, 2020
1 parent e61a3ba commit df44289
Show file tree
Hide file tree
Showing 18 changed files with 200 additions and 126 deletions.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
51 changes: 51 additions & 0 deletions docker/relay/README.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
= relay

== Goals

We want to be able to

== Summary

These containers provide a full Rudder relay running in unprivileged
read-only containers.

Each service runs in its own read-only container.

The relay is almost stateless and the only data that needs to be persisted is:

* Agent id and key pair
* HTTP server key pair

Everything else can be rebuilt dynamically.

== Images

Images are currently based on CentOS 8 and install Rudder 6.1 using rudder-setup.

We use the standard packages (after disabling service management to allow
packaging scripts calls to systemctl to succeed).

The `cf-execd` container is a bit different as it synchronizes the policies
from the server and shares some of them with the other containers.

== Agent

An agent is required to run a relay.

== Run a relay

We provide a docker-compose configuration example.

You need to modify the policy_server.dat file to set the right policy server.

----
docker-compose up
----

== TODO

* [ ] See to configure policy server (inside or outside of the container?)
* [ ]


Contraintes pour l'update : les volumes ne doivent pas contenir de trucs à mettre à jour
26 changes: 11 additions & 15 deletions docker/relay/cf-execd.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,21 @@ RUN \
sh rudder-setup add-repository 6.1 && \
yum -y install rudder-server-relay

COPY \
policy_server.dat /var/rudder/cfengine-community/policy_server.dat

RUN \
mkdir /data /apache_conf_file && \
mkdir /data /httpd_conf && \
ln -sf /data/uuid.hive /opt/rudder/etc/uuid.hive && \
ln -sf /data/ssl/agent.cert /opt/rudder/etc/ssl/agent.cert && \
ln -sf /data/ppkeys/localhost.pub /var/rudder/cfengine-community/ppkeys/localhost.pub && \
ln -sf /data/ppkeys/localhost.priv /var/rudder/cfengine-community/ppkeys/localhost.priv
COPY \
script.sh .

RUN \
sh script.sh && \
ln -sf /apache_conf_file/rudder-networks-24.conf /opt/rudder/etc/rudder-networks-24.conf && \
ln -sf /apache_conf_file/rudder-networks-policy-server-24.conf /opt/rudder/etc/rudder-networks-policy-server-24.conf && \
ln -sf /apache_conf_file/rudder-apache-relay-ssl.conf /opt/rudder/etc/rudder-apache-relay-ssl.conf && \
ln -sf /apache_conf_file/rudder-apache-relay-common.conf /opt/rudder/etc/rudder-apache-relay-common.conf && \
ln -sf /apache_conf_file/rudder-apache-relay-nossl.conf /opt/rudder/etc/rudder-apache-relay-nossl.conf
ln -sf /data/ppkeys/localhost.priv /var/rudder/cfengine-community/ppkeys/localhost.priv && \
for f in rudder-networks-24.conf rudder-networks-policy-server-24.conf rudder-apache-relay-ssl.conf \
rudder-apache-relay-common.conf rudder-apache-relay-nossl.conf htpasswd-webdav htpasswd-webdav-initial; \
do \
cp /opt/rudder/etc/${f} /httpd_conf/${f} && \
ln -sf /httpd_conf/${f} /opt/rudder/etc/${f}; \
done

COPY \
cf-execd.sh .
Expand All @@ -35,7 +34,4 @@ RUN \
yum clean all && \
rm -rf /var/rudder/cfengine-community/state/*


ENTRYPOINT ["/bin/bash", "-c"]

CMD ["./cf-execd.sh"]
4 changes: 1 addition & 3 deletions docker/relay/cf-execd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,7 @@ if [ ! -f /opt/rudder/etc/ssl/agent.cert ]; then
openssl req -new -sha256 -key /data/ppkeys/localhost.priv -out /data/ssl/agent.cert -passin "pass:Cfengine passphrase" -x509 -days 3650 -extensions agent_cert -config /opt/rudder/etc/ssl/openssl-agent.cnf -subj "/UID=${uuid}"
fi

echo "server" > /var/rudder/cfengine-community/policy_server.dat

rudder agent check
rudder agent check -f

rudder agent inventory

Expand Down
8 changes: 5 additions & 3 deletions docker/relay/cf-serverd.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,22 @@ RUN \
sh rudder-setup add-repository 6.1 && \
yum -y install rudder-agent

COPY \
policy_server.dat /var/rudder/cfengine-community/policy_server.dat

RUN \
ln -sf /data/uuid.hive /opt/rudder/etc/uuid.hive && \
ln -sf /data/ssl/agent.cert /opt/rudder/etc/ssl/agent.cert && \
ln -sf /data/ppkeys/localhost.pub /var/rudder/cfengine-community/ppkeys/localhost.pub && \
ln -sf /data/ppkeys/localhost.priv /var/rudder/cfengine-community/ppkeys/localhost.priv

COPY cf-serverd.sh .
COPY \
cf-serverd.sh .

RUN \
yum clean all && \
rm -rf /var/rudder/cfengine-community/state/*

EXPOSE 5309

ENTRYPOINT ["/bin/bash", "-c"]

CMD ["./cf-serverd.sh"]
1 change: 1 addition & 0 deletions docker/relay/cf-serverd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
set -e
set -x

# Wait until cf-execd has fetched initial policies
while [ ! -f /var/rudder/cfengine-community/inputs/promises.cf ]
do
sleep 1
Expand Down
133 changes: 75 additions & 58 deletions docker/relay/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,61 +1,78 @@
version: "2"
version: '2'
services:
cf_execd:
read_only: true
build:
context: .
dockerfile: cf-execd.Dockerfile
volumes:
- cfengine_community:/var/rudder/cfengine-community/
- uuid_keys:/data
- ncf:/var/rudder/ncf
- shared:/var/rudder/share
- secure_httpd:/opt/rudder/etc/ssl/
- httpd_conf:/apache_conf_file
- relay_conf:/opt/rudder/etc/relayd
- nodelist:/var/rudder/lib/relay/
tmpfs:
- /var/rudder/tmp
- /var/backup/rudder
- /opt/rudder/var/fusioninventory
- /var/rudder/inventories
external_links:
- server
cf_serverd:
read_only: true
build:
context: .
dockerfile: cf-serverd.Dockerfile
volumes:
- cfengine_community:/var/rudder/cfengine-community/
- uuid_keys:/data:ro
- ncf:/var/rudder/ncf:ro
- shared:/var/rudder/share:ro
relay:
read_only: true
build:
context: .
dockerfile: relay.Dockerfile
volumes:
- nodelist:/var/rudder/lib/relay:ro
- relay_conf:/opt/rudder/etc/relayd:ro
tmpfs:
- /var/rudder/reports
- /var/rudder/inventories
httpd:
build:
context: .
dockerfile: httpd.Dockerfile
volumes:
- httpd_conf:/apache_conf_file:ro
- secure_httpd:/opt/rudder/etc/ssl:ro
cf_execd:
hostname: "relay"
read_only: true
build:
context: .
dockerfile: cf-execd.Dockerfile
volumes:
- 'agent_state:/var/rudder/cfengine-community/'
- 'agent_certs:/data'

- 'policies_lib:/var/rudder/ncf'
- 'policies_src_lib:/usr/share/ncf/tree'
- 'policies_loc_lib:/var/rudder/configuration-repository/ncf'
- 'policies:/var/rudder/share'

- 'httpd_certs:/opt/rudder/etc/ssl/'
- 'httpd_conf:/httpd_conf'

- 'relayd_conf:/opt/rudder/etc/relayd'
- 'relayd_nodelist:/var/rudder/lib/relay/'
- 'relayd_certs:/var/rudder/lib/ssl/'
tmpfs:
- /var/rudder/tmp
- /var/backup/rudder
- /opt/rudder/var/fusioninventory
- /var/rudder/inventories
- /var/rudder/reports
- /tmp
- /etc/cron.d
cf_serverd:
read_only: true
build:
context: .
dockerfile: cf-serverd.Dockerfile
volumes:
- 'agent_state:/var/rudder/cfengine-community/'
- 'agent_certs:/data:ro'

- 'policies_lib:/var/rudder/ncf:ro'
- 'policies_src_lib:/usr/share/ncf/tree:ro'
- 'policies_loc_lib:/var/rudder/configuration-repository/ncf:ro'
- 'policies:/var/rudder/share:ro'
relayd:
read_only: true
build:
context: .
dockerfile: relayd.Dockerfile
volumes:
- 'relayd_nodelist:/var/rudder/lib/relay:ro'
- 'relayd_certs:/var/rudder/lib/ssl:ro'
- 'relayd_conf:/opt/rudder/etc/relayd:ro'
tmpfs:
- /var/rudder/reports
- /var/rudder/inventories
httpd:
read_only: true
build:
context: .
dockerfile: httpd.Dockerfile
volumes:
- 'httpd_conf:/httpd_conf:ro'
- 'httpd_certs:/opt/rudder/etc/ssl:ro'
tmpfs:
- /etc/httpd/logs
volumes:
cfengine_community:
uuid_keys:
ncf:
shared:
secure_httpd:
httpd_conf:
nodelist:
relay_conf:
agent_state:
agent_certs:
policies_lib:
policies_src_lib:
policies_loc_lib:
policies:
httpd_certs:
httpd_conf:
relayd_nodelist:
relayd_certs:
relayd_conf:
57 changes: 33 additions & 24 deletions docker/relay/httpd.Dockerfile
Original file line number Diff line number Diff line change
@@ -1,24 +1,33 @@
FROM centos:8

RUN \
yum -y install diffutils curl && \
curl -o rudder-setup https://repository.rudder.io/tools/rudder-setup && \
sh rudder-setup add-repository 6.1 && \
yum -y install rudder-server-relay && \
/usr/libexec/httpd-ssl-gencerts && \
yum clean all

RUN \
mkdir /apache_conf_file && \
ln -sf /apache_conf_file/rudder-networks-24.conf /opt/rudder/etc/rudder-networks-24.conf && \
ln -sf /apache_conf_file/rudder-networks-policy-server-24.conf /opt/rudder/etc/rudder-networks-policy-server-24.conf && \
ln -sf /apache_conf_file/rudder-apache-relay-ssl.conf /opt/rudder/etc/rudder-apache-relay-ssl.conf && \
ln -sf /apache_conf_file/rudder-apache-relay-common.conf /opt/rudder/etc/rudder-apache-relay-common.conf && \
ln -sf /apache_conf_file/rudder-apache-relay-nossl.conf /opt/rudder/etc/rudder-apache-relay-nossl.conf


EXPOSE 80 443

ENTRYPOINT ["/bin/bash", "-c"]

CMD ["/usr/sbin/apachectl -DFOREGROUND"]
FROM centos:8

RUN \
ln -sf /bin/true /usr/sbin/service && \
ln -sf /bin/true /bin/systemctl && \
ln -sf /bin/true /usr/bin/systemctl

# We install the relay package is it does some config for httpd
RUN \
yum -y install epel-release && \
yum -y install diffutils curl inotify-tools && \
curl -o rudder-setup https://repository.rudder.io/tools/rudder-setup && \
sh rudder-setup add-repository 6.1 && \
yum -y install rudder-server-relay && \
/usr/libexec/httpd-ssl-gencerts

RUN \
mkdir /httpd_conf && \
for f in rudder-networks-24.conf rudder-networks-policy-server-24.conf rudder-apache-relay-ssl.conf \
rudder-apache-relay-common.conf rudder-apache-relay-nossl.conf htpasswd-webdav htpasswd-webdav-initial; \
do \
ln -sf /httpd_conf/${f} /opt/rudder/etc/${f}; \
done

COPY \
httpd.sh .

RUN \
yum clean all

EXPOSE 80 443

CMD ["./httpd.sh"]
16 changes: 16 additions & 0 deletions docker/relay/httpd.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/sh

set -e
set -x

/usr/sbin/apachectl -DFOREGROUND &

# watch for changes in /apache_config_file and update http if there is one on /backup
while true; do
changes=$(inotifywait -m -e move,create,modify /httpd_conf/);
exit_code=$?
if [ $exit_code != 0 ]; then
echo "reloading httpd config"
exec /usr/sbin/httpd -k graceful
fi
done
1 change: 1 addition & 0 deletions docker/relay/policy_server.dat
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
server
5 changes: 0 additions & 5 deletions docker/relay/relay.sh

This file was deleted.

14 changes: 6 additions & 8 deletions docker/relay/relay.Dockerfile → docker/relay/relayd.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,13 @@ RUN \
yum -y install diffutils curl && \
curl -o rudder-setup https://repository.rudder.io/tools/rudder-setup && \
sh rudder-setup add-repository 6.1 && \
yum -y install rudder-server-relay && \
/usr/libexec/httpd-ssl-gencerts && \
yum clean all

COPY relay.sh .
yum -y install rudder-server-relay

RUN \
yum clean all

EXPOSE 80 443 3030
EXPOSE 3030

ENTRYPOINT ["/bin/bash", "-c"]
# FIXME reload relayd !

CMD ["./relay.sh"]
CMD ["/opt/rudder/bin/rudder-relayd"]
10 changes: 0 additions & 10 deletions docker/relay/script.sh

This file was deleted.

0 comments on commit df44289

Please sign in to comment.