Fargate Linux Github Runner가 VPN(nslookup)을 통해 프라이빗 네트워크에서 특정 URL을 찾을 수 없습니다.

Fargate Linux Github Runner가 VPN(nslookup)을 통해 프라이빗 네트워크에서 특정 URL을 찾을 수 없습니다.

작업자 컨테이너(Fargate Worker:https://docs.gitlab.com/runner/configuration/runner_autoscale_aws_fargate/).

내 질문문제는 컨테이너(Gitlab-runner)가 Fargate("awsvpc" 네트워크 모드)에서 실행되고 있지만 "nslookup"이 VPN 사이트 간 사이트의 다른 부분에서 프라이빗 DNS 서버를 찾을 수 없다는 것입니다.

EC2에서도 같은 작업을 수행했습니다. EC2에서 Resolve.conf를 다음과 같이 업데이트하면:

sudo sed -i 's/#DNS=/DNS=192.168.x.x/g' /etc/systemd/resolved.conf
sudo sed -i 's/#Domains=/Domains=privateurl.net/g' /etc/systemd/resolved.conf
sudo systemctl restart systemd-resolved

EC2에서 'nslookup 하위 도메인.privateurl.net' 긍정적인 반환으로 이름, 주소 및 IP를 찾았습니다.

하지만 Fargate에서 실행되는 컨테이너로 동일한 작업을 수행하면 'nslookup 하위 도메인.privateurl.net' 이름, 주소, IP를 찾을 수 없습니다.

컨테이너에서 "ping"이 완료됩니다. 이는 Fargate의 컨테이너와 VPN 반대편의 서버(subdomain.privateurl.net) 사이에 연결이 있음을 보여줍니다. 하지만'핑 <subdomain.privateurl.net>' 그리고'nslookup <하위 도메인.privateurl.net>'정상적으로 작동할 수 없습니다. 그런데, DNS 요청(nslookup)을 위해 컨테이너 포트 53을 호스트 53으로 포트 매핑했습니다.

Fargate("awsvpc" 네트워크 모드)의 컨테이너가 EC2와 다르게 동작하는 것 같습니다.

클라우드 관찰 로그:

nslookup subdomain.privateurl.net  # on ECS container
** server can't find subdomain.privateurl.net: NXDOMAIN

PING 192.168.1.10 (192.168.1.10) 56(84) bytes of data.
64 bytes from 192.168.1.10: icmp_seq=1 ttl=63 time=15.8 ms

답변1

Route 53 해석기를 사용하여 솔루션을 찾았습니다.

resource "aws_route53_resolver_endpoint" "dns" {
  name               = "resolver"
  direction          = "OUTBOUND"
  security_group_ids = [data.aws_security_group.selected_sg.id]
  
  ip_address {
    subnet_id = data.aws_subnet.selected_subnet.id
    ip        = "172.x.x.x" # ip from vpc subnet
  }
  
  ip_address {
    subnet_id = data.aws_subnet.selected_subnet.id
    ip        = "172.x.x.x" # ip from vpc subnet
  }

}

resource "aws_route53_resolver_rule" "local" {
  domain_name          = "privateurl.net"
  name                 = "local"
  rule_type            = "FORWARD"
  resolver_endpoint_id = aws_route53_resolver_endpoint.dns.id
  
  target_ip {
    ip = "PrivateDNSIP"
    port = 53
  }
}

resource "aws_route53_resolver_rule_association" "local" {
  resolver_rule_id = aws_route53_resolver_rule.local.id
  vpc_id           = data.aws_vpc.selected.id
}

관련 정보