1

假设我有一个 mysql 服务,在这个 vm 上,我想通过 iptables 限制源 ip,但是源来自 kubernetes pod,有没有办法实现这个目标?让一些 pod 可以访问 mysql,其他 pod 不能。

顺便说一句,我在 kubernetes 集群中的所有服务类型都是 clusterIP

我知道我可以在 kubernetes 集群中做一些网络策略,但是在 DBA 视图中,

这是你的事,我不敢相信你,我会通过 iptables 执行我的规则。

  • Kubernetes 版本:1.13.4
  • kube 代理模式:ipvs
  • 覆盖网络:印花布
  • 入口控制器:nginx
4

2 回答 2

0

在 mysql pod 上定义网络策略规则。使用网络策略,您可以控制从特定 pod 或命名空间到 mysql pod 的流量

于 2019-03-31T06:50:22.783 回答
0

尝试定义两种 Kubernetes 服务,将 ExternalIP 添加到它们,然后根据您的偏好块 ExternalIP(分配给公开部署或 Pod 的服务,您不想接受使用 iptables 访问数据库的连接或正确接受这个联系。

例如 :

对于要接受连接的 pod:

  1. 标记此 pod:

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

  2. 为他们定义服务,没有适当的选择器相应的标签,您将其添加到POD中

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 执行命令以允许 Pod 之间的连接

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

xxxx是外部IP

请记住在部署 pod 时在适当的命名空间中创建服务。

对于您不想拒绝连接的 pod:

  1. 标记此 pod:

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

  2. 为他们定义服务,没有适当的选择器相应的标签,您将其添加到POD中

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 执行命令以允许 Pod 之间的连接

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

yyyy是外部IP

我希望这有帮助。

于 2019-05-23T08:11:05.037 回答