高可用k8s云平台中,如何做到服务(service)的外网暴露,如何在添加服务(service)时自动暴露访问而不是手动添加上去?业内主流方都有什么?
以下方案是否可行?
- 搭建DNS服务+nginx+ingress,这种方案如何自动添加服务暴露
- haproxy+keepalive+ingress,这种方案如何自动添加服务暴露
建议采用 nginx+ingress
ingress 我们可以把它看成 Service 的服务,在 Service 前面再搭建一个 nginx或者haproxy的服务,作为面向外部流量的统一入口,将不同 host 或 url 转发到对应的后端 Service,再由 Service 转给 Pod,最终实现路由请求的转发。
如果后端服务器要维护,在高并发的情况,采用HAProxy做负载均衡,会影响用户访问。反正,采用Nginx做前端负载均衡,只要撑得住,后端切掉几台都不会影响到用户访问。
收起一般外部访问容器,是需要ingress和service成对配置的:
1. 自动暴露需要安装Ingress Controller. haproxy和nginx都有对应的解决方案(商业F5也有类似的CIS方案),此组件可自动更新service背后的容器IP到对应负载均衡的backend。
2. 生产外放访问,需要网络部配合,根据业务流量大小,可部署分组ingress controller。
3. 开发测试的外放访问,可和网络部门配合,部署专门的泛域名controller服务,可实现添加ingress自动外网可访问(视情况是否要引入审批)。
收起微服务架构中对外暴露网关gateway即可,则 DNS/ingress+gateway svc ,网关会将流量转发到注册中心相应的服务,而不需要每次在服务注册时再手动对外暴露服务。
收起