mirror of
https://github.com/outbackdingo/firezone.git
synced 2026-01-27 10:18:54 +00:00
ci: create a more realistic network setup (#10301)
Currently, the setup we have in docker-compose does not reflect real-world scenarios very well because most components share the same subnet. In reality, Clients, Gateways, relays and the backend are all in separate subnets, connected via multiple routers on the Internet. The current setup makes it hard to properly test relayed connections. To fix this, we move all components into their own subnet with a dedicated router container that performs source and destination NAT as well as acts as a firewall for the client and gateway containers to not allow inbound traffic. This setup will allow us to more easily test #10286 which requires port randomization for outgoing traffic on the Client and Gateway side.
This commit is contained in:
4
.github/workflows/_integration_tests.yml
vendored
4
.github/workflows/_integration_tests.yml
vendored
@@ -118,6 +118,8 @@ jobs:
|
||||
- uses: ./.github/actions/ghcr-docker-login
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
# We need at least Docker v28.1 which is not yet available on GitHub actions runners
|
||||
- uses: docker/setup-docker-action@b60f85385d03ac8acfca6d9996982511d8620a19 # v4.3.0
|
||||
- name: Seed database
|
||||
run: docker compose run elixir /bin/sh -c 'cd apps/domain && mix ecto.migrate --migrations-path priv/repo/migrations --migrations-path priv/repo/manual_migrations && mix ecto.seed'
|
||||
- name: Start docker compose in the background
|
||||
@@ -128,6 +130,8 @@ jobs:
|
||||
export RUST_LOG="${{ matrix.test.rust_log }}"
|
||||
fi
|
||||
|
||||
docker compose build client-router gateway-router relay-1-router relay-2-router api-router
|
||||
|
||||
# Start one-by-one to avoid variability in service startup order
|
||||
docker compose up -d dns.httpbin.search.test --no-build
|
||||
docker compose up -d httpbin --no-build
|
||||
|
||||
48
.github/workflows/ci.yml
vendored
48
.github/workflows/ci.yml
vendored
@@ -295,27 +295,24 @@ jobs:
|
||||
CLIENT_TAG: ${{ github.sha }}
|
||||
RELAY_IMAGE: "ghcr.io/firezone/perf/relay"
|
||||
RELAY_TAG: ${{ github.sha }}
|
||||
RELAY_1_PUBLIC_IP4_ADDR: 172.29.0.101
|
||||
RELAY_1_PUBLIC_IP6_ADDR: 172:29:0::101
|
||||
RELAY_2_PUBLIC_IP4_ADDR: 172.29.0.102
|
||||
RELAY_2_PUBLIC_IP6_ADDR: 172:29:0::102
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
test_name:
|
||||
- direct-tcp-client2server
|
||||
- direct-tcp-server2client
|
||||
- direct-udp-client2server
|
||||
- direct-udp-server2client
|
||||
- relayed-tcp-client2server
|
||||
- relayed-tcp-server2client
|
||||
- relayed-udp-client2server
|
||||
- relayed-udp-server2client
|
||||
test:
|
||||
- tcp-client2server
|
||||
- tcp-server2client
|
||||
- udp-client2server
|
||||
- udp-server2client
|
||||
flavour:
|
||||
- direct
|
||||
- relayed
|
||||
steps:
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
- uses: ./.github/actions/ghcr-docker-login
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
# We need at least Docker v28.1 which is not yet available on GitHub actions runners
|
||||
- uses: docker/setup-docker-action@b60f85385d03ac8acfca6d9996982511d8620a19 # v4.3.0
|
||||
- name: Seed database
|
||||
run: docker compose run elixir /bin/sh -c 'cd apps/domain && mix ecto.seed --migrations-path priv/repo/migrations --migrations-path priv/repo/manual_migrations'
|
||||
- name: Start docker compose in the background
|
||||
@@ -325,11 +322,17 @@ jobs:
|
||||
sed -i 's/^\(\s*\)RUST_LOG:.*$/\1RUST_LOG: wire=error,opentelemetry_sdk=error,debug/' docker-compose.yml
|
||||
grep RUST_LOG docker-compose.yml
|
||||
|
||||
if [ "${{ matrix.flavour }}" = "relayed" ]; then
|
||||
echo "CLIENT_MASQUERADE=random" >> "$GITHUB_ENV"
|
||||
echo "UDP_BITRATE=300M" >> "$GITHUB_ENV"
|
||||
fi
|
||||
|
||||
docker compose build client-router gateway-router relay-1-router relay-2-router api-router
|
||||
|
||||
# Start services in the same order each time for the tests
|
||||
docker compose up -d iperf3
|
||||
docker compose up -d api web domain --no-build
|
||||
docker compose up -d relay-1 --no-build
|
||||
docker compose up -d relay-2 --no-build
|
||||
docker compose up -d relay-1 relay-2 --no-build
|
||||
docker compose up -d gateway --no-build
|
||||
docker compose up -d client --no-build
|
||||
docker compose up veth-config
|
||||
@@ -338,20 +341,19 @@ jobs:
|
||||
docker compose exec -T client tc qdisc add dev eth0 root netem delay 10ms
|
||||
docker compose exec -T gateway tc qdisc add dev eth0 root netem delay 10ms
|
||||
docker compose exec -T relay-1 tc qdisc add dev eth0 root netem delay 10ms
|
||||
docker compose exec -T relay-2 tc qdisc add dev eth0 root netem delay 10ms
|
||||
- name: "Performance test: ${{ matrix.test_name }}"
|
||||
- name: "Performance test: ${{ matrix.flavour }}-${{ matrix.test }}"
|
||||
timeout-minutes: 5
|
||||
env:
|
||||
TEST_NAME: ${{ matrix.test_name }}
|
||||
TEST_NAME: ${{ matrix.flavour }}-${{ matrix.test }}
|
||||
run: |
|
||||
./scripts/tests/perf/${{ matrix.test_name }}.sh
|
||||
jq '{ "${{ matrix.test_name }}": { "retransmits": { "value": (.end.sum_sent.retransmits // -1) }, "throughput": { "value": .end.sum_received.bits_per_second } } }' ./${{ matrix.test_name }}.json > ./${{ matrix.test_name }}.bmf.json
|
||||
- name: "Save performance test results: ${{ matrix.test_name }}"
|
||||
./scripts/tests/perf/${{ matrix.test }}.sh
|
||||
jq '{ "${{ matrix.flavour }}-${{ matrix.test }}": { "retransmits": { "value": (.end.sum_sent.retransmits // -1) }, "throughput": { "value": .end.sum_received.bits_per_second } } }' ./${{ matrix.flavour }}-${{ matrix.test }}.json > ./${{ matrix.flavour }}-${{ matrix.test }}.bmf.json
|
||||
- name: "Save performance test results: ${{ matrix.flavour }}-${{ matrix.test }}"
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
with:
|
||||
overwrite: true
|
||||
name: ${{ matrix.test_name }}-${{ github.sha }}-iperf3results
|
||||
path: ./${{ matrix.test_name }}.bmf.json
|
||||
name: ${{ matrix.flavour }}-${{ matrix.test }}-${{ github.sha }}-iperf3results
|
||||
path: ./${{ matrix.flavour }}-${{ matrix.test }}.bmf.json
|
||||
- name: Show Client logs
|
||||
if: "!cancelled()"
|
||||
run: docker compose logs client
|
||||
|
||||
Reference in New Issue
Block a user