这篇文章主要为大家介绍了服务发现与负载均衡机制Service实例创建有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
什么是Service?
Service是逻辑上的一组Pod,一种可以访问Pod的策略,而且其他Pod可以通过Service访问到这个Service代理的Pod,可以把它理解为传统架构中的反向代理。
相对于Pod而言,Service有一个固定的名称,不会发生改变,并且提供了负载均衡的功能。
通过Service的定义,可以对客户端应用屏蔽后端Pod实例数量及Pod IP地址的变化,通过负载均衡策略实现请求到后端Pod实例的转发,为客户端应用提供一个稳定的服务访问入口地址。
Service实现的是微服务架构中的几个核心功能:全自动的服务注册、服务发现、服务负载均衡等。
创建一个Service实例
执行上面的yaml文件,创建一个service
我们通过访问svc地址就能访问到后端的nginx
- 在同一个namespace中,其他Pod访问svc只需要curl http://nginx-svc就可以
- 跨namespace的话,需要在svc名称后加
.namespace名称
就可以了,使用需谨慎,没必要不推荐 - 不建议通过IP地址访问,因为IP不是固定的,删除或重建后IP会随机生成
注意,以上内容只能在集群内部访问
集群外部访问svc
- 希望在生产中使用某个固定的名称而非IP地址进行访问外部的中间件服务
- 希望Service指向另一个namespace中或其他集群中的服务
- 某项目正在迁移至k8s集群,但是一部分服务仍然在集群外部,此时可以使用service代理外部的服务
创建代理外部应用的Service实例
下面我们定义一个外部应用的service
区别就是少了这两个参数:
创建成功后查看,可以发现虽然创建成功了但是没有ENDPOINTS
接下来我们需要手动创建一个自定义的ENDPOINTS借用存在的ep生成一个新的ep文件
可以看到已经有外部的代理了
接下来试试能不能访问成功
如果业务变更ep地址变了怎么办?只需要在ep中将代理的地址更换即可。
比如我们更换一个taobao的地址测试:
访问测试一下看是否连通:这个返回501是没问题的。
Service反代外部域名
这个不说了,知道怎么配就行了。
Service的yaml文件:
然后创建就行了:
Service 的类型:
ClusterIP
:在集群内部使用,默认
ExternalName
:通过返回定义的CNAME别名
NodePort
:在所有安装了kube-proxy的节点上打开一个端口,此端口可以代理至后端Pod,然后集群外部可以使用节点的IP地址和NodePort端口号访问到集群Pod服务。端口取值范围默认30000-32767
LoadBalancer
:使用云服务商提供的负载均衡器公开服务
以上就是服务发现与负载均衡机制Service实例创建的详细内容,更多关于服务发现与负载均衡Service的资料请关注编程学习网其它相关文章!