Можно ли сопоставить разные модули / сервисы с интерфейсами разных узлов в Kubernetes? - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь построить базовую топологию бэкэнда и бэкэнда в Kubernetes (на самом деле Amazon EKS) с модулями как внешнего интерфейса, так и бэкэнда, расположенными на одном узле. Я хочу, чтобы у каждого узла было 2 интерфейса: publi c один, который будет подключаться к inte rnet шлюзу, и частный, который не будет. Таким образом, было бы естественно каким-то образом отобразить внешние интерфейсы (или службу) в интерфейс publi c для маршрутизации traffi c в / из inte rnet и отобразить внутренние модули в частный интерфейс, чтобы предотвратить любой внешний доступ к ним. Возможно ли это даже в Куберне? Я знаю, что мне, вероятно, следует везде использовать интерфейсы publi c и ограничивать доступ с помощью ACL, но дизайн с разными интерфейсами выглядит для меня проще и безопаснее.

Ответы [ 3 ]

3 голосов
/ 21 февраля 2020

Обычно это не так, как в Куберне. IP-адреса Pod всегда будут «частными», то есть кластерными IP-адресами, которые не используются с inte rnet. Вы пробиваете определенные c дыры в IP-пространстве кластера, используя службы типа LoadBalancer. В терминах AWS все модули имеют частные IP-адреса, и вы используете ELB для связывания определенных c вещей с сетью publi c.

2 голосов
/ 21 февраля 2020

Это слишком сложный способ go об этом.

Почему бы вам не сделать следующее:

  1. Предоставьте вашему EKS-кластеру набор публикаций c и частные подсети
  2. Provision 'publi c' pods за службой типа "LoadBalancer", настроенной для предоставления ELBS или NLB в ваших подсетях publi c.
  3. Provision частные модули за службами типа 'ClusterIP' - и убедитесь, что фактические узлы кластера eks инициализируются в частных подсетях вашего vp c.

У ваших узлов нет веских оснований подвергаться воздействию inte rnet. Используйте Loadbalancer в качестве выреза и шлюзы NAT, чтобы ваши частные подсети могли достигать inte rnet.

. Это ограничивает вашу поверхность publi c api теми сегментами 'publi c' pods, которые доступны в сервисах publi c, оставляя остальную часть вашего кластера темной.

Кроме того,

Я знаю, что, вероятно, мне следует использовать publi c интерфейсы везде и ограничивают доступ с помощью ACL

не очень хорошая идея. Используйте частные интерфейсы везде и убедитесь, что ваши узлы не видны из публикации c inte rnet. Почти никогда не бывает хорошей идеей иметь доступ к серверу из целого rnet в целом - он подвергает вас всевозможным атакам, которые будут защищены от NAT, LoadBalancers или других промежуточных систем.

0 голосов
/ 21 февраля 2020

Возможно в Куберенетес. Вам нужно создать ingress или создать loadbalancer сервис для ваших модулей интерфейса, чтобы получить к нему доступ через интерфейсы publi c. Не создавайте то же самое для бэкэндов. Чтобы ограничить трафики c от других модулей вашими бэкэндами и внешними модулями, вы можете создать network policy и разрешить traffi c только между этими модулями.

Чтобы создавать модули на определенных c узлах, используйте nodeSelector или podAffinity. Если вы хотите, чтобы один модуль запускался на каждом узле или указывал c узлы, тогда создайте для них daemonset.

...