哪些 K3S 端口应该(不应该)在公共接口上公开

哪些 K3S 端口应该(不应该)在公共接口上公开

K3S文档解释此 kubernetes 发行版需要哪些端口才能运行。

它没有解释的是,这些端口中的哪些可以在公共接口上打开。

K3S 似乎处理以下端口

Master
6443/tcp nodes
8472/udp flannel
10250/tcp kublet (metrics)
10251/tcp controller-manager
10255/tcp kublet (readonly)

Worker
10250/tcp kublet (metrics)
10255/tcp kublet (readonly)
30000-32767/tcp nodeports

鉴于集群节点共享自己的子网。将端口绑定到子网接口(而不是公共接口)似乎很有意义。不幸的是,这对于 K3S 来说并不轻松。

因此,在进行这些步骤之前:

上述哪些端口应该对公共接口隐藏?

上述哪些端口是安全的,甚至可能需要通过公共接口提供(例如通过 kubectl 访问集群)?

答案1

在决定 k3s 集群上的端口暴露时,请记住优先考虑安全性而不是便利性。

不应从公共接口访问的端口:

  • 6443/tcp (主站):此端口是 Kubernetes API 服务器的主要通信端口,不应直接暴露给公共互联网。相反,请考虑使用 VPN 或安全隧道来访问它。这样,在允许任何人进入之前,您就已经进行了秘密握手。

  • 8472/udp (主站):您必须将此端口限制为集群内部通信。Flannel 网络覆盖会使用它来处理节点之间的通信。

  • 10251/tcp (主服务器):该端口专为内部通信而设计,由控制器管理器使用,不应直接向公众公开。

可以通过公共接口安全访问的端口:

  • 10250/tcp (主服务器和从服务器):此端口由 kubelet 用于指标收集和监控。虽然它可以暴露,但必须妥善保护它,考虑使用 TLS 加密和适当的身份验证机制来限制访问。

  • 10255/tcp (主服务器和工作服务器):与端口 10250 类似,如果暴露,应使用适当的身份验证和加密进行保护。kubelet 使用此端口进行只读访问。

  • 30000-32767/tcp(工作者):这些端口用于 NodePort 服务。虽然您可以公开这些端口,但您必须确保只有必要的服务绑定到它们,并且您已采取安全措施(如防火墙或网络策略)。

答案2

如果你需要使用 kubectl 访问集群,你只需要暴露 6443 端口,无论如何官方文档指出其中,flannel 和 vxlan 相关端口存在一些危险: k3s 入站端口

相关内容