【问题标题】:how to limit source IP in a outside service that requests come from a pod inside kubernetes如何在请求来自 kubernetes 内的 pod 的外部服务中限制源 IP
【发布时间】:2019-08-20 23:55:00
【问题描述】:

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

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

我知道我可以在 Kubernetes 集群中做一些网络策略,但是在 DBA 看来,

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

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

【问题讨论】:

    标签: kubernetes kubernetes-networkpolicy


    【解决方案1】:

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

    【讨论】:

    • mysql不在kubernetes集群中
    【解决方案2】:

    尝试定义两种 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

    x.x.x.x是外部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

    y.y.y.y是外部IP

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2021-10-27
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      相关资源
      最近更新 更多