从零开始了解 Kubernetes
Service 通过 label 选择器选取合适的 Pod,构建出一个 Endpoints,即 Pod 负载均衡列表。实际运用中,一般我们会为同一个微服务的 Pod 实例都打上类似 app=xxx 的标签,同时为该微服务创建一个标签选择器为 app=xxx 的 Service。 Kubernetes 中的服务发现与网络调用 在有了上述“三通”的网络基础后,我们可以开始微服务架构中的网络调用在 Kubernetes 中是怎么实现的了。 这部分内容其实在《说说 Kubernetes 是怎么实现服务发现的》已经讲得比较清楚了,比较细节的地方可以参考上述文章,这里做一个简单的介绍。 服务间调用 首先是东西向的流量调用,即服务间调用。这部分主要包括两种调用方式,即 ClusterIP 模式以及 DNS 模式。 ClusterIP 是 Service 的一种类型,在这种类型模式下,kube-proxy 通过 iptables/ipvs 为 Service 实现了一种 VIP(虚拟 IP)的形式。只需要访问该 VIP,即可负载均衡地访问到 Service 背后的 Pod。 上图是 ClusterIP 的一种实现方式,此外还包括 userSpace 代理模式(基本不用),以及 ipvs 模式(性能更好)。 DNS 模式很好理解,对 ClusterIP 模式的 Service 来说,它有一个 A 记录是 service-name.namespace-name.svc.cluster.local,指向 ClusterIP 地址。所以一般使用过程中,我们直接调用 service-name 即可。 服务外访问 南北向的流量,即外部请求访问 Kubernetes 集群,主要包括三种方式:nodePort、loadbalancer、Ingress。 nodePort 同样是 Service 的一种类型,通过 iptables 赋予了调用宿主机上的特定 port 就能访问到背后Service 的能力。 loadbalancer 则是另一种 Service 类型,通过公有云提供的负载均衡器实现。 我们访问 100 个服务可能需要创建 100 个 nodePort/loadbalancer。我们希望通过一个统一的外部接入层访问内部 Kubernetes 集群,这就是 Ingress 的功能。Ingress 提供了统一接入层,通过路由规则的不同匹配到后端不同的 Service 上。Ingress 可以看做是“Service 的 Service”。Ingress 在实现上往往结合 nodePort 以及 loadbalancer 完成功能。 到现在为止,我们简单了解了 Kubernetes 的相关概念,它大致是怎么运作的,以及微服务是怎么运行在 Kubernetes 中的。于是当我们听到别人讨论 Kubernetes 时,我们可以知道他们在讨论什么。
(编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |