Rancher:外部服务请求K8S-MongoDB服务
- 一、前置条件
- 二、「Layer 4 」与「Layer 7」Load Balancing的区别
- 三、部署容器化MongoDB
- 四、Load Banlancer of Service
- 五、mongoDB验证连接
- 六、总结
#参考链接
[1] How access MongoDB in Kubernetes from outside the cluster
[2] cannot connect to mongo-express behind ingress k8s
[3] Defining a Service
一、前置条件
1、K8S集群支持7层负载均衡
2、Rancher容器管理平台
3、对K8S中的Service 、Pod 、ingress 等概念有一定的了解
二、「Layer 4 」与「Layer 7」Load Balancing的区别
在负载均衡(Load Balancing)中,4层(Layer 4)和7层(Layer 7)是两个常用的概念,指的是负载均衡器在网络协议栈的不同层级上进行负载均衡的方式。
负载方式 | 描述 |
---|---|
Layer 4 Load Balancing | 4层负载均衡是在传输层(Transport Layer)进行负载均衡的一种方式。传输层负载均衡器通常根据源IP地址、目标IP地址、端口号等传输层的信息来进行负载均衡决策。这种负载均衡方式不关心传输层以上的应用层协议和数据内容,只根据传输层的信息进行转发和分发请求。 |
Layer 7 Load Balancing | 7负载均衡是在应用层(Application Layer)进行负载均衡的一种方式。应用层负载均衡器可以深入解析请求的应用层协议,如HTTP、HTTPS等,并根据请求的内容、URL、HTTP头部等更详细的信息来进行负载均衡决策。这种负载均衡方式可以实现更精细的请求转发和应用层的处理,比如基于URL路径的转发、基于请求内容的负载均衡等。 |
三、部署容器化MongoDB
方式一、 因mongodb.yaml配置信息涉及公司信息,此处不提供。可以参考Docker Hub的官网获取基本镜像进行部署:https://hub.docker.com/_/mongo/tags
方式二、 在本地构建拉取mongodb镜像,然后推送到阿里云ACR容器服务中心,在Rancher中配置aliyun鉴权配置后,可以直接拉取到aliyun的镜像进行部署
四、Load Banlancer of Service
创建LB-Service,类型是Load Balancer类型的Service
关于Selectors的key、value应该从哪里取?可以前往mongodb服务的yaml配置中获取:
从labels、selector配置项的子级中可以找到key、value:
五、mongoDB验证连接
连接地址由两部分组成:{集群IP}:{port}
使用MongoDB Compass客户端连接:
调试结果:连接成功
六、总结
在配置mongoDB映射到公网的时候,起初是使用Ingress Controller的方式去实现的,通过Ingress的负载方式是专门用于HTTP协议的服务,例如:Springboot应用、Django应用,而mongoDB服务它用的是mongo协议(详见:https://stackoverflow.com/questions/57623894/how-access-mongodb-in-kubernetes-from-outside-the-cluster),所以使用MongoDB Compass客户端无法连接mongoDB服务。
最后是在Stackover Flow上看到了解释,转而调整方向使用Service实现。