Уведомление о совместимости с ядром Linux
Для узлов с версиями ядра Linux ранее 4.11 (например, CentOS 7) требуется дополнительная настройка перед установкой шлюза. Существуют два сценария в зависимости от того, нужно ли слушать порты ниже 1024:
- Сценарий 1: только версии ядра ранее 4.11 — шлюз слушает порты 1024 и выше. Необходимо установить
sysctls: [], чтобы убрать стандартный sysctlnet.ipv4.ip_unprivileged_port_start, который отсутствует в ядрах ранее 4.11. - Сценарий 2: версии ядра ранее 4.11 + привилегированные порты — шлюз должен слушать порты ниже 1024. Помимо изменения
sysctls: []из Сценария 1, нужно добавить capabilityNET_BIND_SERVICEдля разрешения привязки к привилегированным портам.
Пропустите этот раздел, если версия вашего ядра 4.11 или новее.
Содержание
Istio GatewayПредварительные требованияПроцедураСценарий 1: только версии ядра ранее 4.11 (порты ≥ 1024)Сценарий 2: версии ядра ранее 4.11 + привилегированные порты (порты < 1024)Применение шаблона инъекцииKubernetes Gateway APIПредварительные требованияПроцедураСценарий 1: только версии ядра ранее 4.11 (порты ≥ 1024)Сценарий 2: версии ядра ранее 4.11 + привилегированные порты (порты < 1024)Применение ConfigMapIstio Gateway
Предварительные требования
- Установите
jqлокально для обработки JSON на следующих шагах.
Процедура
Сценарий 1: только версии ядра ранее 4.11 (порты ≥ 1024)
-
Создайте YAML-файл с именем
gateway-injection-template.txt, содержащий шаблон инъекции по умолчанию для шлюзов.Нажмите, чтобы развернуть
- Удалите
sysctls, так какnet.ipv4.ip_unprivileged_port_startотсутствует в ядрах Linux ранее 4.11.
- Удалите
Сценарий 2: версии ядра ранее 4.11 + привилегированные порты (порты < 1024)
Если вашему шлюзу нужно слушать порты ниже 1024, необходимо добавить capability NET_BIND_SERVICE помимо изменения sysctls: []. Измените секцию securityContext контейнера istio-proxy в gateway-injection-template.txt:
Если после добавления capability NET_BIND_SERVICE шлюз всё ещё не может слушать порты ниже 1024, рассмотрите следующие альтернативы:
- Используйте порты 1024 и выше (рекомендуется) — перенастройте слушатели шлюза на порты ≥ 1024, чтобы полностью избежать проблем с привилегиями.
- Запустите шлюз от root — установите
runAsUser: 0,runAsGroup: 0иrunAsNonRoot: falseвsecurityContextконтейнера. Это предоставит процессу шлюза полные привилегии. Тщательно оцените последствия для безопасности перед использованием этого подхода.
Применение шаблона инъекции
-
Примените патч к шаблону инъекции
gatewayресурсаIstio: -
Дождитесь, пока контрольная плоскость вернёт состояние
Ready, выполнив команду:
Kubernetes Gateway API
Предварительные требования
- Alauda Container Platform версии 4.2.0 или новее, либо обновите CRD Gateway API до последней версии.
Процедура
Сценарий 1: только версии ядра ранее 4.11 (порты ≥ 1024)
-
Создайте ConfigMap с именем
asm-kube-gateway-optionsв том же namespace, где планируете развернуть Gateway:- Удалите
sysctls, так какnet.ipv4.ip_unprivileged_port_startотсутствует в ядрах Linux ранее 4.11.
- Удалите
Сценарий 2: версии ядра ранее 4.11 + привилегированные порты (порты < 1024)
Если вашему шлюзу нужно слушать порты ниже 1024, добавьте capability NET_BIND_SERVICE в ConfigMap. Измените поле data.deployment, чтобы включить securityContext на уровне контейнера:
Если после добавления capability NET_BIND_SERVICE шлюз всё ещё не может слушать порты ниже 1024, рассмотрите следующие альтернативы:
- Используйте порты 1024 и выше (рекомендуется) — перенастройте слушатели шлюза на порты ≥ 1024, чтобы полностью избежать проблем с привилегиями.
- Запустите шлюз от root — установите
runAsUser: 0,runAsGroup: 0иrunAsNonRoot: falseвsecurityContextконтейнера. Это предоставит процессу шлюза полные привилегии. Тщательно оцените последствия для безопасности перед использованием этого подхода.
Применение ConfigMap
-
Сошлитесь на ConfigMap в вашем ресурсе Gateway, добавив поле
infrastructure.parametersRef:Эта конфигурация гарантирует, что развертывание шлюза использует пользовательские настройки securityContext, определённые в ConfigMap.