![哪些 K3S 端口应该(不应该)在公共接口上公开](https://linux22.com/image/777394/%E5%93%AA%E4%BA%9B%20K3S%20%E7%AB%AF%E5%8F%A3%E5%BA%94%E8%AF%A5%EF%BC%88%E4%B8%8D%E5%BA%94%E8%AF%A5%EF%BC%89%E5%9C%A8%E5%85%AC%E5%85%B1%E6%8E%A5%E5%8F%A3%E4%B8%8A%E5%85%AC%E5%BC%80.png)
这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 服务。虽然您可以公开这些端口,但您必须确保只有必要的服务绑定到它们,并且您已采取安全措施(如防火墙或网络策略)。