Установка NFS сервера
NFS - это обычная файловая помойка. Работает в среде Linux. Бывает полезна для обмена информацией между ВМ в небольших сетях. Создадим такой сервер в тестовых целях.
SA у нас уже готов: https://teletype.in/@cameda/w93lPMPQWS4
Выберем зону доступности А: https://teletype.in/@cameda/S34zdiTcbUM
Сеть и подсети создали ранее: https://teletype.in/@cameda/ZbTkF70KWK9
SG будем использовать со стандартными открытыми портами: https://teletype.in/@cameda/WIoqKmpMNLM
export SG=$(yc vpc sg get cam-default --format=json | jq -r '.id') export FOLDER_ID=$(yc config get folder-id) export ZONE=ru-central1-a export SUBNET_ID=$(yc vpc subnet get subnet-a --format json | jq -r '.id') export SA=$(yc iam service-account get cam-instance-sa --format json | jq -r '.id')
Создадим скрипт для cloud-init:
#cloud-config version: v1 package_update: true package_upgrade: true write_files: - encoding: b64 content: VGVzc3R0dC4uLg== owner: root:root path: /opt/test permissions: '0644' packages: - git - htop - mc - tree - make - iftop - iotop - dstat - gcc - gdb datasource: Ec2: strict_id: false users: - default - name: cameda gecos: Alexey Volkov groups: sudo shell: /bin/bash sudo: ['ALL=(ALL) NOPASSWD:ALL'] lock_passwd: false passwd: $6$rounds=4096$WhW2cxlj/QX90$Jic1yPwlpiWV98oX8akplpOX4e7pgJlWHCfKAyPiMf7xP1AqI7iocN/gjWQNX9WuIUf14LVgxJluajfOInk.u. ssh_authorized_keys: - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDI98mJDBN9cnp6HOdBYTQILeAhUSDvDfoqA9iLmVPDyPLFRWs7tE4BjCAcFD6a3M50QIboCaohfa7h+PWksYibab7I3QHOR7y9pCW8FGonGRw2ACvt906qlaWHFj7jWOxuihFoiRROKqLCW5YE/Yc4XFIvW1gu3JQdvQ1wemWvujsI8EHE6PI1pEg7/41y6kn3IhNHIr8WRLe4dPyPGjwc4LpBCcaRSJiX4YjVXynSIHNk365UrL+nGv8ix7bW5FNCgGqSgfUTVCfMYLzQ/gYHPVQrcIvCeHjkwluH8Z3gXeN3OliejBjpLi+IWIzd9K6UADSUNU8oL+9941tDidp8APoe7RbB4h3bY6k8Bhy0yxohgQS2OWSYd1mjeEx8Ba5wzJKqfpUgmcPdrBJnBwLgLMFQyEfYG6vTPkYWAKEvkkJ6ZiA4tdoQvCb+B0xJV/ivHyLtoi3LFE59mbQFDUy8O51vX9JjBDLwzyTEeslWp7uOP66Ti5Q5ucNXbs5yXTU= cameda@cameda-osx"
yc vpc address create \ --folder-id $FOLDER_ID \ --name nfs-ip \ --description "NFS IP" \ --external-ipv4 zone=$ZONE \ --labels test=nfs \ --async
Создадим ВМ с Ubuntu 20.04:
export IP=$(yc vpc address get nfs-ip --format=json | jq -r ".external_ipv4_address" | jq -r ".address") yc compute instance create \ --folder-id $FOLDER_ID \ --name cam-nfs \ --description "NFS" \ --hostname cam-nfs \ --zone $ZONE \ --labels test=nfs \ --platform standard-v3 \ --create-boot-disk image-family=ubuntu-2004-lts,size=60,type=network-ssd,block-size=8K \ --image-folder-id standard-images \ --memory 4 \ --cores 2 \ --core-fraction 100 \ --network-settings type=standard \ --network-interface subnet-id=$SUBNET_ID,nat-ip-version=ipv4,address=10.128.0.3,nat-address=$IP,security-group-ids=$SG \ --metadata serial-port-enable=1 \ --metadata-from-file='user-data=cloud-init.yaml' \ --service-account-id $SA \ --async
login: cameda password: Pa$w0rd
Обновим нашу дефолтную SG, добавив во входящие порт 2049.
yc vpc sg update --name cam-default \ "--rule" "description=access all egress port,direction=egress,from-port=1,to-port=65535,protocol=any,v4-cidrs=[0.0.0.0/0]" \ "--rule" "description=access 22 port,direction=ingress,port=22,protocol=tcp,v4-cidrs=[0.0.0.0/0]" \ "--rule" "description=access 53 port,direction=ingress,port=53,protocol=any,v4-cidrs=[0.0.0.0/0]" \ "--rule" "description=access 80 port,direction=ingress,port=80,protocol=tcp,v4-cidrs=[0.0.0.0/0]" \ "--rule" "description=access 443 port,direction=ingress,port=443,protocol=tcp,v4-cidrs=[0.0.0.0/0]" \ "--rule" "description=access 8080 port,direction=ingress,port=8080,protocol=any,v4-cidrs=[0.0.0.0/0]" \ "--rule" "description=access nfs port,direction=ingress,port=2049,protocol=any,v4-cidrs=[0.0.0.0/0]" \ --description "Default access" --folder-id $FOLDER_ID --async
ssh cameda@$IP sudo -i ping ya.ru - проверим что корректно работает DNS. apt -y update && apt -y upgrade hostnamectl - проверим, что версия ОС и имя ВМ корректны.
Установка nfs-server:
apt -y install nfs-kernel-server
Создаем каталог и настраиваем права:
mkdir /mnt/nfs chmod -R 777 /mnt/nfs
vi /etc/exports - добавляем сюда информацию о предоставляемой шаре /mnt/nfs 10.128.0.0/24(rw,sync,no_root_squash,no_all_squash,no_subtree_check) systemctl enable nfs-kernel-server --now
rpcinfo -p | grep nfs - Проверяем для каких версий NFS способен принимать подключения наш NFS-сервер exportfs -r - перечитываем конфигурацию exportfs - убеждаемся, что ресурс опубликован cat /proc/filesystems | grep nfs - проверяем поддержку на уровне ядра modprobe nfs - если не работает в ядре то включаем поддержку systemctl status nfs-server
ОПЦИИ МОНТИРОВАНИЯ:
rw - разрешить чтение и запись в этой папке;
ro - разрешить только чтение;
sync - отвечать на следующие запросы только тогда, когда данные будут сохранены на диск (по умолчанию);
async - не блокировать подключения пока данные записываются на диск;
secure - использовать для соединения только порты ниже 1024;
insecure - использовать любые порты;
nohide - не скрывать поддиректории при, открытии доступа к нескольким директориям;
root_squash - подменять запросы от root на анонимные, используется по умолчанию;
no_root_squash - не подменять запросы от root на анонимные;
all_squash - превращать все запросы в анонимные;
subtree_check - проверять не пытается ли пользователь выйти за пределы экспортированной папки;
no_subtree_check - отключить проверку обращения к экспортированной папке, улучшает производительность, но снижает безопасность, можно использовать когда экспортируется раздел диска;
anonuid и anongid - указывает uid и gid для анонимного пользователя.
Установка nfs-client:
apt -y install nfs-common systemctl enable rpcbind --now mkdir /mnt/nfs
Постоянное монтирование. Добавляем в vi /etc/fstab:
10.128.0.3:/nfs/ /mnt/nfs/ nfs defaults 0 0 mount -a df -hT | grep nfs4
mount -t nfs 10.128.0.3:/mnt/nfs/ /mnt/nfs/