【问题标题】:Kubernetes network allocation rangeKubernetes网络分配范围
【发布时间】:2020-02-09 21:29:00
【问题描述】:

在 Kubernetes 中有没有办法或者有一个网络插件可以限制 IP 分配的范围。例如,我正在尝试使用 weave 并使用子网 192.168.16.0/24。我想将通过 Kubernetes 分配给 Pod 的 IP 限制在192.168.16.10-30 的范围内。

但是,我的应用程序可能会根据要求使用其余 IP,即我的应用程序可以从 192.168.16.31-50 启动虚拟 IP,但我需要一些机制来确保我指定的 IP 范围不会由 K8s 分配,我的应用可以使用它。

我需要这样的东西:https://www.weave.works/docs/net/latest/tasks/ipam/configuring-weave/

【问题讨论】:

  • 我不确定我是否了解您的要求以及您为什么要这样做。创建集群时,您可以设置 pod 获取 IP 地址的 IP 范围,例如通过--cluster-ipv4-cidr 在 GKE 上。但是几乎所有超出此范围的内容都不会被 Kube 代理 afaik 路由。你想达到什么目的?你不能使用服务吗?
  • 同意@yvesonline,您可以使用 statefulset 更好地控制您的 pod 并使用 service 代替固定 ip 中的 pod。请提供有关您的申请要求的更多详细信息,以便从社区获得帮助。
  • 感谢您提供意见。
  • 感谢您提供意见。我正在使用自定义 DNS 服务器,并且可以通过自定义 DNS 访问 PODS。我有一个应用程序,它接受虚拟 IP 上的连接,因为它是以这种方式编写的,并且可以修复我的网络身份。我理解 statelfull pod 是一种替代方案,但它在这里没有帮助,因为我们的有状态应用程序通过虚拟 IP 有自己的连接机制,并且 IP 可以立即故障转移到其他 PODS 到服务已启动但客户端无法访问的其他影子 pod除非虚拟 IP 故障转移到该 pod。
  • 为了澄清,您想为您的 pod 分配多个 ip 地址,或者只是限制分配范围?如果是第一种情况,也许multus 会有所帮助。如果关于 ip 分配,请参阅 calico docs 中的 this 页面。

标签: kubernetes weave


【解决方案1】:

Network Policy 资源会有所帮助

Documentation

一个示例 NetworkPolicy 可能如下所示:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
      role: db
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24
    - namespaceSelector:
        matchLabels:
          project: myproject
    - podSelector:
        matchLabels:
          role: frontend
    ports:
    - protocol: TCP
      port: 6379
  egress:
  - to:
    - ipBlock:
        cidr: 10.0.0.0/24
    ports:
    - protocol: TCP
      port: 5978

规则ipBlock 描述了ingressegress 规则的网络范围。 例如:

    - ipBlock:
        cidr: 172.17.0.0/16
        except:
        - 172.17.1.0/24

CIDR

CIDR 代表Classless Inter-Domain Routing,参见samples of IPv4 CIDR blocks

更多信息

【讨论】:

  • 感谢您的信息。这无济于事,因为它有助于控制到 POD 的流量。但是,我正在寻找控制 IP 分配给 PODS 的机制。例如,如果我设置 --cluster-ipv4-cidr=192.168.16.0/24,我需要一种方法来指定 Kubernetes 不应分配给 pod 的范围,例如 192.168.16.31-50。
【解决方案2】:

其实这是一个很好的问题。这取决于您的 CNI,在您使用 weavenet 的情况下。

我假设您正在为您的 Weavenet 使用daemonset。如果是这样,请在您的 daemonset yaml 文件中添加类似的内容。

        spec:
          containers:
            - name: weave
              command:
                - /home/weave/launch.sh
              env:
                - name: IPALLOC_RANGE
                  value: 192.168.16.32/27

这将为您的 pod 提供 192.168.16.32-63 的 IP 范围。

您也可以使用 Wea​​ve CLI 进行设置,如果需要,请告诉我。

希望这有帮助。

【讨论】:

  • 感谢您的关注。假设我使用它,我的那个 pod 的网络掩码是什么?基于 --cluster-ipv4-cidr 假设 192.168.16.0/24 是 255.255.255.0 还是基于 IPALLOC_RANGE 是 255.255.255.224?我问这个问题是因为虚拟 IP 通常必须在同一个子网上。如果是 255.255.255.0,我觉得会很有帮助。我正在使用有状态的 pod,因为我需要持久存储。
  • @drifter 不确定,你说的 255.255.255.224 是什么意思,但是我在这里粘贴的这个 yaml 与 weavenet 部署有关。但是在 weavenet 中指定 IPALLOC_RANGE,无论创建什么 pod 都会选择该范围之间的 IP 范围,而不会干扰您的应用程序 IP 范围。因此,一般来说,如果部署了一个执行 helloworld 的应用程序 pod,它将选择 32-63 之间的某个位置,而您的部署文件中没有任何 cidr 定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-04
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-05
  • 2019-12-15
相关资源
最近更新 更多