Отключение IPv6 на узлах Nova
На узлах кластера Nova IPv6 можно отключить двумя способами. Выберите вариант по таблице ниже.
| Вариант | Что происходит | Когда применить | Ограничение |
|---|---|---|---|
Отключение через GRUB |
Стек IPv6 полностью отключается на уровне ядра, в том числе IPv6 на loopback-интерфейсе |
Только на новых узлах в UPI-режиме перед установкой Nova 7.6.0 и новее |
Могут не работать приложения, которым нужен IPv6, в том числе адрес |
Отключение через sysctl с сохранением IPv6 на |
IPv6 отключается на внешних интерфейсах узла, на loopback-интерфейсе |
На уже развёрнутых кластерах, а также для более ранних версий Nova |
Приложения не получают маршрутизируемый IPv6. Сохраняется только локальная совместимость с |
|
Варианты нельзя комбинировать. Если узел загружен с параметром ядра |
1. Сценарий 1. Полное отключение IPv6 через GRUB
|
Этот вариант предназначен только для новых узлов в UPI-режиме перед установкой Nova версии 7.6.0 и выше. |
На каждом узле выполните действия ниже.
-
Добавьте параметр ядра
ipv6.disable=1для всех загрузочных записей.Astra Linux и Debian
-
Откройте файл
/etc/default/grubи добавьте параметрipv6.disable=1в переменнуюGRUB_CMDLINE_LINUX.Если в переменной уже указаны другие параметры ядра, сохраните их и добавьте
ipv6.disable=1через пробел.
GRUB_CMDLINE_LINUX="ipv6.disable=1"-
Обновите конфигурацию GRUB:
sudo update-grubRHEL-подобные ОС
Добавьте параметр
ipv6.disable=1во все загрузочные записи:sudo grubby --update-kernel=ALL --args="ipv6.disable=1" -
-
Перезагрузите узел:
sudo reboot -
После перезагрузки проверьте, что параметр присутствует в командной строке ядра:
cat /proc/cmdlineВ выводе должна быть строка с параметром
ipv6.disable=1.Пример вывода:[root@control-plane1 ~]# cat /proc/cmdline kvm.enable_virt_at_load=0 BOOT_IMAGE=(hd0,gpt2)/vmlinuz-4.18.0-425.3.1.el8.x86_64 root=UUID=884de598-4542-4c97-91e0-5b27f5e58805 ro resume=UUID=0169ad66-5fd4-4867-92b9-7dec9271be3c net.ifnames=0 rhgb quiet ipv6.disable=1
После настройки всех узлов можно переходить к установке Nova 7.6.0 и новее.
2. Сценарий 2. Отключение IPv6 через sysctl с сохранением IPv6 на loopback-интерфейсе
Этот вариант используют на уже развёрнутых кластерах и для более ранних версий Nova. IPv6 отключается на внешних интерфейсах узла, на loopback-интерфейсе lo сохраняются адрес и маршрут ::1.
2.1. Почему нельзя отключать IPv6 на lo
Kubernetes создаёт для Pod файл /etc/hosts, который обычно содержит записи:
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
Если задать net.ipv6.conf.lo.disable_ipv6=1, IPv6-адреса и маршруты на loopback удаляются. Процесс, который слушает только адрес ::1, не сможет привязать сокет.
[root@master1 ~]# ip -6 route get ::1
RTNETLINK answers: Network is unreachable
[root@master1 ~]# curl -k --noproxy '*' --connect-timeout 3 https://[::1]:6443/readyz
curl: (7) Failed to connect to ::1 port 6443 after 0 ms: Couldn't connect to server
При создании или пересоздании пользовательских нагрузок Kubernetes не выполняет admission-проверки через API-сервер по адресу ::1. В Nova новые Pod не создаются, в событиях ресурсов могут появиться ошибки:
pods "harbor-registry-b4d9dc6-" is forbidden: Get "https://[::1]:6443/api/v1/namespaces/harbor/limitranges": dial tcp [::1]:6443: connect: cannot assign requested address
pods "flask-test-app-64f8899cdb-" is forbidden: Get "https://[::1]:6443/api/v1/namespaces/flask/limitranges": dial tcp [::1]:6443: connect: cannot assign requested address
2.2. Настройка
Выполняйте настройку последовательно, по одному узлу.
|
Перед применением |
-
Создайте файл
/etc/sysctl.d/99-nova-disable-ipv6.conf:sudo tee /etc/sysctl.d/99-nova-disable-ipv6.conf <<'EOF' net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 0 EOF -
Примените конфигурацию:
sudo sysctl --system -
Проверьте значения параметров
sysctl, адрес и маршрут loopback-интерфейса, наличие IPv6-адресов на всех интерфейсах:sysctl net.ipv6.conf.all.disable_ipv6 sysctl net.ipv6.conf.default.disable_ipv6 sysctl net.ipv6.conf.lo.disable_ipv6 ip -6 addr show dev lo ip -6 route get ::1 ip -o -6 addr showОжидаемые результаты проверки параметров sysctl Проверка Вывод all.disable_ipv61default.disable_ipv61lo.disable_ipv60Ожидаемые результаты проверки интерфейсов Проверка Вывод Ожидаемый результат Адрес на
loВ выводе
ip -6 addr show dev loесть строкаinet6 ::1/128 scope hostПрисутствует адрес
::1/128Маршрут к
::1В выводе
ip -6 route get ::1маршрут указывает на интерфейсloМаршрут проходит через интерфейс
loВнешние и управляющие интерфейсы
В выводе
ip -o -6 addr showIPv6-адрес есть только у интерфейсаloНа внешних и управляющих интерфейсах IPv6-адреса отсутствуют
2.3. Перезапуск kubelet
После применения параметров перезапустите kubelet на текущем узле:
sudo systemctl restart kubelet
sudo systemctl status kubelet
2.4. Проверка узла в production-кластере
Для production-кластера дождитесь восстановления узла. Узел должен перейти в состояние Ready, системные Pod — восстановить штатное состояние.
kubectl get node <node-name>
kubectl get pods -A -o wide
После проверки повторите процедуру последовательно на остальных узлах кластера.