From f6eb89431da823c202284b2613576ba1fe976a9a Mon Sep 17 00:00:00 2001 From: Taylor Silva Date: Sat, 8 Jun 2024 11:23:21 -0400 Subject: [PATCH 1/4] skeleton of detailed install docs need to fill in the details next Signed-off-by: Taylor Silva --- lit/docs/install.lit | 1 + lit/docs/install/docker-compose.lit | 3 +++ lit/docs/install/helm.lit | 3 +++ lit/docs/install/install-guides.lit | 11 +++++++++++ lit/docs/install/systemd.lit | 5 +++++ 5 files changed, 23 insertions(+) create mode 100644 lit/docs/install/docker-compose.lit create mode 100644 lit/docs/install/helm.lit create mode 100644 lit/docs/install/install-guides.lit create mode 100644 lit/docs/install/systemd.lit diff --git a/lit/docs/install.lit b/lit/docs/install.lit index 8a614ce5..9d0c5a9d 100644 --- a/lit/docs/install.lit +++ b/lit/docs/install.lit @@ -45,3 +45,4 @@ The high-level steps to follow for installing Concourse are: \include-section{install/web.lit} \include-section{install/worker.lit} \include-section{install/upgrading.lit} +\include-section{install/install-guides.lit} diff --git a/lit/docs/install/docker-compose.lit b/lit/docs/install/docker-compose.lit new file mode 100644 index 00000000..d06a71f3 --- /dev/null +++ b/lit/docs/install/docker-compose.lit @@ -0,0 +1,3 @@ +\title{\aux{Install Concourse with} Docker Compose}{install-docker-compose} + +\use-plugin{concourse-docs} diff --git a/lit/docs/install/helm.lit b/lit/docs/install/helm.lit new file mode 100644 index 00000000..c5a546f7 --- /dev/null +++ b/lit/docs/install/helm.lit @@ -0,0 +1,3 @@ +\title{\aux{Install Concourse with} Helm}{install-helm} + +\use-plugin{concourse-docs} diff --git a/lit/docs/install/install-guides.lit b/lit/docs/install/install-guides.lit new file mode 100644 index 00000000..96f5ec3b --- /dev/null +++ b/lit/docs/install/install-guides.lit @@ -0,0 +1,11 @@ +\title{Install Guides}{install-guides} + +\use-plugin{concourse-docs} + +\table-of-contents + +\split-sections + +\include-section{systemd.lit} +\include-section{docker-compose.lit} +\include-section{helm.lit} diff --git a/lit/docs/install/systemd.lit b/lit/docs/install/systemd.lit new file mode 100644 index 00000000..45d0f545 --- /dev/null +++ b/lit/docs/install/systemd.lit @@ -0,0 +1,5 @@ +\title{\aux{Install Concourse With} Systemd}{install-systemd} + +\use-plugin{concourse-docs} + +This guide will show you how to install Concourse on any Linux system running \link{Systemd}{https://github.com/systemd/systemd}. From 9b753d675e54f740b026b5238359ccb440b4e103 Mon Sep 17 00:00:00 2001 From: Taylor Silva Date: Sat, 8 Jun 2024 16:45:41 -0400 Subject: [PATCH 2/4] write up creating a web node with systemd Signed-off-by: Taylor Silva --- lit/docs/install/systemd.lit | 152 ++++++++++++++++++++++++++++++++++- 1 file changed, 151 insertions(+), 1 deletion(-) diff --git a/lit/docs/install/systemd.lit b/lit/docs/install/systemd.lit index 45d0f545..0d3ae770 100644 --- a/lit/docs/install/systemd.lit +++ b/lit/docs/install/systemd.lit @@ -2,4 +2,154 @@ \use-plugin{concourse-docs} -This guide will show you how to install Concourse on any Linux system running \link{Systemd}{https://github.com/systemd/systemd}. +This guide will show you how to install Concourse on any Linux system +running \link{Systemd}{https://github.com/systemd/systemd}. + +This guide makes the following assumptions: +\ordered-list{ + You have a PostgreSQL database running somewhere already. You created a + database called \code{concourse}. You've created a user for Concourse to + authenticate as. +}{ + You have generated the necessary + \reference{generating-keys}{encryption Keys}. +}{ + The web node will be directly exposed to the internet and can therefore + accept inbound traffic on port 443. +}{ + The Web and Worker node are being installed on separate servers and you + will figure out networking between the two servers. +} + +\section{ + \title{Install the Concourse CLI}{systemd-concourse-cli} + The first step is to install the \reference{concourse-cli}. We will + install the CLI in \code{/use/local/concourse}, but you can choose a + different install location. + + Run the following commands to install the Concourse CLI on both your + Web and Worker servers: + \codeblock{bash}{{{ + CONCOURSE_VERSION="" + CONCOURSE_TAR="concourse.tgz" + CONCOURSE_URL="https://github.com/concourse/concourse/releases/download/v${CONCOURSE_VERSION}/concourse-${CONCOURSE_VERSION}-linux-amd64.tgz" + curl -L --output ./${CONCOURSE_TAR} ${CONCOURSE_URL} + tar xzf ./${CONCOURSE_TAR} -C /usr/local/ + rm ./${CONCOURSE_TAR} + }}} + + If you want to make running the Concourse CLI easier, add + \code{/usr/local/concourse/bin} to your \code{PATH}. + + \codeblock{bash}{{{ + PATH="$PATH:/usr/local/concourse/bin" + }}} + + You can move on to setting up the Web node. +} + +\section{ + \title{Web Node}{systemd-web} + First lets create a new user and group for the web node to run as: + + \codeblock{bash}{{{ + addgroup --system "concourse" + adduser \ + --system \ + --ingroup "concourse" \ + --no-create-home \ + --disabled-password \ + --disabled-login \ + --comment "concourse web user" \ + "concourse" + }}} + + Next, place the following keys (previously generated) in + \code{/usr/local/concourse/keys/}: + \list{ + \code{session_signing_key} + }{ + \code{tsa_host_key} + }{ + \code{worker_key.pub} + } + + Next create a file named \code{web.env} in \code{/usr/local/concourse/} that + will be used to configure the web node. This is where you can \reference{configuring-auth}{configure + authentication} to Concourse and all other settings found when you run + \code{concourse web --help}. + + \codeblock{}{{{ + PATH=/usr/local/concourse/bin + CONCOURSE_EXTERNAL_URL=https://ci.example.com + CONCOURSE_ENABLE_LETS_ENCRYPT=true + CONCOURSE_TLS_BIND_PORT=443 + CONCOURSE_POSTGRES_HOST=db.example.com + CONCOURSE_POSTGRES_USER= + CONCOURSE_POSTGRES_PASSWORD= + CONCOURSE_POSTGRES_DATABASE=concourse + CONCOURSE_SESSION_SIGNING_KEY=/usr/local/concourse/keys/session_signing_key + CONCOURSE_TSA_HOST_KEY=/usr/local/concourse/keys/tsa_host_key + CONCOURSE_TSA_AUTHORIZED_KEYS=/usr/local/concourse/keys/worker_key.pub + CONCOURSE_CLUSTER_NAME=Concourse + CONCOURSE_MAIN_TEAM_LOCAL_USER=local + CONCOURSE_ADD_LOCAL_USER=local:local + }}} + + Set the file permissions to read-only and restricted to the \code{concourse} + user and group: + + \codeblock{bash}{{{ + chmod 0444 web.env + }}} + + Ensure the entire \code{/usr/local/concourse} folder is owned by the + \code{concourse} user and group: + + \codeblock{bash}{{{ + chown -R concourse:concourse /usr/local/concourse + }}} + + We can now created a new Systemd Unit file at + \code{/etc/systemd/system/} named \code{concourse-web.service}. Place + the following configuration in the unit file: + + \codeblock{}{{{ + [Unit] + Description=Concourse web node + [Service] + User=concourse + Group=concourse + EnvironmentFile=/usr/local/concourse/web.env + ExecStart=/usr/local/concourse/bin/concourse web + Restart=on-failure + RestartSec=3 + KillSignal=SIGTERM + TimeoutStopSec=60 + [Install] + WantedBy=default.target + }}} + + Finally enable and start the web service: + \codeblock{bash}{{{ + systemctl daemon-reload + systemctl enable concourse-web + systemctl start concourse-web + }}} + + Check the status of the service: + \codeblock{bash}{{{ + systemctl status concourse-web + }}} + + If the service isn't staying up, check the logs: + \codeblock{bash}{{{ + journalctl -u concourse-web + }}} + +} + +\section{ + \title{Worker Node}{systemd-worker} + +} From de2549a77d36479b1fbe60509ba992710385f927 Mon Sep 17 00:00:00 2001 From: Taylor Silva Date: Sat, 8 Jun 2024 17:34:22 -0400 Subject: [PATCH 3/4] write up running a worker node with systemd Signed-off-by: Taylor Silva --- lit/docs/install/systemd.lit | 121 +++++++++++++++++++++++++++++++---- lit/docs/install/worker.lit | 4 +- 2 files changed, 112 insertions(+), 13 deletions(-) diff --git a/lit/docs/install/systemd.lit b/lit/docs/install/systemd.lit index 0d3ae770..448ecb23 100644 --- a/lit/docs/install/systemd.lit +++ b/lit/docs/install/systemd.lit @@ -14,7 +14,7 @@ This guide makes the following assumptions: You have generated the necessary \reference{generating-keys}{encryption Keys}. }{ - The web node will be directly exposed to the internet and can therefore + The Web node will be directly exposed to the internet and can therefore accept inbound traffic on port 443. }{ The Web and Worker node are being installed on separate servers and you @@ -27,8 +27,8 @@ This guide makes the following assumptions: install the CLI in \code{/use/local/concourse}, but you can choose a different install location. - Run the following commands to install the Concourse CLI on both your - Web and Worker servers: + Run the following commands to install the Concourse CLI. \bold{You need to do + this on both your Web and Worker servers.} \codeblock{bash}{{{ CONCOURSE_VERSION="" CONCOURSE_TAR="concourse.tgz" @@ -45,12 +45,12 @@ This guide makes the following assumptions: PATH="$PATH:/usr/local/concourse/bin" }}} - You can move on to setting up the Web node. + You can move on to setting up the Web and Worker servers. } \section{ \title{Web Node}{systemd-web} - First lets create a new user and group for the web node to run as: + First lets create a new user and group for the Web node to run as: \codeblock{bash}{{{ addgroup --system "concourse" @@ -75,10 +75,19 @@ This guide makes the following assumptions: } Next create a file named \code{web.env} in \code{/usr/local/concourse/} that - will be used to configure the web node. This is where you can \reference{configuring-auth}{configure + will be used to configure the Web node. This is where you can \reference{configuring-auth}{configure authentication} to Concourse and all other settings found when you run \code{concourse web --help}. + Change the following values: + \list{ + \code{CONCOURSE_POSTGRES_*} - Used to tell Concourse how to connect to PostgreSQL + }{ + \code{CONCOURSE_EXTERNAL_URL} - The URL users will use to access the web + UI. A Let's Encrypt certificate will also be generated for the hostname in + this URL. + } + \codeblock{}{{{ PATH=/usr/local/concourse/bin CONCOURSE_EXTERNAL_URL=https://ci.example.com @@ -96,9 +105,7 @@ This guide makes the following assumptions: CONCOURSE_ADD_LOCAL_USER=local:local }}} - Set the file permissions to read-only and restricted to the \code{concourse} - user and group: - + Set the file permissions to read-only: \codeblock{bash}{{{ chmod 0444 web.env }}} @@ -116,7 +123,7 @@ This guide makes the following assumptions: \codeblock{}{{{ [Unit] - Description=Concourse web node + Description=Concourse Web node [Service] User=concourse Group=concourse @@ -130,7 +137,7 @@ This guide makes the following assumptions: WantedBy=default.target }}} - Finally enable and start the web service: + Finally enable and start the Web service: \codeblock{bash}{{{ systemctl daemon-reload systemctl enable concourse-web @@ -151,5 +158,97 @@ This guide makes the following assumptions: \section{ \title{Worker Node}{systemd-worker} + The Worker has to run as root so there is no user to create. We can go + straight to configuring the Worker. + + Ensure the following keys (previously generated) are located in + \code{/usr/local/concourse/keys/}: + \list{ + \code{tsa_host_key.pub} + }{ + \code{worker_key} + } + + Create the directory \code{/opt/concourse} where the worker will place + runtime artifacts. Files in this directory are temporary and are managed by + the worker. + + Next create a file named \code{worker.env} in \code{/usr/local/concourse/} + that will be used to configure the Worker. To see all possible configuration + options run \code{concourse worker --help} and read more about + \reference{worker-node}{running a worker node}. + + Change the following values: + \list{ + \code{CONCOURSE_TSA_HOST} - This should be set to a hostname or IP that the + worker can use to reach the Web node, including the TSA port, which defaults + to port 2222. + } + + \codeblock{}{{{ + PATH=/usr/local/concourse/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin + CONCOURSE_NAME=worker-01 + CONCOURSE_WORK_DIR=/opt/concourse/worker + CONCOURSE_TSA_HOST=":2222" + CONCOURSE_TSA_PUBLIC_KEY=/usr/local/concourse/keys/tsa_host_key.pub + CONCOURSE_TSA_WORKER_PRIVATE_KEY=/usr/local/concourse/keys/worker_key + CONCOURSE_RUNTIME=containerd + CONCOURSE_BAGGAGECLAIM_DRIVER=overlay + }}} + + \aside{ + If you're having issues with DNS resolution please read + \reference{worker-troubleshoot-dns}{this section}. + } + + The \code{CONCOURSE_NAME} must be unique per worker. Having two workers with + the same name will result in a lot of weirdness. + + Set the file permissions to read-only: + \codeblock{bash}{{{ + chmod 0444 worker.env + }}} + + We can now created a new Systemd Unit file at + \code{/etc/systemd/system/} named \code{concourse-worker.service}. Place + the following configuration in the unit file: + + \codeblock{}{{{ + [Unit] + Description=Concourse Worker + [Service] + User=root + Group=root + EnvironmentFile=/usr/local/concourse/worker.env + ExecStart=/usr/local/concourse/bin/concourse worker + Restart=on-failure + RestartSec=3 + KillSignal=SIGUSR2 + SendSIGKILL=yes + TimeoutStopSec=300 + [Install] + WantedBy=default.target + }}} + + Finally enable and start the Worker service: + \codeblock{bash}{{{ + systemctl daemon-reload + systemctl enable concourse-worker + systemctl start concourse-worker + }}} + + Check the status of the service: + \codeblock{bash}{{{ + systemctl status concourse-worker + }}} + + If the service isn't staying up, check the logs: + \codeblock{bash}{{{ + journalctl -u concourse-worker + }}} + + Using the \reference{fly} you should be able to see the worker successfully + connected to the Web node by running \code{fly workers}. + Congratulations, you've successfully deployed a Concourse cluster! } diff --git a/lit/docs/install/worker.lit b/lit/docs/install/worker.lit index b4ae0551..42e8bd09 100644 --- a/lit/docs/install/worker.lit +++ b/lit/docs/install/worker.lit @@ -9,7 +9,7 @@ decide much on its own. \table-of-contents \section{ - \title{Prerequisites}{worker-prerequisites} + \title{prerequisites}{worker-prerequisites} \list{ Linux: We test and support the following distributions. Minimum kernel @@ -653,7 +653,7 @@ decide much on its own. } \section{ - \title{Troubleshooting and fixing DNS resolution} + \title{Troubleshooting and fixing DNS resolution}{worker-troubleshoot-dns} \aside{ \bold{Note}: The Guardian runtime took care of a lot of container From 1da690698b64bb6b614226783d257bf28820b85d Mon Sep 17 00:00:00 2001 From: Taylor Silva Date: Sun, 7 Jul 2024 16:43:57 -0400 Subject: [PATCH 4/4] Finish writing up guide for running Concourse with Docker Compose Signed-off-by: Taylor Silva --- lit/docs/install/docker-compose.lit | 160 ++++++++++++++++++++++++++++ lit/docs/install/systemd.lit | 45 +++++--- 2 files changed, 191 insertions(+), 14 deletions(-) diff --git a/lit/docs/install/docker-compose.lit b/lit/docs/install/docker-compose.lit index d06a71f3..fec10517 100644 --- a/lit/docs/install/docker-compose.lit +++ b/lit/docs/install/docker-compose.lit @@ -1,3 +1,163 @@ \title{\aux{Install Concourse with} Docker Compose}{install-docker-compose} \use-plugin{concourse-docs} + +This guide will show you how to install Concourse on any Linux system +using \link{Docker Compose}{https://docs.docker.com/compose/}. + +This guide makes the following assumptions: +\ordered-list{ + The host system has Docker installed already. +}{ + You have a PostgreSQL database running somewhere already. You created a + database called \code{concourse} and created a user for Concourse to + authenticate as. +}{ + You have generated the necessary + \reference{generating-keys}{encryption Keys}. +}{ + The host system the Web node will be running on is exposed to the + internet and can therefore accept inbound traffic on port \code{443}. +}{ + The Web and Worker node are being installed on separate servers and you + will figure out networking between the two servers. The Web node needs + to accept ingress traffic on the TSA port (default is port \code{2222}) + from the Worker node(s). +} + + +\section{ + \title{Setup Web Node}{docker-web} + + You can do the following from any directory on your system. This guide + will assume all work is done in \code{~/concourse}. + + Create a directory called \code{keys} (\code{~/concourse/keys}). Place + the following encryption keys inside the new directory: + \list{ + \code{session_signing_key} + }{ + \code{tsa_host_key} + }{ + \code{worker_key.pub} + } + + Next, create a \code{docker-compose.yml} file + (\code{~/concourse/docker-compose.yml}) with the following content: + + \codeblock{yaml}{{{ + services: + web: + image: docker.io/concourse/concourse:latest + command: web + restart: "unless-stopped" + ports: + - "443:8080" + - "2222:2222" + volumes: + - ~/concourse/keys:/concourse-keys:ro + environment: + CONCOURSE_EXTERNAL_URL: https://ci.example.com + CONCOURSE_ENABLE_LETS_ENCRYPT: "true" + CONCOURSE_SESSION_SIGNING_KEY: /concourse-keys/session_signing_key + CONCOURSE_TSA_AUTHORIZED_KEYS: /concourse-keys/worker_key.pub + CONCOURSE_TSA_HOST_KEY: /concourse-keys/tsa_host_key + CONCOURSE_POSTGRES_HOST: + CONCOURSE_POSTGRES_USER: + CONCOURSE_POSTGRES_PASSWORD: + CONCOURSE_POSTGRES_DATABASE: concourse + CONCOURSE_ADD_LOCAL_USER: test:test + CONCOURSE_MAIN_TEAM_LOCAL_USER: test + CONCOURSE_CLUSTER_NAME: Concourse + CONCOURSE_ENABLE_ACROSS_STEP: "true" + CONCOURSE_ENABLE_REDACT_SECRETS: "true" + CONCOURSE_ENABLE_PIPELINE_INSTANCES: "true" + CONCOURSE_ENABLE_CACHE_STREAMED_VOLUMES: "true" + logging: + driver: local + options: + max-size: "100m" + }}} + + \aside{ + The above file configues the web node with + \reference{local-auth}{local user authentication} with the username + and password set to \code{test}. You will probably want to configure + your web node with one of the other + \reference{configuring-auth}{authentication providers} and remove the + \code{*_LOCAL_USER} environment variables. + } + + You can start the Web node by running: + + \codeblock{bash}{{{ + docker compose up -d + }}} + + You should then be able to access Concourse from the + \code{CONCOURSE_EXTERNAL_URL} you specified. + + If you're using local authentication you can login using the + \reference{fly}. + + \codeblock{bash}{{{ + fly -t ci -c https://ci.example.com -u test -p test + }}} +} + +\section{ + \title{Setup Worker Node}{docker-worker} + + You can do the following from any directory on your system. This guide + will assume all work is done in \code{~/concourse}. + + Create a directory called \code{keys} (\code{~/concourse/keys}). Place + the following encryption keys inside the new directory: + \list{ + \code{tsa_host_key.pub} + }{ + \code{worker_key} + } + + Next, create a \code{docker-compose.yml} file + (\code{~/concourse/docker-compose.yml}) with the following content: + + \codeblock{yaml}{{{ + services: + worker: + image: docker.io/concourse/concourse:latest + command: worker + privileged: true + restart: "unless-stopped" + stop_signal: SIGUSR2 + volumes: + - ~/concourse/keys:/concourse-keys:ro + environment: + CONCOURSE_NAME: worker-01 + CONCOURSE_RUNTIME: containerd + CONCOURSE_BAGGAGECLAIM_DRIVER: overlay + CONCOURSE_TSA_PUBLIC_KEY: /concourse-keys/tsa_host_key.pub + CONCOURSE_TSA_WORKER_PRIVATE_KEY: /concourse-keys/worker_key + CONCOURSE_TSA_HOST: :2222 + logging: + driver: local + options: + max-size: "100m" + }}} + + \aside{ + If your pipelines are having issues with DNS resolution please read + \reference{worker-troubleshoot-dns}{this section}. + } + + You can start the Worker node by running: + + \codeblock{bash}{{{ + docker compose up -d + }}} + + Using the \reference{fly} you should be able to see the worker successfully + connected to the Web node by running \code{fly workers}. + + Congratulations, you've successfully deployed a Concourse cluster! +} diff --git a/lit/docs/install/systemd.lit b/lit/docs/install/systemd.lit index 448ecb23..c4f78d02 100644 --- a/lit/docs/install/systemd.lit +++ b/lit/docs/install/systemd.lit @@ -8,17 +8,19 @@ running \link{Systemd}{https://github.com/systemd/systemd}. This guide makes the following assumptions: \ordered-list{ You have a PostgreSQL database running somewhere already. You created a - database called \code{concourse}. You've created a user for Concourse to + database called \code{concourse} and created a user for Concourse to authenticate as. }{ You have generated the necessary \reference{generating-keys}{encryption Keys}. }{ The Web node will be directly exposed to the internet and can therefore - accept inbound traffic on port 443. + accept inbound traffic on port \code{443}. }{ The Web and Worker node are being installed on separate servers and you - will figure out networking between the two servers. + will figure out networking between the two servers. The Web node needs + to accept ingress traffic on the TSA port (default is port \code{2222}) + from the Worker node(s). } \section{ @@ -49,7 +51,7 @@ This guide makes the following assumptions: } \section{ - \title{Web Node}{systemd-web} + \title{Setup Web Node}{systemd-web} First lets create a new user and group for the Web node to run as: \codeblock{bash}{{{ @@ -102,9 +104,22 @@ This guide makes the following assumptions: CONCOURSE_TSA_AUTHORIZED_KEYS=/usr/local/concourse/keys/worker_key.pub CONCOURSE_CLUSTER_NAME=Concourse CONCOURSE_MAIN_TEAM_LOCAL_USER=local - CONCOURSE_ADD_LOCAL_USER=local:local + CONCOURSE_ADD_LOCAL_USER=test:test + CONCOURSE_ENABLE_ACROSS_STEP=true + CONCOURSE_ENABLE_REDACT_SECRETS=true + CONCOURSE_ENABLE_PIPELINE_INSTANCES=true + CONCOURSE_ENABLE_CACHE_STREAMED_VOLUMES=true }}} + \aside{ + The above file configues the web node with + \reference{local-auth}{local user authentication} with the username + and password set to \code{test}. You will probably want to configure + your web node with one of the other + \reference{configuring-auth}{authentication providers} and remove the + \code{*_LOCAL_USER} environment variables. + } + Set the file permissions to read-only: \codeblock{bash}{{{ chmod 0444 web.env @@ -154,10 +169,19 @@ This guide makes the following assumptions: journalctl -u concourse-web }}} + You should then be able to access Concourse from the + \code{CONCOURSE_EXTERNAL_URL} you specified. + + If you're using local authentication you can login using the + \reference{fly}. + + \codeblock{bash}{{{ + fly -t ci -c https://ci.example.com -u test -p test + }}} } \section{ - \title{Worker Node}{systemd-worker} + \title{Setup Worker Node}{systemd-worker} The Worker has to run as root so there is no user to create. We can go straight to configuring the Worker. @@ -178,13 +202,6 @@ This guide makes the following assumptions: options run \code{concourse worker --help} and read more about \reference{worker-node}{running a worker node}. - Change the following values: - \list{ - \code{CONCOURSE_TSA_HOST} - This should be set to a hostname or IP that the - worker can use to reach the Web node, including the TSA port, which defaults - to port 2222. - } - \codeblock{}{{{ PATH=/usr/local/concourse/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin CONCOURSE_NAME=worker-01 @@ -197,7 +214,7 @@ This guide makes the following assumptions: }}} \aside{ - If you're having issues with DNS resolution please read + If your pipelines are having issues with DNS resolution please read \reference{worker-troubleshoot-dns}{this section}. }