

使用 Skupper 实现 Kubernetes 多集群负载均衡
source link: https://www.jdon.com/67608.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

使用 Skupper 实现 Kubernetes 多集群负载均衡
在本文中,您将了解如何利用Skupper在多个 Kubernetes 集群上运行的应用程序实例之间实现负载平衡。我们将使用 Kind 在本地创建一些 Kubernetes 集群。然后我们将使用 Skupper 连接它们。
Skupper集群互连工作在第7层(应用层)。这意味着无需创建任何 VNP 或特殊的防火墙规则。Skupper 按照虚拟应用网络 (VAN) 方法进行工作。因此,它可以连接不同的 Kubernetes 集群并保证服务之间的通信,而无需将它们暴露在互联网上。
GitHub 存储库:这次我们将使用命令行工具 ( skupperCLI) 完成几乎所有操作。该存储库仅包含一个示例应用程序 Spring Boot 以及 KubernetesDeployment清单和 Skaffold 配置。
第一步,我们将使用 Kind 创建三个 Kubernetes 集群。我们需要给它们起不同的名称:c1、c2和c3。因此,它们可以在上下文名称下使用:kind-c1、kind-c2和kind-c3。
$ kind create cluster --name c1 $ kind create cluster --name c2 $ kind create cluster --name c3 |
默认情况下,Skupper 将自身公开为 Kubernetes LoadBalancer Service。因此,我们需要在 Kind 上启用负载均衡器。为此,我们可以安装 MetalLB。
$ kubectx kind-c1
然后,我们必须应用以下 YAML 清单:
$ kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.7/config/manifests/metallb-native.yaml |
应该对其他两个集群重复相同的过程:c2和c3。
我们还需要设置负载均衡器使用的地址池。为此,我们首先检查 Kind 使用的 Docker 网络上的 IP 地址范围。对我来说是的172.19.0.0/16 172.19.0.1。
$ docker network inspect -f '{{.IPAM.Config}}' kind
根据结果,我们需要为所有三种集群选择正确的 IP 地址。然后我们必须创建IPAddressPool包含 IP 范围的对象。以下是集群的 YAML 清单c1:
apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: example namespace: metallb-system spec: addresses: - 172.19.255.200-172.19.255.250 --- apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: empty namespace: metallb-system |
这是例如 c2 c3集群的池配置。重要的是,地址范围不应与其他两个 Kind 集群中的范围冲突:
apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: example namespace: metallb-system spec: addresses: - 172.19.255.150-172.19.255.199 --- apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: empty namespace: metallb-system apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: example namespace: metallb-system spec: addresses: - 172.19.255.100-172.19.255.149 --- apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: empty namespace: metallb-system |
使用命令应用 YAML 清单后,kubectl apply -f
我们可以继续下一部分。
我们可以通过两种不同的方式在 Kubernetes 上安装和管理 Skupper:使用 CLI 或通过 YAML 清单。
Skupper 文档中的大多数示例都使用 CLI,因此我认为这是一种更好的方法。因此,在开始使用 Kubernetes 之前,我们需要安装 CLI。您可以在此处的Skupper 文档中找到安装说明。安装后,只需使用以下命令验证它是否有效:
$ skupper version
之后,我们就可以继续进行 Kubernetes 集群了。我们将在所有三个集群中创建相同的命名空间interconnect。为了简化我们即将进行的练习,我们还可以为每个上下文设置默认名称空间(或者您可以使用命令来完成kubectl config set-context --current --namespace interconnect)。
$ kubectl create ns interconnect
$ kubens interconnect
然后,我们切换到kind-c1集群。我们将保持这种情况直到演习结束
$ kubectx kind-c1
最后,我们将在 Kubernetes 集群上安装 Skupper。为此,我们必须执行该skupper init命令。幸运的是,它允许我们使用参数设置目标 Kubernetes 上下文-c。在集群内部kind-c1,我们还将启用 Skupper UI 仪表板(--enable-console参数)。通过 Skupper 控制台,我们可以可视化 Skupper 网络中所有目标的流量。
$ skupper init --enable-console --enable-flow-collector
$ skupper init -c kind-c2
$ skupper init -c kind-c3
让我们验证 Skupper 安装的状态:
$ skupper status
$ skupper status -c kind-c2
$ skupper status -c kind-c3
Clone本教程github示例应用程序存储库后,转到主目录。您可以使用以下命令轻松构建kind-c2和部署应用程序:kind-c3
$ skaffold dev --kube-context=kind-c2
$ skaffold dev --kube-context=kind-c3
部署应用程序 skaffold 后会自动打印所有日志.
我们的应用程序是在该sample-spring-kotlin-microservice名称下部署的。
更新详细的集群测试场景点击标题
Recommend
-
85
负载均衡集群介绍 实现负载均衡集群的软件有:LVS、keepalived、Nginx、haproxy等。其中LVS属于四层(网络OSI模型);Nginx 属于七层;haproxy既可以认为是四层,也可以当作是七层使用。 keepalived 的负载均衡功能...
-
44
很多人觉得,在Kubernetes中不是只要用 Service就可以做负载均衡了吗?SVC确实有负载均衡的作用。它是由Kube-proxy提供,但是由于Grpc的特性没有办法让它很好的处理负载均衡。 SVC负载调度原理 在k8s的文档中阐述了kube-...
-
9
Use Skupper to connect multiple Kubernetes clusters
-
9
在上一篇文章《MQTT Broker 集群详解(一):负载均衡》中,我们简单介绍了 MQTT 负载均衡:负载均衡既可以应用于传输层,也可以用于应用层。在本文中,我们将详细介绍应用层负载均衡,其中最有趣的...
-
8
Kubernetes Serivce是一组具有相同label Pod集合的抽象(可以简单的理解为集群内的LB),集群内外的各个服务可以通过Service进行互相通信。但是Service的类型有多种,每种类型的Service适合怎样的场景以及kube-proxy是如何实现Service负载均衡的将是本文讨论的重...
-
5
一、Nginx 负载均衡实现原理1、Nginx 实现负载均衡是通过反向代理实现反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同...
-
7
在Kubernetes集群中部署MetalLB实现负载均衡 作者:ikubernetes 2022-08-31 08:30:32 我们通过helm去部署一些服务时,尝尝会依赖于LoadBalancer的资源类型,导致创建的services中type: LoadBalancers会一直处于Pen...
-
5
在 Kubernetes 环境中实现 gRPC 负载均衡 作者:crossoverJie 2023-10-17 08:08:37 以 Dubbo 的调用过程为例,调用的时候需要从服务注册中心获取到提供者的节点信息,然后在客户端本地根据一定的负载均衡算法得出...
-
6
前段时间写过一篇 gRPC 的入门文章,在最后还留了一个坑没有填:
-
3
使用 Cilium 和 BGP 为 Kubernetes 服务进行负载均衡 发布于 2024-01-30 字数 3185 阅读时长 14 分钟 阅...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK