Kubernetes 将服务/播客加入本地网络

Kubernetes 将服务/播客加入本地网络,kubernetes,Kubernetes,我有一个在家庭服务器上运行的单节点kubernetes部署,在该服务器上运行多个服务。由于它是一个小型的本地网络,我想封锁我的其他设备用于pod IP的一部分本地地址范围,然后直接路由到它们 例如,如果我有一个web服务器正在运行,那么我将能够直接将端口转发到pod ip,而不是将端口80公开为外部端口,并将端口从路由器转发到工作节点 我没有太多的运气找到关于如何做到这一点的信息,但有可能吗 我是kubernetes的新手,所以我确定我遗漏了重要信息,请让我知道,以便我可以更新问题 我通过使用

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

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

我没有太多的运气找到关于如何做到这一点的信息,但有可能吗

我是kubernetes的新手,所以我确定我遗漏了重要信息,请让我知道,以便我可以更新问题


我通过使用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都将具有配置中定义范围内的IP。由于这与我的局域网的其余部分在同一子网中,我可以自由地ping这些容器,我的路由器甚至允许我玩它们的设置,因为它们有mac地址(如果您不想使用ipvlan而不是MAVLAN,您仍然可以ping和端口转发以及所有操作,您的路由器不会枚举所有设备,因为它们没有硬件地址)

有几点需要注意:

  • 服务不起作用,因为它们都是“假的”(例如,它们没有接口,所有的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不允许您在主机和来宾设备之间通信。您可以想象,这不是一件好事。解决方案是在主机上手动添加一个macvlan设备,该主机与您的POD具有相同的子网

  • 看起来,即使您没有从pod中公开的端口也可以从lan设备中使用(这并不酷),可能是因为iptables规则认为lan上的任何东西都是集群内部的。我没有花太多时间调试这个


  • 对于习惯于在生产中使用kubernetes的人来说,这可能是一种罪过,但对于家庭设置来说,这是一种很酷和有用的方式,尽管有时感觉确实像是一种黑客行为。

    我相信你的问题的答案是使用插件,但要注意Pod地址的回收。我说要注意,因为它可能会没关系,除非你有高频吊舱终止,但另一方面,我不确定它落在井上的什么地方,这很不幸™ 如果Pod IP在群集中回收,则为频谱


    坏消息是,我没有任何使用这些替代CNI插件的经验,无法与需要注意的尖锐边缘对话,因此希望如果其他人有这样的经验,他们可以插话。

    我认为这是正确的,但我认为带有主机本地IPAM的ipvlan CNI插件更接近我想要的。问题是我不知道如何使用参考CNI插件说选择一个插件并用一些yaml文件运行kubectl apply-f,但我找不到任何关于yaml的信息作为参考插件AIUI,你不需要任何特定于Kubernete的东西;你只需要这些东西就可以批量运行。显示出它只是
    /etc/cni/net.d
    中的一些JSON文件,然后就有shell脚本可以运行了一个示例
    docker
    容器来查看它在集群中的工作情况。我敢打赌示例中引用的
    bridge
    插件可能是最简单的测试方法。感谢我能够使用macvlan和host local让它工作,但我太忙了,无法更新它。我将用我采取的确切步骤。