裸金属Kubernetes如何像docker-compose一样暴露80和443端口到公网
问题答复
首先明确第二个问题的结论:Kubernetes 从设计上完全支持你所说的暴露方式,没有强制依赖云厂商的负载均衡器,裸金属部署场景有原生兼容的实现方案。
关于第一个问题的具体实现逻辑,和你之前使用 docker-compose 的架构几乎完全对齐,操作步骤如下:
- 第一步:集群内部署的私有应用,只需要创建
ClusterIP类型的Service即可,这类Service仅允许集群内部访问,和你之前docker-compose私有网络中的应用定位完全一致。 - 第二步:部署你熟悉的反向代理服务(Caddy、NGINX均可,也可以直接使用Kubernetes生态的NGINX Ingress Controller这类标准化反代组件),对外仅暴露80、443端口即可,暴露反代的方式可选以下两种最常用的方案:
- 方案一:给反代Pod配置
hostNetwork: true参数,直接占用宿主机的80、443端口,效果和你之前docker端口映射-p 80:80 -p 443:443完全一致。整体链路为Internet --> 集群节点公网IP:80/443 --> 反代Pod --> 后端应用ClusterIP Service --> 业务Pod,和你之前用的docker-compose链路没有区别。 - 方案二:如果不想占用宿主机网络命名空间,给反代创建
NodePort类型的Service,将80、443端口映射到集群默认的30000-32767端口段,再手动配置宿主机的iptables规则,把宿主机80、443端口的流量转发到对应NodePort即可。
- 方案一:给反代Pod配置
如果后续需要管理的应用数量较多,推荐使用Ingress Controller替代自己手动维护反代配置,你只需要创建Ingress资源定义域名和后端服务的对应关系,反代规则会自动生成,底层逻辑还是和你手动部署Caddy做反代完全一致。
内容的提问来源于stack exchange,提问作者fallais
相关产品推荐
相关产品推荐

