러너에서 프록시 서버 사용하기
러너에서 프록시 서버 사용하기
격리된 환경에서 실행되는 러너가 GitHub와 안전하게 통신하도록 프록시 서버를 사용하도록 구성할 수 있어요. Linux·Windows·Azure 러너와 Docker 컨테이너에서 프록시를 설정하는 방법을 알려드릴게요.
출처: 문서
본문
러너를 격리된 환경에서 구성해 GitHub와 안전하게 통신할 때 프록시 서버를 사용할 수 있어요.
Linux 및 Windows 러너의 프록시 구성
러너가 프록시 서버를 통해 통신해야 한다면, 환경 변수나 시스템 수준 구성으로 프록시 설정을 구성할 수 있어요.
| 변수 | 설명 | 예시 |
|---|---|---|
https_proxy |
HTTPS 트래픽용 프록시 URL. 필요한 경우 기본 인증을 포함할 수 있어요. | http://proxy.localhttp://192.168.1.1:8080http://username:[email protected] |
http_proxy |
HTTP 트래픽용 프록시 URL. 필요한 경우 기본 인증을 포함할 수 있어요. | http://proxy.localhttp://192.168.1.1:8080http://username:[email protected] |
no_proxy |
프록시를 우회해야 하는 호스트 또는 IP 주소의 쉼표로 구분된 목록. 일부 클라이언트는 호스트 이름이 아니라 IP 주소로 직접 연결할 때만 IP 주소를 인정해요. | example.comexample.com,myserver.local:443,example.org |
프록시 환경 변수는 러너 애플리케이션이 시작될 때 읽히므로, 러너 애플리케이션을 구성하거나 시작하기 전에 환경 변수를 설정해야 해요. 프록시 구성이 변경되면 러너 애플리케이션을 다시 시작해야 합니다.
Windows 머신에서는 프록시 환경 변수 이름이 대소문자를 구분하지 않아요. Linux와 macOS 머신에서는 소문자 환경 변수를 사용할 것을 권장합니다. Linux나 macOS에서 https_proxy와 HTTPS_PROXY처럼 대문자와 소문자 환경 변수가 모두 있으면, 셀프 호스팅 러너 애플리케이션은 소문자 환경 변수를 사용해요.
셀프 호스팅 러너와 GitHub 사이의 연결은 HTTPS(포트 443)를 통해 이루어집니다.
[!WARNING] 셀프 호스팅 러너는
no_proxy환경 변수에서 IP 주소와 CIDR 범위를 지원하지 않아요. GitHub Enterprise Server 인스턴스가 IP 주소를 사용하고 해당 주소에 대해no_proxy로 프록시를 우회하도록 구성해도 러너는 여전히 연결에 실패합니다. GitHub Enterprise Server 인스턴스가 IP 주소로 접근되어 프록시를 우회해야 하는 경우, 해당 IP 주소가no_proxy에 나열되어 있어도 러너는 연결에 실패해요.
예시 구성
[!NOTE] 문제를 피하려면 운영 체제와 셸의 동작과 관계없이 환경 변수를 대소문자 구분으로 취급하는 것이 좋습니다.
Linux 및 macOS
러너에 대한 프록시 환경 변수를 설정하세요.
export https_proxy=http://proxy.local:8080
export http_proxy=http://proxy.local:8080
export no_proxy=example.com,localhost,127.0.0.1
Windows
Windows에서는 환경 변수를 설정하거나 netsh 명령을 사용해 프록시 설정을 구성할 수 있어요. netsh 방식은 WinHTTP API에 의존하는 애플리케이션과 서비스에 적용됩니다.
비공개 네트워킹을 사용하는 러너에게는 여전히 환경 변수 설정이 필요해요. netsh도 구성해야 하는지는 워크플로우에서 사용하는 애플리케이션에 따라 달라집니다.
netsh winhttp set advproxy setting-scope=machine settings={"Proxy":"proxy.local:8080","ProxyBypass":"168.63.129.16;169.254.169.254","AutoconfigUrl":"","AutoDetect":false}
커스텀 이미지 생성 중에 이 설정을 구성할 때는 setting-scope=machine을 사용해 프록시 설정이 재부팅 후와 VM 이미징 중에도 유지되도록 하세요.
프록시 설정을 영구적으로 만들기
커스텀 이미지 생성 중에 이 환경 변수들을 설정할 때, 설정이 재부팅이나 이미지 재구축 후에도 유지되도록 해야 해요.
Linux 및 macOS
변수들을 /etc/environment에 작성하세요.
echo 'http_proxy=http://proxy.local' >> /etc/environment
Windows
시스템 전체 환경 변수를 설정하세요.
[Environment]::SetEnvironmentVariable("http_proxy", "http://proxy.local", "Machine")
Azure 러너의 프록시 구성
러너가 Azure에 호스팅되어 있고(셀프 호스팅 러너 또는 비공개 네트워킹으로 배포된 GitHub 호스팅 대형 러너), 네트워크 격리를 유지하면서 GitHub 서비스로의 아웃바운드 연결을 허용해야 한다면 프록시를 구성해야 할 수 있어요.
런너가 필요한 Azure 서비스에 접근할 수 있도록 Azure 메타데이터와 관리 IP를 no_proxy 목록에 추가해야 해요. 이 엔드포인트들은 Azure VM이 정상 작동에 필요한 구성과 ID 정보를 검색할 수 있게 해줍니다.
두 Azure IP는 다음과 같아요:
- 168.63.129.16 (Azure IP address 168.63.129.16 overview 참고)
- 169.254.169.254 (Azure Instance Metadata Service 참고)
.env 파일로 프록시 구성 설정하기
[!NOTE]
.env파일로 프록시 구성을 설정하는 것은 GitHub 호스팅 러너에서는 할 수 없어요.
셀프 호스팅 러너에서는 셀프 호스팅 러너 애플리케이션 디렉토리(러너 소프트웨어를 다운로드하고 압축을 푼 디렉토리)의 .env 파일에 변수들을 추가해 프록시 설정을 구성할 수 있어요. 이 방식은 러너가 시스템 계정으로 서비스로 실행되도록 구성된 경우에 유용합니다. 러너가 시작되면 프록시 구성에 대해 .env에 설정된 변수들을 읽습니다.
예시 .env 프록시 구성
https_proxy=http://proxy.local:8080
no_proxy=example.com,myserver.local:443
Docker 컨테이너의 프록시 구성 설정하기
워크플로우에서 Docker 컨테이너 액션이나 서비스 컨테이너를 사용한다면, 위의 환경 변수 설정에 더해 Docker가 프록시 서버를 사용하도록 구성해야 할 수도 있어요.
필요한 Docker 구성에 대한 정보는 Docker 문서의 Configure Docker to use a proxy server를 참고하세요.