如何限制来自kubernetes内部pod的外部服务中的源IP

时间:2019-03-30 02:33:12

标签: kubernetes kubernetes-networkpolicy

假设我有一个mysql服务,在这个虚拟机上,我想通过iptables限制源ip,但是源来自kubernetes pod,有没有办法实现这个目标?让某些Pod可以到达mysql,而其他Pod则不能。

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

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

  

这是您的事,我不敢相信您,我会通过iptables来制定规则。

  • kubernetes版本:1.13.4
  • kube代理模式:ipvs
  • 覆盖网络:印花布
  • ingress-controller:nginx

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

尝试定义两种Kubernetes服务,向它们添加ExternalIP,然后根据您的首选项阻止外部IP(将其分配给服务,该服务公开您不希望使用iptables访问数据库或不接受连接的部署或pod)正确接受此连接。

例如:

对于要接受连接的广告连播,

  1. 标记此广告连播:

    $ 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

x.x.x.x 是外部IP

记住在部署Pod时在适当的名称空间中创建服务。

对于Pod,您不想拒绝连接:

  1. 标记此广告连播:

    $ 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

y.y.y.y 是外部IP

我希望这会有所帮助。