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 1c8cee8
Show file tree
Hide file tree
Showing 20 changed files with 304 additions and 156 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.
67 changes: 67 additions & 0 deletions docker/relay/README.adoc
@@ -0,0 +1,67 @@
= 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.

A lot of config files are actually data files, and need to be updated 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
----

== Limitations




== TODO

* [ ] See where to configure policy server (inside or outside of the containers?)
* [ ] Upgrade procedure
* [ ] Expose relayd HTTP API
* [ ] Fix the things not working in remote-run
* [ ] Find why some things are broken in remote-run
* [ ] Fix random start error in cf-server (with `Undefined bundle` messages)


httpd n'a pas le meme id que cf-execd




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

RUN \
mkdir /data /apache_conf_file && \
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 .
policy_server.dat /var/rudder/cfengine-community/policy_server.dat

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
mkdir /agent_certs /node_id /httpd_conf && \
ln -sf /node_id/uuid.hive /opt/rudder/etc/uuid.hive && \
ln -sf /agent_certs/ssl/agent.cert /opt/rudder/etc/ssl/agent.cert && \
ln -sf /agent_certs/ppkeys/localhost.pub /var/rudder/cfengine-community/ppkeys/localhost.pub && \
ln -sf /agent_certs/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"]
22 changes: 9 additions & 13 deletions docker/relay/cf-execd.sh
Expand Up @@ -5,26 +5,22 @@ set -x

# Needed because standard paths are symlinks

if [ ! -f /data/uuid.hive ]; then
/opt/rudder/bin/rudder-uuidgen > /data/uuid.hive
if [ ! -f /node_id/uuid.hive ]; then
/opt/rudder/bin/rudder-uuidgen > /node_id/uuid.hive
fi

uuid=$(cat /data/uuid.hive)
uuid=$(cat /node_id/uuid.hive)

if [ ! -f /data/ppkeys/localhost.pub ]; then
mkdir -p /data/ppkeys
/opt/rudder/bin/cf-key -T 4096 -f /data/ppkeys/localhost
if [ ! -f /agent_certs/ppkeys/localhost.pub ]; then
mkdir -p /agent_certs/ppkeys
/opt/rudder/bin/cf-key -T 4096 -f /agent_certs/ppkeys/localhost
fi

if [ ! -f /opt/rudder/etc/ssl/agent.cert ]; then
mkdir -p /data/ssl
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}"
mkdir -p /agent_certs/ssl
openssl req -new -sha256 -key /agent_certs/ppkeys/localhost.priv -out /agent_certs/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 inventory
rudder agent check -f

/opt/rudder/bin/cf-execd --no-fork --inform
16 changes: 9 additions & 7 deletions docker/relay/cf-serverd.Dockerfile
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
ln -sf /node_id/uuid.hive /opt/rudder/etc/uuid.hive && \
ln -sf /agent_certs/ssl/agent.cert /opt/rudder/etc/ssl/agent.cert && \
ln -sf /agent_certs/ppkeys/localhost.pub /var/rudder/cfengine-community/ppkeys/localhost.pub && \
ln -sf /agent_certs/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
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
166 changes: 108 additions & 58 deletions docker/relay/docker-compose.yml
@@ -1,61 +1,111 @@
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:/agent_certs'
- 'node_id:/node_id'

- '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/rudder/modified-files
- /var/backup/rudder
- /opt/rudder/var/fusioninventory
- /var/rudder/inventories
- /var/rudder/reports
- /tmp
- /etc/cron.d
- /etc/logrotate.d
- /var/log
cf_serverd:
read_only: true
build:
context: .
dockerfile: cf-serverd.Dockerfile
ports:
- "5309:5309"
volumes_from:
# same as cf-execd to allow remote run
- 'cf_execd'
tmpfs:
# same as cf-execd to allow remote run
- /var/rudder/tmp
- /var/rudder/modified-files
- /var/backup/rudder
- /opt/rudder/var/fusioninventory
- /var/rudder/inventories
- /var/rudder/reports
- /tmp
- /etc/cron.d
- /etc/logrotate.d
- /var/log
relayd:
read_only: true
build:
context: .
dockerfile: relayd.Dockerfile
ports:
# remove?
- "127.0.0.1:3030:3030"
volumes:
- 'relayd_nodelist:/var/rudder/lib/relay:ro'
- 'relayd_certs:/var/rudder/lib/ssl:ro'
- 'relayd_conf:/opt/rudder/etc/relayd:ro'
- 'inventories:/var/rudder/inventories'
- 'reports:/var/rudder/reports'
httpd:
read_only: true
build:
context: .
dockerfile: httpd.Dockerfile
ports:
- "443:443"
volumes:
- 'httpd_conf:/httpd_conf:ro'
- 'httpd_certs:/opt/rudder/etc/ssl:ro'
- 'node_id:/node_id:ro'
# windows policies
- 'policies:/var/rudder/share:ro'
- 'inventories:/var/rudder/inventories'
- 'reports:/var/rudder/reports'
tmpfs:
- /var/log/httpd
- /var/log/rudder/apache2
- /run/httpd
# /tmp/davlock.db
- /tmp
volumes:
cfengine_community:
uuid_keys:
ncf:
shared:
secure_httpd:
httpd_conf:
nodelist:
relay_conf:
agent_state:
agent_certs:
node_id:

policies_lib:
policies_src_lib:
policies_loc_lib:
policies:

inventories:
reports:

httpd_certs:
httpd_conf:

relayd_nodelist:
relayd_certs:
relayd_conf:

0 comments on commit 1c8cee8

Please sign in to comment.