gpt4 book ai didi

kubernetes - 将服务/Pod 加入本地网络

转载 作者:行者123 更新时间:2023-12-02 12:06:53 25 4
gpt4 key购买 nike

我有一个在家庭服务器上运行的单节点 kubernetes 部署,在该服务器上运行了多个服务。由于它是一个小型本地网络,我想阻止我的其他设备用于 pod ips 的本地地址范围的一部分,然后直接路由到它们。

例如,如果我有一个 Web 服务器正在运行,而不是将端口 80 暴露为外部端口并将端口从我的路由器转发到工作节点,我将能够直接将端口转发到 pod ip。

不过,我没有太多运气找到有关如何执行此操作的信息,这可能吗?

我是 kubernetes 的新手,所以我确定我遗漏了重要信息,请告诉我,以便我更新问题。

我通过使用 reference plugins 中的 macvlan CNI 插件来完成这项工作。 .使用 kubeadm 设置集群,这些插件已经安装,集群将被配置为使用它们。唯一要做的就是加入 cni.conf(在 /etc/cni/net.d 中)。我的看起来像这样

{
"name": "net",
"type": "macvlan",
"mode": "bridge",
"master": "eno1",
"ipam": {
"type": "host-local",
"ranges": [[{
"subnet": "10.0.0.0/8",
"gateway": "10.0.0.1",
"rangeStart": "10.0.10.2",
"rangeEnd": "10.0.10.254"
}]],
"routes": [
{ "dst": "0.0.0.0/0" }
]
}
}

把它放在适当的位置是 coredns 启动所需要的,你运行的任何 pod 都将具有配置中定义的范围内的 ips。由于这与我的局域网的其余部分在同一个子网上,我可以自由地 ping 这些容器,我的路由器甚至可以让我使用它们的设置,因为它们有 mac 地址(如果你不希望使用 ipvlan 而不是 macvlan,你会仍然能够 ping 和端口转发以及一切,您的路由器不会枚举所有设备,因为它们没有硬件地址)。

几个警告:
  • 服务将无法工作,因为它们都是“假的”(例如,它们没有接口(interface),它的所有 iptables 魔法使它们工作)。可能有一种方法可以让它们工作,但对于我的用例
  • 来说不值得
  • 无论出于何种原因,DNS 服务器都会一直使用 10.96.0.1。我不知道它从哪里得到那个地址,但我一直在通过定义 dnsPolicy: None 来解决它。和设置dnsConfig.nameservers[0]到我的路由器IP。可能有更好的解决方案。
  • 您应该使用 --service-cidr 10.0.10.0/24 --pod-network-cidr 10.0.10.0/24 运行 kubeadm或者似乎 kubelet(或其他东西)不知道如何与 pod 交谈。我其实不知道--service-cidr很重要,但这似乎是个好主意
  • 开箱即用,您的 pod 将无法与主设备对话,因为它们正在使用 macvlan 设备来奴役其以太网,并且无论出于何种原因,macvlan 都不允许您在主机和 guest 设备之间进行对话。正如您可以想象的那样,这不是一件好事。解决方案是在与您的 pod 具有相同子网的主机上手动添加一个 macvlan 设备。
  • 似乎即使您没有从 pod 公开的端口也可以从 lan 设备中使用(这并不酷),可能是因为 iptables 规则认为 lan 上的任何东西都是集群内部的。我没有花太多时间来调试这个。

  • 对于习惯于在生产环境中使用 Kubernetes 的人来说,这可能是某种大罪,但它对于家庭设置来说很酷且很有用,尽管有时它确实感觉像是一种 hack。

    最佳答案

    我相信您的问题的答案是使用 dhcp IPAM插件到 CNI ,但要注意 Pod 地址回收。我说要注意,因为这可能无关紧要,除非您有高频 Pod 终止,但另一方面,如果 Pod IP 在集群中被回收,我不确定它属于 Well That's Unfortunate™ 频谱的哪个位置。

    坏消息是,我没有任何使用这些替代 CNI 插件的经验,无法说出需要注意的尖锐边缘,所以希望如果其他人有,那么他们可以加入。

    关于kubernetes - 将服务/Pod 加入本地网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51413160/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com