Как открыть порт на экземпляре gcloud? - PullRequest
0 голосов
/ 05 июня 2018

У меня есть экземпляр GCE, который раскручивается с помощью конфигурации terraform.Экземпляр вращается нормально, и я могу SSH к нему.У меня есть правило брандмауэра для доступа к TCP-порту 9090:

gcloud compute firewall-rules list
NAME                    NETWORK  DIRECTION  PRIORITY  ALLOW                         
DENY
allow-http              default  INGRESS    1000      tcp:8080
default-allow-icmp      default  INGRESS    65534     icmp
default-allow-internal  default  INGRESS    65534     tcp:0-65535,udp:0-65535,icmp
default-allow-rdp       default  INGRESS    65534     tcp:3389
default-allow-ssh       default  INGRESS    65534     tcp:22
fitnesse                default  INGRESS    1000      tcp:9090

Но я не могу получить доступ к любому серверу, работающему на порту 9090, извне.

$ curl http://a.b.c.d:9090
curl: (7) Failed to connect to a.b.c.d port 9090: Connection refused

Я попытался удалить все теги наи экземпляр и правило безрезультатны.Я создал другое правило для другого порта (8080), и он также недоступен.

Я проверил iptables -L -nv на экземпляре, и у меня есть это INPUT цепное правило, которое мне кажется подходящим:

Chain INPUT (policy ACCEPT 163 packets, 26970 bytes)
 pkts bytes target     prot opt in     out     source               destination
72510 1208M sshguard   all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy DROP 0 packets, 0 bytes)

Хотя, возможно, это связано с проблемой докера, так как сервис является контейнером докера с подключенным портом, но он также не работает с nc -l 9090 ...

Обновление:

Я изменил сопоставление портов с 9090 на 80, и теперь оно работает: я могу получить доступ к серверу извне.

netstat -lntp дает мне следующее:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      864/systemd-resolve
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1774/sshd
tcp6       0      0 :::80                   :::*                    LISTEN      19537/docker-proxy
tcp6       0      0 :::18001                :::*                    LISTEN      12754/docker-proxy
tcp6       0      0 :::5778                 :::*                    LISTEN      13837/docker-proxy
tcp6       0      0 :::18002                :::*                    LISTEN      12903/docker-proxy
tcp6       0      0 :::18003                :::*                    LISTEN      16534/docker-proxy
tcp6       0      0 :::18004                :::*                    LISTEN      16546/docker-proxy
tcp6       0      0 :::22                   :::*                    LISTEN      1774/sshd

Похоже, что это указывает на проблему с ipv4 / ipv6, когда прокси-сервер докера связывается только с ipv6.

Я в растерянности, любая помощь по устранению неполадок этой проблемы будет многооценили.

1 Ответ

0 голосов
/ 18 июня 2018

Конфигурация Ubuntu по умолчанию, поскольку (по крайней мере) 16.04 предпочитает соединения через ipv6, а не ipv4.Это настраивается в файле /etc/gai.conf как объяснено здесь .

Это означает, что процессы, которые явно не выбирают адрес для привязки, будут по умолчанию связаны с любым адресом в пространстве имен ipv6., но не в адресном пространстве ipv4, что препятствует подключению ipv4 извне.Это можно изменить, отредактировав файл /etc/gai.conf, добавив строку:

precedence ::ffff:0:0/96 100 
...