#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 для доступа к вашей базе данных или должным образом принимать это соединение.
Например :
Для модулей вы хотите принять соединение:
-
Пометьте эти модули:
$ kubectl label pod test app=MyApp --namespace development
-
Определите для них службу с соответствующим селектором, соответствующей метке, которую вы добавляете в модуль
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
-
Создайте его:
$ kubectl create -f service.yaml --namespace development
-
Вы также можете исправить службу с помощью externaiIP вместо добавления его в файл конфигурации.
-
Выполните команду из 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
Не забудьте создать службу в соответствующем пространстве имен, когда ваши модули будут развернуты.
Для модулей вы не хотите отклонять соединение:
-
Пометьте эти модули:
$ kubectl label pod egg app=test --namespace development
-
Определите для них службу с соответствующим селектором, соответствующей метке, которую вы добавляете в модуль
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
-
Создайте его:
$ kubectl create -f service.yaml --namespace development
-
Вы также можете исправить службу с помощью externaiIP вместо добавления его в файл конфигурации.
-
Выполните команду из MySQL, чтобы разрешить соединение между модулями
$ iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED --source y.y.y.y -p tcp -- dport 80 -j DROP
да.да.да. является externalIP
Я надеюсь, это поможет.