Kubernetes 将服务/播客加入本地网络
我有一个在家庭服务器上运行的单节点kubernetes部署,在该服务器上运行多个服务。由于它是一个小型的本地网络,我想封锁我的其他设备用于pod IP的一部分本地地址范围,然后直接路由到它们 例如,如果我有一个web服务器正在运行,那么我将能够直接将端口转发到pod ip,而不是将端口80公开为外部端口,并将端口从路由器转发到工作节点 我没有太多的运气找到关于如何做到这一点的信息,但有可能吗 我是kubernetes的新手,所以我确定我遗漏了重要信息,请让我知道,以便我可以更新问题Kubernetes 将服务/播客加入本地网络,kubernetes,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和端口转发以及所有操作,您的路由器不会枚举所有设备,因为它们没有硬件地址)
有几点需要注意:
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
是否重要,但这似乎是个好主意
对于习惯于在生产中使用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让它工作,但我太忙了,无法更新它。我将用我采取的确切步骤。