在本文中,您将了解如何利用Skupper在多个 Kubernetes 集群上运行的应用程序实例之间实现负载平衡。我们将使用 Kind 在本地创建一些 Kubernetes 集群。然后我们将使用 Skupper 连接它们。
Skupper集群互连工作在第7层(应用层)。这意味着无需创建任何 VNP 或特殊的防火墙规则。Skupper 按照虚拟应用网络 (VAN) 方法进行工作。因此,它可以连接不同的 Kubernetes 集群并保证服务之间的通信,而无需将它们暴露在互联网上。
GitHub 存储库:这次我们将使用命令行工具 ( skupperCLI) 完成几乎所有操作。该存储库仅包含一个示例应用程序 Spring Boot 以及 KubernetesDeployment清单和 Skaffold 配置。
使用 Kind 创建 Kubernetes 集群
第一步,我们将使用 Kind 创建三个 Kubernetes 集群。我们需要给它们起不同的名称:c1、c2和c3。因此,它们可以在上下文名称下使用:kind-c1、kind-c2和kind-c3。
$ kind create cluster --name c1 |
默认情况下,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 |
这是例如 c2 c3集群的池配置。重要的是,地址范围不应与其他两个 Kind 集群中的范围冲突:
apiVersion: metallb.io/v1beta1 |
使用命令应用 YAML 清单后,kubectl apply -f
我们可以继续下一部分。
在 Kubernetes 上安装 Skupper
我们可以通过两种不同的方式在 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
使用 Skaffold 在 Kubernetes 上运行示例应用程序
Clone本教程github示例应用程序存储库后,转到主目录。您可以使用以下命令轻松构建kind-c2和部署应用程序:kind-c3
$ skaffold dev --kube-context=kind-c2
$ skaffold dev --kube-context=kind-c3
部署应用程序 skaffold 后会自动打印所有日志.
我们的应用程序是在该sample-spring-kotlin-microservice名称下部署的。
更新详细的集群测试场景点击标题