Fargate Linux Github Runner 无法通过 VPN 从专用网络找到特定 URL (nslookup)

Fargate Linux Github Runner 无法通过 VPN 从专用网络找到特定 URL (nslookup)

我运行 Worker 容器(Fargate Worker:https://docs.gitlab.com/runner/configuration/runner_autoscale_aws_fargate/)。

我的问题问题是容器(Gitlab-runner)在 Fargate(“awsvpc”网络模式)上运行,但“nslookup”无法在 VPN 站点到站点点的其他部分找到私有 DNS 服务器。

我在 EC2 上做了同样的事情。在 EC2 上,当我更新resolved.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 subdomain.privateurl.net' 积极返回,它找到了名称、地址和 IP。

但是,当我对 Fargate 上运行的容器执行同样的操作时,'nslookup subdomain.privateurl.net' 找不到名称、地址和 IP。

从容器中,“ping”已完成。它表明 Fargate 上的容器与 VPN 另一端的服务器 (subdomain.privateurl.net) 之间存在连接。但 'ping <subdomain.privateurl.net>' 和 'nslookup <subdomain.privateurl.net>' 无法正常工作。顺便说一句,我将容器端口 53 端口映射到主机 53 以进行 DNS 请求(nslookup)。

我怀疑 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
}

相关内容