kubernetes - 从 Docker Swarm 迁移:向世界公开我的 Kubernetes 服务(在知名端口上)
问题描述
我运行一个想要迁移到 Kubernetes 的小型(读取:单节点)Docker Swarm 集群,但我不知道如何在特定端口上公开服务,以便我可以从外部世界访问它。
在 Docker Swarm 中,我可以通过指定暴露例如 MySQL 服务器
ports:
- '3306:3306'
作为我的堆栈配置文件中服务块的一部分,我可以在127.0.0.1:3306
.
为了在 Kubernetes 中复制这一点,我的第一反应是使用NodePort
服务类型并指定
ports:
- port: 3306
targetPort: 3306
nodePort: 3306
在服务规范中。但这是不允许的:Kubernetes 告诉我provided port is not in the valid range. The range of valid ports is 30000-32767
。
然后是Ingress
,它似乎与我想要做的非常一致,但它处于测试阶段,显然面向 HTTP 服务(它不涵盖我的所有用例)。也有这种LoadBalancer
类型,但我没有使用支持它的云提供商,所以这不是我的选择。
这让我有点困惑。如果我想在我的 Kubernetes 集群中公开一个服务,以便我可以从外部访问它(例如从整个互联网上some-public-ip:3306
),那么推荐的(或者对初学者友好的)设置它的方法是什么?我错过了什么?
解决方案
NodePort
可能是最简单的方法,但您需要在 30000 - 32767 范围内选择一个端口。这样您就可以访问some-public-ip:30306
内部映射到您服务的端口 3306 的端口。