本篇主要是介绍一下服务发现及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
相关推荐
然而,随着多集群部署的日益普及,如何有效地在这些不同环境中实现流量路由和负载均衡变得至关重要。这就是Heptio Gimbal的用武之地。Heptio Gimbal,这个由Heptio(已被VMware收购)和Actapio共同打造的项目,是一...
Kubernetes Service负载均衡性能优化.pdf
在本讲座中,孟凡杰深入探讨了如何在Kubernetes(K8s)环境中实现服务发现和服务治理。Kubernetes作为当今最流行的容器编排系统,为微服务架构提供了强大的支持,而服务发现和服务治理是微服务架构中的核心组成部分...
在Kubernetes集群中,负载均衡策略对于优化资源分配和提高整体效率至关重要。传统的负载均衡算法,如Kubernetes的默认算法 BalancedResourceAllocation,虽然旨在确保各节点间的资源利用率均衡,但存在一个明显的...
随着云计算和容器化技术的普及,软件定义的负载均衡(如Kubernetes的Service)成为了新的趋势,它允许在虚拟化环境中动态调整资源分配,实现自动扩展和收缩,极大地提高了系统的弹性和可管理性。此外,基于AI和机器...
负载均衡是集群的核心功能之一,它能将来自用户的网络请求分配到集群中的多个服务器上,避免单个服务器过载,同时也能提高服务的可用性和响应速度。常见的负载均衡策略有轮询、最少连接数、IP哈希等。 配置Tomcat...
minuteman是一个用Python编写的开源项目,旨在解决分布式系统中的服务发现和负载均衡问题。它支持多种数据存储后端,如Etcd、Consul或Zookeeper,这些存储系统能够提供可靠的服务注册和发现功能。通过minuteman,...
Porter 是一款适用于物理机部署 Kubernetes 的负载均衡器,该负载均衡器使用物理交换机实现,利用 BGP 和 ECMP 从而达到性能最优和高可用性。我们知道在云上部署的 Kubernetes 环境下,通常云服务厂商会提供 cloud ...
2. **服务发现与负载均衡**:Kubernetes 提供内置的服务发现机制,通过DNS或环境变量使服务之间能够相互找到。同时,它还能够自动实现负载均衡,确保请求均匀分布到各个服务实例。 3. **集群调度**:Kubernetes 可以...
Kubernetes私有集群负载均衡器终极解决方案MetalLB.docx
4. **服务治理**:探讨Kubernetes的服务发现和负载均衡机制,讲解如何通过Service进行微服务间的通信,以及如何利用Ingress实现外部访问。此外,还会介绍Kubernetes的健康检查机制,以及如何实现故障转移和自我修复...
- 容器化与容器编排(Docker + Kubernetes):通过容器化技术实现服务的快速部署和弹性扩展,Kubernetes提供了内置的负载均衡功能。 6. 实施步骤: - 确定业务需求:考虑系统稳定性和性能要求。 - 选择合适的...
服务网格是一个专门用于服务到服务通信的基础设施层,负责处理服务间的通信,包括负载均衡、服务发现、故障恢复、监控、安全性和其他跨服务的通信特性。服务网格通常由数据平面和控制平面组成,数据平面代理服务间的...
- **服务与负载均衡**: 介绍如何定义和使用服务,以及如何将流量导向这些服务。 - **存储和持久卷**: 如何配置持久卷和持久卷声明,以实现数据的持久化。 #### 1.3 Kubernetes 201 更深入地探讨 Kubernetes 的高级...
OpenELB 允许用户在裸机、egde 和虚拟化环境中创建LoadBalancer 服务以供外部访问,并提供与基于云的负载均衡器相同的用户体验。核心功能BGP模式和二层模式下的负载分担ECMP 路由和负载平衡IP地址池管理使用 CRD 的...
* 服务发现及负载均衡:Kubernetes 提供了服务发现和负载均衡机制,可以自动分配流量到多个容器实例。 3. 时速云 CaaS 平台架构及技术运用 时速云 CaaS 平台架构基于 Kubernetes,提供了一个自动化的容器部署、...
它带有一个约250个LOC kubernetes小型客户端,可以找到服务端点。 因此,它不会膨胀您的二进制文件。用法// Import the moduleimport "github....
kube-vip 高可用性和负载平衡概述用于控制平面和 Kubernetes 服务的 Kubernetes 虚拟 IP 和负载均衡器kube-vip背后的想法是一个适用于所有环境的小型独立的高可用性选项,尤其是: 裸机边缘(手臂/树莓派) 虚拟化...
Ribbon是Spring Cloud中用于客户端负载均衡的库,Spring Cloud Kubernetes提供了与Kubernetes集成的Ribbon实现,使服务间通信能够利用Kubernetes的负载均衡策略。 **7. Kubernetes生态意识** Spring Cloud ...