Network Security в Kubernetes
Продолжаем серию статей о безопасности в Kubernetes. В этот раз поговорим про сетевую безопасность — Network Security. Это всем известная «боль», так как в Kubernetes существует ряд проблем с сетевой безопасностью:
— по умолчанию трафик между подами разрешён;
— внутренние адреса подов постоянно меняются;
— трафик не шифрован.
Настраивать внешние правила сложно, одно из решений — Dynamic Network Policies, который позволяет это сделать либо традиционным для админов образом с указанием явных масок, либо через лейблы:
Плохо лишь то, что Network Policies поддерживаются не везде:
Если будете выбирать между Weave и Calico, учтите, что шифрование в Weave даёт очень большой оверхед, и это, разумеется, минус. Что касается Calico, то он очень стабилен и позволяет настраивать не только входящие, но и исходящие сетевые политики.
Микроменеджмент сетевой безопасности
Бывают и другие уровни сетевой безопасности. Например, параноидальная сетевая безопасность, которая не настраивается сетевыми политиками. В таком случае надо использовать Service Mesh. Однако на сегодняшний день по нему можно сказать следующее: 1. (Всё ещё) очень сложно. 2. (Всё ещё) не всегда стабильно.
Следующий подвид безопасности — безопасность на уровне Ingress. Это как раз та безопасность приложений, когда на приложение в Kubernetes идёт трафик и вам его нужно разграничить и как-то фильтровать. Ingress-контроллеры, например, в Nginx, поддерживают white-листы для доступа к особо чувствительным админкам, чтобы запретить доступ к админке с неавторизованных источников. Это можно делать, но нужна поддержка proxy-протокола в облачных балансерах. Также стоит добавить, что для парочки клиентов есть крутое решение — Web application firewall, который интегрируется в Nginx Ingress Controller — бесплатный ModSecurity, позволяющий фильтровать достаточно большое количество атак (ModSecurity понимает очень много паттернов).
Читайте также: