как ограничить исходный IP во внешнем сервисе, когда запросы поступают от модуля внутри kubernetes - PullRequest
1 голос
/ 30 марта 2019

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

Кстати, все типы моих служб в кластере kubernetes - это clusterIP

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

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

  • kubernetes версия: 1.13.4
  • Режим прокси Kube: IPVS
  • оверлейная сеть: Calico
  • Входной контроллер: Nginx

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Попробуйте определить два вида сервисов 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 является внешним IP

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

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

  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

y.y.y.y является внешним IP

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

0 голосов
/ 31 марта 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...