成都网站建设设计

将想法与焦点和您一起共享

如何使用K8s来实现服务的注册与发现

这篇文章主要讲解了“如何使用K8s来实现服务的注册与发现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用K8s来实现服务的注册与发现”吧!

成都创新互联公司的客户来自各行各业,为了共同目标,我们在工作上密切配合,从创业型小企业到企事业单位,感谢他们对我们的要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。专业领域包括成都网站建设、成都网站制作、电商网站开发、微信营销、系统平台开发。

1. K8s 组件

  • configMap
  • kube-apiserver
  • scheduler
  • etcd
  • controller
  • kube-proxy
如何使用K8s来实现服务的注册与发现    

   

K8s 中主要通过 kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡,它是 K8s 集群内部的负载均衡器,也是一个分布式代理服务器,在 K8s 的每个节点上都有一个,这一设计体现了它的伸缩性优势,需要访问服务的节点越多,提供负载均衡能力的 kube-proxy 就越多,高可用节点也随之增多。通过 K8s service 的 "ClusterIP" 来实现集群内服务的 LB,当然,如果集群外需要访问 Service 对应的所有具有相同功能的 pod 应用程序,则可以通过 K8s service 的另外一种方式来实现:"NodePort"。

   

2. 基于 Service 实现微服务负载均衡

在 Java 语言,或其它语言中,通常需要做很多繁重的组件来实现服务的 LB。例如:Dubbo、SpringCloud、甚至 SpringCloudAlibaba 等。当然,对于 Python、Go 等语言,也有其 Restful API,所以也会集成标准的代理插件来进行做传统的 LB。但对于云原生时代的到来,服务容器化让微服务的访问更好了。K8s Service 提供的 LB,即为无语言边际的负载均衡,不用考虑任何语言的阻碍,只要是通用的 Restful API,即可借助 service 来进行处理集群内部微服务之间的 LB。

在 K8s 集群中,如果内部访问,可以简单的通过 servicename 来进行访问。例如:

apiVersion: v1
kind: Service
metadata:
  name: web-server-service
  namespace: default
spec:
  ports:
    - name: web-server
      port: 80
      targetPort: web-server-port
  selector:
    app: web-server
   

通过 selector将 service 与服务 pod 对应起来,创建一个微服务的 service,默认其形式是:ClusterIP,则可以通过如下来访问该 service 对应的后端 pod:

curl http://$service_name.$namespace.svc.cluster.local:$service_port/api/v1/***
   
   

这里,K8s 通过虚拟出一个集群 IP,利用 kube-proxy 为 service 提供 cluster 内的服务发现和负载均衡,上面说了 kube-proxy 的功能。

Name:              web-server-service
Namespace:         default
Type:              ClusterIP
IP:                20.16.249.134
Port:                80/TCP
TargetPort:        80/TCP
Endpoints:         20.162.35.223:80
Session Affinity:  None
Events:            
         

3. 高可用案例

   

3.1 传统微服务请求案例

传统的微服务中,不同语言构建的微服务架构很多,一般直接通过 http 协议进行访问,在同一种语言中,又会出现一种集成框架模式来实现微服务架构。如:Java 中 Dubbo、Springcloud 等,但其繁琐的框架结构导致了服务的繁重。

   

3.2 跨语言间微服务的互通

在 k8s 集群内,通过 kube-proxy 结合 service 等一些功能组件来实现微服务之间的调用,不管是同语言也好,跨语言也罢。都会很好的进行处理,包括实现高可用以及负载均衡、服务治理等。


   

任何一个 k8s 集群中的 pod 都可以通过 http 协议来访问其它 pod 的服务:

root@rest-server-ver2-ds-vcfc7:/usr/src/app# curl http://web-server-service.kube-system.svc.cluster.local:80/api/v1/healthz
{
  "status": {
    "code": 0,
    "msg": "success"
  },
  "data": "success"
}root@rest-server-ver2-ds-vcfc7:/usr/src/app#

感谢各位的阅读,以上就是“如何使用K8s来实现服务的注册与发现”的内容了,经过本文的学习后,相信大家对如何使用K8s来实现服务的注册与发现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


本文名称:如何使用K8s来实现服务的注册与发现
当前路径:http://chengdu.cdxwcx.cn/article/igpoos.html