本篇主要是介绍一下服务发现及kubernetes中是如何实现服务发现的。
什么是服务发现
我们整天说服务发现、服务发现,那到底什么是服务发现呢?
简单说服务发现解决的就是: “你在哪?你还好吗?” 的问题。 放到我们的平时的服务中来讲的话就是服务A要调用服务B,那A服务要知道B在哪里,可不可用这类问题。
其实,平时我们经常会用一些服务发现的东西,只是我们不叫它服务发现这种高大上的名字罢了。看看下面这些技术是不是你都了解。
这里再举个例子来说明下服务发现这一概念。
我们最初使用的服务发现方式就是纯手工,我们要访问对端的应用或者服务时我们直接指定其IP+Port就可以了(如上图右侧第一种情况)。当后端有多个应用或服务时,我们把这些应用的IP:Port都配置到配置文件里面或者在程序里面轮训访问也都是可以的(如上图右侧第二种情况)。但是如果其中的一个或者多个节点挂了会怎么办呢?是不是还需要我们手动去改配置,这样很麻烦,且效率低下。为了解决这个问题,程序员们想通过程序的方式来将这一过程自动化,也就产生了像 DNS、LVS、Nginx 等这些服务发现技术,很大程度上替代了运维人员的双手,提高了效率(如上图右侧第三种情况)。
以上这些都是我们当前经常使用的服务发现方式,那么在 kubernetes 平台中是如何来提供服务发现机制的呢 ?
kubernetes 中的服务发现
为了更好的了解 kubernetes 中服务发现机制,我们先简单描述一下当前常用的 kubernetes 网络部署方式。
服务发现的基础是网络、网络方案不同对应的上层服务发现和负载均衡策略可能就不同
我们今天基于Flannel组件实现的大二层网络来描述 kubernetes 中的服务发现和负载均衡。Flannel 网络模型如下:
网络内各个 pod 都会有自己的IP,且和其它 pod 都不冲突、独占。这些 pod 通过 flannel 隧道是互通的。了解这点对于后面理解 kubernetes 中的服务发现是非常重要的。
回到 kubernetes 的服务发现,Kubernetes在设计之初就充分考虑了针对容器的服务发现与负载均衡机制。
对于 kubernetes 而言它的服务发现分为两种:
- 对内的,也即集群内部pod、service之间的访问(或者理解成东西向访问);
- 对外的,也即外网对集群内部的pod和service的访问(或者理解成南北向访问)。
下面我们就分这两种情况分析一下:
在 kubernetes 中,对内服务发现的端无非就是 pod 或者 service。因此也就存在以下几种情况的服务发现需求:
- pod 访问 pod
- pod 访问 service
对外服务发现的端就是外部访问端和内部的 pod 或者 service 了:
- 外部访问内部的 pod 或者 service
了解更多 service 的知识看 这里
对内的服务发现
pod 访问 pod
在上面我们介绍 kubernetes 网络时说过,每个pod都有自己的独占IP,这些 pod(IP)之间网络是畅通的,所以它们之间是可以直接根据ip:port访问。
pod 访问 service
先看一下 service 的概念及与 pod 的关系:
从这里我们可以知道, service 是 pod 的一个逻辑集合,代表 pod 集合与其它服务进行交互,进行请求的分发和负载均衡。针对不同的场景给出了四种 service:
此时,我们 从且只能从 kubernetes node 节点,使用 clusterIp 和 port 就可以访问 service 里的服务了。
此时,我们从 任意 kubernetes node 节点 和 非 kubernetes node 节点,只要和 kubernetes node 正常通信的机器,都可以访问service的服务。
还有一种方式是通过 kube-dns ,同步服务名字实现服务的访问
对外的服务发现
服务对外访问方式的话,有上面三种。其中 Service LoadBalancer 是 ingress Controller 方案的过渡方案
因为,是过渡方案这里就不多介绍,直接看 ingress Controller
最后是 Custom LoadBalancer
目前 kubernetes 提供了以上几种方案,具体怎么用还要结合公司实际业务情况,这里没有展开。
http://www.tuicool.com/articles/iqqM7vY
相关推荐
Kubernetes Service负载均衡性能优化.pdf
Heptio Gimbal是一个入口负载平衡平台,可以将流量路由到多个Kubernetes和OpenStack群集。 由Heptio与Actapio合作建造。
Kubernetes集群中多节点合作博弈负载均衡策略.docx
Porter 是一款适用于物理机部署 Kubernetes 的负载均衡器,该负载均衡器使用物理交换机实现,利用 BGP 和 ECMP 从而达到性能最优和高可用性。我们知道在云上部署的 Kubernetes 环境下,通常云服务厂商会提供 cloud ...
Kubernetes私有集群负载均衡器终极解决方案MetalLB.docx
OpenELB 允许用户在裸机、egde 和虚拟化环境中创建LoadBalancer 服务以供外部访问,并提供与基于云的负载均衡器相同的用户体验。核心功能BGP模式和二层模式下的负载分担ECMP 路由和负载平衡IP地址池管理使用 CRD 的...
它带有一个约250个LOC kubernetes小型客户端,可以找到服务端点。 因此,它不会膨胀您的二进制文件。用法// Import the moduleimport "github....
kube-vip 高可用性和负载平衡概述用于控制平面和 Kubernetes 服务的 Kubernetes 虚拟 IP 和负载均衡器kube-vip背后的想法是一个适用于所有环境的小型独立的高可用性选项,尤其是: 裸机边缘(手臂/树莓派) 虚拟化...
用于控制平面和Kubernetes服务的Kubernetes虚拟IP和负载均衡器 kube-vip背后的想法是一个针对所有环境的小型独立的高度可用选项,尤其是: 裸机 Edge(手臂/ Raspberry PI) 虚拟化 几乎其他任何地方:) 注意现在...
负载均衡和服务发现 跨机器和跨地区的集群调度 自动伸缩 无状态服务和有状态服务 广泛的Volume支持 插件机制保证扩展性 Kubernetes发展非常迅速,已经成为容器编排领域的领导者。Kubernetes的中文资料也非常丰富,但...
Kubernetes具有完备的集群管理能力,包括多层次的安全防护和准入机制/多租户应用支撑能力、透明的服务注册和服务发现机制、内建智能负载均衡器、强大的故障发现和自我修复功能、服务滚动升级和在线扩容能力、可扩展...
服务拆分与服务发现:Service Kubernetes提供简单的负载均衡 负载均衡:基于IPVS或者Iptables的简单均衡机制 在原始的时候一个应用跑到集群上,可能会把应用服务治理的逻辑写到代码里面,这样就会
欧昌华-基于 Nginx 的负载均衡器在 K8S 中的实践.pdf 彭超:瓜子云的落地.pdf 如何落地TensorFlow on Kubernetes.pdf 如何用OpenStack和Kubernetes快速搭建一个容器和虚拟机组合服务的云平台.pptx 孙杰:大型企业云...
Kubernetes端点代理用于负载均衡Kubernetes端点的HAProxy。 对于在Mesos / Mesosphere DCOS上运行Kubernetes尤其有用。 这是因为在Kubernetes群集中,服务的端点端口和IP地址可能会更改。 该代理将监视端点中etcd的...
使用该文档可以部署一个高可用的kubernetes集群,并且实现高可用,搭配可视化界面以及监控的部署
08.Kubernetes横空出世背后的秘密 09.Kubernetes架构深度解析 10.Kubernets集群入门 11.Kubernetes集群部署实践 12.Kubernetes的分布式网络实践 13.Kubernetes Service的负载均衡和网络路由秘密 14.Kubernetes API和...
kubernetes的本质是一组...负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本 存储编排:可以根据容器自身的需求自动创建存储卷
Nginx负载均衡器 使用nginx作为负载均衡器的简单配置。 这用于在RKE2 kubernetes群集之前对流量进行负载平衡。 当前端口配置: HTTP入口流量为443 6443用于kubernetes API流量(kubectl等) 9345 for Agent->...
Ingress-controller是在Kubernetes上的一种负载均衡方式,它允许外部流量进入Kubernetes集群,实现对服务的访问和管理。本文将从多个角度详细阐述Ingress-controller,并特别介绍了Ingress-controller与Istio、...