VM에서 투명 프록시 모드 활성화
VM에서 투명 프록시 모드 활성화 (Enable transparent proxy mode on VMs)
이 주제에서는 서비스 메시에서 투명 프록시(transparent proxy) 모드를 사용하는 방법을 설명해요. 투명 프록시를 사용하면 애플리케이션이 구성을 수정하지 않고도 서비스 메시를 통해 통신할 수 있어요. 또한 투명 프록시는 메시를 우회하는 직접 인바운드 연결을 방지하여 애플리케이션 보안을 강화해요.
출처: 문서
본문
이 주제에서는 서비스 메시에서 투명 프록시 모드를 사용하는 방법을 설명합니다. 투명 프록시를 사용하면 애플리케이션이 구성을 수정하지 않고도 서비스 메시를 통해 통신할 수 있습니다. 또한 투명 프록시는 메시를 우회하는 직접 인바운드 연결을 방지하여 애플리케이션 보안을 강화합니다. 자세한 내용은 Transparent proxy overview를 참조하세요.
요구 사항 (Requirements)
투명 프록시를 사용하려면 네트워크가 다음 환경 및 소프트웨어 요구 사항을 충족해야 합니다.
- v1.11.1+가 설치된 Consul 데이터센터가 최소 두 개의 Linux 클라이언트 노드로 실행 중.
- Consul 클라이언트 노드에서 DNS forwarding 활성화.
- Consul 클라이언트 노드에 Envoy 설치. Consul 설치가 지원하는 Envoy 버전에 대한 자세한 내용은 Envoy proxy 구성 참조를 참조하세요.
- Consul을 실행할 전용 사용자. Consul은 사용자 ID를 사용하여 Consul 관련 트래픽을 투명 프록시에서 제외합니다. 이 지침은
consulLinux 사용자를 사용합니다. - Envoy를 실행할 전용 사용자. Consul은 사용자 ID를 사용하여 프록시 관련 트래픽을 투명 프록시에서 제외합니다. 이 지침은
envoyLinux 사용자를 사용합니다.
수동 구성 (Manual configuration)
Consul 서비스 메시가 투명 프록시를 사용하도록 수동으로 구성하려면 다음 단계를 따르세요:
서비스 등록 (Register the service)
서비스 정의의 connect 블록에서 서비스가 투명 프록시 모드를 사용하도록 구성합니다.
{
"service": {
"connect": {
"sidecar_service": {
"proxy": {
"mode": "transparent"
}
}
},
"name": "${service_name}",
"port": "${service_port}"
}
}
그런 다음 Consul에 서비스를 등록하세요.
투명 프록시가 활성화된 서비스의 경우 Consul은 240.0.0.0/4 범위에서 가상 IP를 할당하므로, 다운스트림 서비스는 서비스 메시가 할당한 고유 IP를 사용하여 업스트림 서비스에 연결할 수 있습니다.
트래픽을 프록시로 리디렉트 (Redirect traffic to proxies)
명명된 서비스에 대해 VM에서 투명 프록시를 활성화하려면 consul connect redirect-traffic 명령을 사용하세요.
이 명령은 consul과 envoy의 사용자 ID를 포함하여 투명 프록시가 Consul과 Envoy의 트래픽을 리디렉션에서 제외하도록 합니다.
경고 (Warning)
이 명령은 제외를 지정하지 않으면 기존 인바운드 트래픽을 거부하는 iptables 규칙을 추가합니다. 결과적으로 SSH를 포함한 Consul 및 Envoy와 관련되지 않은 VM에 대한 모든 연결이 끊어집니다.
$ consul connect redirect-traffic \
-proxy-id="${service_name}-sidecar-proxy" \
-proxy-uid="$(id --user envoy)" \
-exclude-uid="$(id --user consul)"
특정 포트나 IP 주소에서 인바운드 또는 아웃바운드 트래픽을 제외하려면 제외를 지정하는 추가 인수를 추가하세요.
예를 들어 로그인을 위해 SSH 포트로의 인바운드 트래픽을 제외해야 할 수 있습니다:
$ consul connect redirect-traffic \
-proxy-id="${service_name}-sidecar-proxy" \
-proxy-uid="$(id --user envoy)" \
-exclude-uid="$(id --user consul)" \
-exclude-inbound-port=22
TransparentProxy.MeshDestinationsOnly=true로 정의된 mesh 구성 항목이 있으면 트래픽을 리디렉트한 후 투명 프록시가 VM에 대한 모든 인바운드 및 아웃바운드 요청을 거부합니다. 투명 프록시는 패키지 다운로드 요청을 거부하므로 트래픽을 리디렉트하기 전에 애플리케이션과 그 의존성을 설치했는지 확인하세요.
서비스 연결 (Connect services)
ACL이 활성화되면 Consul 서비스 메시는 기본적으로 서비스 간 모든 트래픽을 거부합니다.
Consul은 서비스 의도를 기반으로 프록시가 적절한 업스트림 서비스로 트래픽을 라우팅하도록 구성합니다.
이 예제는 서비스 web과 서비스 api 사이의 트래픽을 허용하는 의도를 보여줍니다.
Kind = "service-intentions"
Name = "api"
Sources = [
{
Name = "web"
Action = "allow"
Namespace = "default"
Partition = "default"
}
]
서비스가 올바르게 구성되었는지 확인하려면 Consul DNS를 사용하여 web 서비스 클라이언트 노드에서 api 서비스를 해석하세요.
Consul DNS는 ${service_name}.virtual.consul 형식의 DNS 호스트 이름을 사용하여 업스트림 서비스의 메시 내 가상 IP를 해석합니다. 멀티 포트 서비스의 경우 ${port_name}.${service_name}.virtual.consul 형식으로 서비스 이름 앞에 명명된 포트를 지정하세요.
$ nslookup api.virtual.consul
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: api.virtual.consul
Address: 240.0.0.2
web 서비스 클라이언트 노드에서 api 서비스에 도달할 수 있는지 확인하세요.
$ curl --head http://api.virtual.consul
HTTP/1.1 200 OK
Date: Wed, 25 Mar 2026 13:37:36 GMT
Content-Length: 234
Content-Type: text/plain; charset=utf-8
Connection: close
멀티 포트 서비스의 경우 도달하려는 포트의 명명된 가상 주소를 쿼리하세요:
$ nslookup http.api.virtual.consul
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: http.api.virtual.consul
Address: 240.0.0.10
자동 구성 (Automatic configuration)
VM에서 투명 프록시를 활성화하는 프로세스는 모든 서비스에 표준적입니다.
프로세스를 수동으로 테스트한 후 서비스를 시작할 때 노드가 사이드카 프록시를 자동으로 설정하도록 구성하는 것을 권장합니다.
투명 프록시 구성 프로세스를 자동화하는 두 가지 방법:
- systemd 유닛 파일 설정
- Terraform 사용
systemd를 사용하여 Consul 서비스 메시의 사이드카 프록시를 시작하는 경우 유닛 파일에 두 개의 스크립트를 추가할 수 있습니다:
- 프록시를 시작하기 전에 트래픽 리디렉션 활성화
- 프록시를 중지한 후 iptables 규칙 정리
ExecStartPre 및 ExecStopPost 매개변수를 사용하여 스크립트를 systemd 유닛 파일에 추가할 수 있습니다:
[Unit]
Description=Consul Envoy
After=syslog.target network.target consul.service
Wants=consul.service
ConditionFileIsExecutable=<script for redirecting traffic>
ConditionFileIsExecutable=<script for cleaning up iptables>
[Service]
Type=simple
User=envoy
Group=envoy
EnvironmentFile=/etc/consul.d/consul.env
ExecStartPre=+<script for redirecting traffic> ${service_name}
ExecStart=/usr/bin/consul connect envoy -sidecar-for=${service_name}
ExecStopPost=+<script for cleaning up iptables>
Restart=on-failure
RestartSec=5
WorkingDirectory=/etc/consul.d/
[Install]
WantedBy=multi-user.target
Terraform을 사용하여 Consul 서비스 메시에서 작동하도록 설치되고 구성된 서비스로 Consul 클라이언트 노드를 배포할 수 있습니다.
자체 배포를 만들기 위한 템플릿으로 Consul 투명 프록시용 Terraform 모듈을 사용하세요.
모듈에는 다음이 포함됩니다:
- 예제 systemd 유닛 파일.
- 사이드카 프록시를 시작하기 전에 트래픽 리디렉션용 예제 스크립트.
- 프록시를 중지한 후 iptables 규칙 정리용 예제 스크립트.