Господа, я выполнил инструкции из этого отличного поста, но не смог подключиться. Монтирование эластичной файловой системы (EFS) за пределами AWS
Я использую CoreOS в кластере Mesos. У нас есть EFS, подключенная ко всем узлам в кластере, чтобы они могли обмениваться данными, сценариями и т. Д. У нас есть VPN-туннель к AWS VPC, чтобы мы могли подключаться из офиса.
Мои пользователи хотели бы загрузить несколько скриптов в EFS и получить результаты вычислений, чтобы они хотели смонтировать NFS локально. Итак, я запускаю haproxy, как рекомендовано в статье выше.
sudo docker run -d --net=host haproxy /bin/bash -c "echo -e 'listen fs-1e7bb658-us-east-1\n bind :2049\n mode tcp\n option tcplog\n timeout tunnel 300000\n server fs-1e7bb658-us-east-1a us-east-1a.fs-1e7bb658.efs.us-east-1.amazonaws.com:2049 check inter 60000 fastinter 15000 downinter 5000' > /haproxy.cfg && haproxy -f /haproxy.cfg"
Конфигурация такая на случай непонятной:
listen fs-1e7bb658-us-east-1
bind :2049
mode tcp
option tcplog
timeout tunnel 300000
server fs-1e7bb658-us-east-1a us-east-1a.fs-1e7bb658.efs.us-east-1.amazonaws.com:2049 check inter 60000 fastinter 15000 downinter 5000
Это запускает haproxy с туннелем к EFS, как предложено в вышеупомянутой теме. Я знаю, что он работает, потому что я могу смонтировать EFS, используя IP-адрес Haproxy, во вторую папку на узле кластера (т.е. / testing), и когда я пишу файл в / testing, я вижу его во всех узлах в / shared папке . Например:
sudo mount 100.100.100.68:/ /testing # Mount using haproxy
echo "testing123!" > /testing/testing.txt # write to a file
cat /shared/testing.txt # get from any node in the cluster
>>> testing123!
Итак, проблема в том, что когда я хочу смонтировать из OSX, я получаю:
grodriguez:/ Guimo$ sudo mount 100.100.100.68:/ /sharedfiles
mount_nfs: can't mount / from 100.100.100.68 onto /sharedfiles: RPC prog. not avail
Я знаю, что HaProxy слушает, потому что я могу делать из OSX:
grodriguez:/ Guimo$ telnet 100.100.100.68 2049
Trying 100.100.100.68...
Connected to 100.100.100.68.
Escape character is '^]'.
Таким образом, он подключается к службе с помощью telnet, но не подключается с помощью nfs.
Группа безопасности довольно либеральна, к тому же я бы не подключился по telnet, если бы он не работал. Итак, в этом порту работает служба.
Я читал, что могу попробовать найти службы mountd и nfs, но ничего. Может быть, EFS их скрывает. Может быть, поэтому OSX жалуется на пропавшую службу.
grodriguez:/ Guimo$ rpcinfo -p 100.100.100.68
program vers proto port
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 45358 status
100024 1 tcp 60755 status
100021 1 udp 43439 nlockmgr
100021 3 udp 43439 nlockmgr
100021 4 udp 43439 nlockmgr
100021 1 tcp 34893 nlockmgr
100021 3 tcp 34893 nlockmgr
100021 4 tcp 34893 nlockmgr
Но все же, если туннель не работает, почему агенты должны успешно подключаться?
Кстати. Я также пробовал подключиться через AWS, но у OSX тоже есть проблемы.
grodriguez:/ Guimo$ mount -t nfs4 -o nfsvers=4.1 100.100.100.68:/ /sharedfiles
mount: exec /System/Library/Filesystems/nfs4.fs/Contents/Resources/mount_nfs4 for /sharedfiles: No such file or directory
Любая помощь приветствуется.
С уважением, Гимо
Изменить: в случае, если это не ясно из моей заметки ниже. Я запустил debian с помощью docker для Mac, затем установил поддержку nfs4 в контейнер, затем подключился к туннелю HaProxy. Все прошло нормально, и я вижу свой файл testing.txt.
Итак, я предполагаю, что это проблема OSX и не имеет ничего общего с решением выше, которое потрясающе.
Для всех, кто ищет ответы на подобные вопросы, комментарий Майкла решил мою проблему.
У нас есть прямое подключение к AWS, и после добавления правильного входящего правила (офисная подсеть TCP 2049) в группу безопасности я могу смонтировать EFS на моем локальном MacBook.
sudo mount -t nfs -o vers=4 -o tcp -w x.x.x.x:/ efs