Рейтинг:0

Сетевые политики Kubernetes не применяются до тех пор, пока наборы демонов сетевых модулей не будут перезапущены. Почему?

флаг br

У меня есть только одна сетевая политика в моем кластере в пространстве имен prod, которая разрешает только правила входа. Сетевой плагин weave-net. Для исходящего трафика не настроены никакие правила, поэтому я ожидаю, что исходящий трафик будет заблокирован. Но пока я не перезапущу модули, установленные в сети, правило не действует. Из лучших практик я знаю, что у меня должны быть правила входа и выхода по умолчанию. Но я хочу понять причину такого поведения. Всегда ли требуется этот шаг для перезапуска модулей сетевых модулей?

1. Определение сетевой политики

Версия API: networking.k8s.io/v1
вид: NetworkPolicy
метаданные:
  имя: политика тестовой сети
  пространство имен: продукт
спецификация:
  вход:
  - {}
  подселектор:
    метки соответствия:
      запустить: prod-nginx
  policyTypes:
  - Вход
  - Выход

2. Проверка объекта netpol

Имя: политика тестовой сети
Пространство имен: prod
Дата создания: 06.06.2021 10:16:50 +0000 UTC
Ярлыки: <нет>
Аннотации: <нет>
Спецификация:
  Подселектор: запустить = prod-nginx
  Разрешение входящего трафика:
    В порт: <любой> (трафик разрешен во все порты)
    From: <любой> (трафик не ограничен источником)
  Разрешение исходящего трафика:
    <нет> (выбранные модули изолированы для исходящего подключения)
  Типы политик: вход, выход

3. Тестирование исходящего трафика на сервер nginx (на мой взгляд, это неожиданно)

Примечание: 10.39.0.5 — это IP-адрес сервера nginx, работающего в тестовом пространстве имен.

Команда: kubectl -n prod exec -it prod-nginx -- curl http://10.39.0.5 | grep успешно #выход
Ответ: <p>Если вы видите эту страницу, веб-сервер nginx успешно установлен и

4. Перезапустил модули ткацкой сети.

5. Повторное тестирование исходящего соединения с тем же сервером nginx (ожидается)

Примечание: 10.39.0.5 — это IP-адрес сервера nginx, работающего в тестовом пространстве имен.

Команда: kubectl -n prod exec -it prod-nginx -- curl http://10.39.0.5 | grep успешно #выход**
Ответ: Нет связи
matt_j avatar
флаг in
Нет необходимости перезапускать модули `weave-net`. Какой под имеет IP-адрес «10.39.0.5», можете ли вы его описать?
Rajesh Dutta avatar
флаг br
IP-адрес 10.39.0.5 принадлежит серверу nginx, который работает в другом пространстве имен («тест»).
Rajesh Dutta avatar
флаг br
Прошу прощения, что не упомянул об этом. Я обновил вопрос, добавив примечание об IP. Спасибо за ваши усилия.
Рейтинг:0
флаг in

Я хотел бы показать вам, что перезапуск ткать сеть Поды не требуются для сетевая политика вступить в силу.

Твой политика тестовой сети сетевая политика применяется к модулям с меткой запустить = prod-nginx в продукт Namespace и разрешает весь входящий трафик и запрещает весь исходящий трафик.

Я создам пример, чтобы проиллюстрировать, как это работает.


Сначала я создал prod-nginx & prod-тест Pods и проверил подключение без сетевая политика развернуто:

# kubectl запустить prod-nginx --image=nginx -n prod
pod/prod-nginx создан

# kubectl запустить prod-test --image=nginx -n prod
pod/prod-тест создан
    
# kubectl get pod -o wide -n prod
ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСКА ВОЗРАСТ IP-МЕТКИ
prod-nginx 1/1 Работает 0 37 с 10.44.0.1 run=prod-nginx
prod-test 1/1 Работает 0 11 с 10.44.0.2 run=prod-test

# kubectl exec -it prod-nginx -n prod -- curl 10.44.0.1 | grep -я успех
<p>Если вы видите эту страницу, веб-сервер nginx успешно установлен и

# kubectl exec -it prod-nginx -n prod -- curl 10.44.0.2 | grep -я успех
<p>Если вы видите эту страницу, веб-сервер nginx успешно установлен и

Все работает нормально, поэтому давайте развернем политика тестовой сети сетевая политика и снова протестируйте:

# кошка netpol.yml 
Версия API: networking.k8s.io/v1
вид: NetworkPolicy
метаданные:
  имя: политика тестовой сети
  пространство имен: продукт
спецификация:
  вход:
  - {}
  подселектор:
    метки соответствия:
      запустить: prod-nginx
  policyTypes:
  - Вход
  - Выход
  
# kubectl применить -f netpol.yml 
networkpolicy.networking.k8s.io/test-network-policy создана

Мы можем видеть, что prod-nginx Pod не может подключаться к другим модулям, но может подключаться к себе:
ПРИМЕЧАНИЕ: Модуль не может блокировать доступ к себе (см. Сетевые политики документация)

# kubectl exec -it prod-nginx -n prod -- curl 10.44.0.1 | grep -я успех
<p>Если вы видите эту страницу, веб-сервер nginx успешно установлен и
   
# kubectl exec -it prod-nginx -n prod -- curl 10.44.0.2 | grep -я успех
команда завершена с кодом выхода 7

Теперь давайте создадим этап-nginx Стручок в сцена пространство имен и проверьте, prod-nginx Pod может подключиться к нему:

# kubectl запустить stage-nginx --image=nginx -n stage
pod/stage-nginx создан

# kubectl get pod -o wide -n stage
ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСКА ВОЗРАСТ IP          
stage-nginx 1/1 Работает 0 20 с 10.44.0.6   

# kubectl exec -it prod-nginx -n prod -- curl 10.44.0.6 | grep -я успех
команда завершена с кодом выхода 7

Мы проверили правильность работы правила выхода и перезапустили ткать сеть Поды не требуются.

Rajesh Dutta avatar
флаг br
Спасибо за попытку. Я обновил вопрос с примечанием об IP.
Rajesh Dutta avatar
флаг br
Спасибо за попытку. Я обновил вопрос с примечанием об IP. Теперь что касается проблемы. Попробуйте подключить сервер, работающий в другом пространстве имен. В моем случае я все еще вижу проблему. Вы можете несколько раз попробовать включить и отключить выход и посмотреть, каждый раз ли сетевая политика ведет себя так, как ожидалось, без перезапуска серверов weave-net. На самом деле проблема существует и с Ingress, но я решил объяснить с выходом. и пока что я наблюдал, это происходит только тогда, когда вы указываете тип политики (выход в нашем случае использования) без правил.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.