как ограничить IP-адрес источника во внешней службе, запросы к которой поступают из модуля внутри kubernetes

#kubernetes #kubernetes-networkpolicy

#kubernetes #kubernetes-networkpolicy

Вопрос:

допустим, у меня есть служба mysql, на этой виртуальной машине я хочу ограничить IP-адрес источника через iptables, но исходники поступают из модуля kubernetes, есть ли способ достичь этой цели? пусть некоторые модули могут достигать mysql, другие модули — нет.

кстати, тип всех моих сервисов в кластере kubernetes — ClusterIP

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

это ваше дело, я не могу вам поверить, я буду выполнять свои правила через iptables.

  • версия kubernetes: 1.13.4
  • режим прокси-сервера kube: ipvs
  • оверлейная сеть: calico
  • входящий контроллер: nginx

Ответ №1:

Определите правила сетевой политики в модуле mysql. С помощью сетевой политики вы можете управлять трафиком в модуль mysql из определенного модуля или пространства имен

Комментарии:

1. mysql отсутствует в кластере kubernetes

Ответ №2:

Попробуйте определить два вида сервисов Kubernetes, добавьте к ним externalIP, а позже, в соответствии с вашими предпочтениями, заблокируйте externalIP (который присваивается службе, предоставляющей развертывание, или модулю, от которого вы не хотите принимать соединение с использованием iptables для доступа к вашей базе данных или должным образом принимать это соединение.

Например :

Для модулей вы хотите принять соединение:

  1. Пометьте эти модули:

    $ kubectl label pod test app=MyApp --namespace development

  2. Определите для них службу с соответствующим селектором, соответствующей метке, которую вы добавляете в модуль

 apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 9376
  externalIPs:
  - 80.11.12.10
  
  1. Создайте его:

    $ kubectl create -f service.yaml --namespace development

  2. Вы также можете исправить службу с помощью externaiIP вместо добавления его в файл конфигурации.

  3. Выполните команду из MySQL, чтобы разрешить соединение между модулями

    $ iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED --source x.x.x.x -p tcp --dport 80 -j ACCEPT

x.x.x.x является externalIP

Не забудьте создать службу в соответствующем пространстве имен, когда ваши модули будут развернуты.

Для модулей вы не хотите отклонять соединение:

  1. Пометьте эти модули:

    $ kubectl label pod egg app=test --namespace development

  2. Определите для них службу с соответствующим селектором, соответствующей метке, которую вы добавляете в модуль

 apiVersion: v1
kind: Service
metadata:
  name: example1-service
spec:
  selector:
    app: test
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 9376
  externalIPs:
  - y.y.y.y
  
  1. Создайте его:

    $ kubectl create -f service.yaml --namespace development

  2. Вы также можете исправить службу с помощью externaiIP вместо добавления его в файл конфигурации.

  3. Выполните команду из MySQL, чтобы разрешить соединение между модулями

    $ iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED --source y.y.y.y -p tcp -- dport 80 -j DROP

да.да.да. является externalIP

Я надеюсь, это поможет.