我运行 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
}