启用隧道ip和不启用
介绍
在尝试将多云方法纳入其基础架构目标时,工程团队面临许多挑战。 Kubernetes可以很好地解决其中的一些问题,但是管理跨越多个区域中多个云提供商的群集的通信对于团队来说可能是艰巨的任务。 通常,这需要复杂的VPN和特殊的防火墙规则才能进行多云群集通信。
在这篇文章中,我将向您介绍Skupper,这是一个开源项目,用于在Kubernetes集群之间实现安全通信。 Skupper允许您的应用程序跨越多个云提供商,数据中心和区域。 让我们来看看它的作用!
入门
本教程将演示如何在多个公共和私有集群之间分配Istio Bookinfo Application微服务。 这些服务不需要更改代码即可在分布式应用程序环境中工作。 使用Skupper,应用程序的行为就像所有服务都在同一群集中运行一样。
在本教程中,您将在命名空间aws-eu-west
的远程公共群集上部署productpage和rating服务,并在命名空间laptop
的本地本地群集中部署details和review服务。
概述图1-Bookinfo服务部署
上图显示了如何部署服务。
- 每个群集运行两个应用程序服务。
- 到productpage服务的入口路由使Internet用户可以访问该应用程序。
如果所有服务都安装在公共群集上,则该应用程序将按最初的设计运行。 但是,由于其中两个服务位于便携式计算机群集上,因此该应用程序将失败。 productpage无法将请求发送至详细信息或评论 。
该演示将展示Skupper如何解决服务部署这种安排所带来的连接性问题。
图2-使用Skupper部署Bookinfo服务
Skupper是一个分布式系统,其安装在一个或多个集群或名称空间中运行。 已连接的Skupper安装共享有关每个安装提供哪些服务的信息。 每个Skupper安装都将学习在每个其他安装中公开哪些服务。 然后,Skupper在每个名称空间中运行代理服务端点,以正确地将请求路由到每个公开服务或从每个公开服务路由。
- 在公共名称空间中, 详细信息和审阅代理会拦截对其服务的请求,并将其转发到Skupper网络。
- 在私有名称空间中, 详细信息和审阅代理从Skupper网络接收请求,并将其发送到相关服务。
- 在私有名称空间中, 评级代理拦截对服务的请求,并将其转发到Skupper网络。
- 在公共名称空间中, 评级代理从Skupper网络接收请求,并将其发送到相关服务。
先决条件
要运行本教程,您将需要:
- 1.15或更高版本的
kubectl
命令行工具( 安装指南 ) -
skupper
命令行工具,最新版本( 安装指南 ) - 您选择的任何集群上的两个Kubernetes命名空间,来自您选择的任何提供程序
- 来自https://github.com/skupperproject/skupper-examples-bookinfo.git的Yaml文件
- 两个登录的控制台终端,每个集群或命名空间一个
步骤1:部署Bookinfo应用程序
此步骤为四个Bookinfo微服务中的每一个创建服务和部署。
命名空间aws-eu-west
:
$ kubectl apply -f public-cloud.yaml
service/productpage created
deployment.extensions/productpage-v1 created
service/ratings created
deployment.extensions/ratings-v1 created
命名空间laptop
:
$ kubectl apply -f private-cloud.yaml
service/details created
deployment.extensions/details-v1 created
service/reviews created
deployment.extensions/reviews-v3 created
第2步:公开公共产品页面服务
命名空间aws-eu-west
:
kubectl expose deployment/productpage-v1 --port 9080 --type LoadBalancer
内BookInfo应用从公共互联网通过这个入口端口的productpage服务来访问。
步骤3:观察该应用程序不起作用
Bookinfo应用程序的网址可以从名称空间aws-eu-west
:
$echo $(kubectl get service/productpage -o jsonpath= 'http://{.status.loadBalancer.ingress[0].hostname}:9080' )
在网络浏览器中打开地址。 Productpage响应,但该页面将显示错误,因为无法访问名称空间laptop
中的服务。
我们现在可以解决该问题。
步骤4:设定Skupper
此步骤将初始化每个集群上的Skupper环境。
命名空间laptop
:
skupper init
命名空间aws-eu-west
:
skupper init
现在,Skupper基础结构正在运行。 在每个控制台终端中使用skupper status
可查看Skupper可用。
步骤5:连接Skupper安装
现在,您需要使用Skupper连接来连接名称空间。 这是一个两步过程。
skupper connection-token <file>
命令指示Skupper生成带有证书的秘密令牌文件,该证书将权限授予其他Skupper实例连接到此Skupper的网络。
注意:保护该文件的方式与保护任何包含登录凭据的文件的方式相同。
-
skupper connect <file>
命令指示Skupper连接到另一个Skupper的网络。 此步骤完成了Skupper连接。
请注意,在这种安排中,Skupper实例加入以形成对等网络。 通常,打开网络端口的Skupper将位于公共群集上。 在laptop
运行的群集甚至可能没有可从Internet访问的地址。 建立连接后,Skupper网络成员是对等成员,无论哪个Skupper打开了网络端口以及与哪个端口相连。
此演示中的控制台终端由同一用户在同一主机上运行。 这使得$ {HOME}目录中的令牌文件可用于两个终端。 如果您的终端在不同的计算机上,则可能需要使用scp
或类似的工具将令牌文件传输到托管laptop
终端的系统。
生成Skupper网络连接令牌
命名空间aws-eu-west
:
skupper connection-token${HOME} /PVT-to-PUB-connection-token.yaml
打开Skupper连接
命名空间laptop
:
skupper connect${HOME} /PVT-to-PUB-connection-token.yaml
检查连接
命名空间aws-eu-west
:
$ skupper status
Skupper enabledfor "aws-eu-west" . It is connected to 1 other sites.
命名空间laptop
:
$ skupper status
Skupper enabledfor "laptop" . It is connected to 1 other sites.
步骤6:虚拟化您要共享的服务
现在,您具有一个能够进行多集群通信的Skupper网络,但是没有与之关联的服务。 此步骤使用kubectl annotate
命令通知Skupper服务将包含在Skupper网络中。
Skupper将注释用作必须虚拟化服务的指示。 接收注释的服务是网络请求的物理目标,Skupper在其他名称空间中部署的代理是网络请求的虚拟目标。 然后,Skupper基础结构在虚拟服务和目标服务之间路由请求。
命名空间aws-eu-west
:
$ kubectl annotate service ratings skupper.io/proxy=http
service/ratings annotated
命名空间laptop
:
$ kubectl annotate service details skupper.io/proxy=http
service/details annotated
$ kubectl annotate service reviews skupper.io/proxy=http
service/reviews annotated
Skupper现在使带注释的服务可用于Skupper网络中的每个名称空间。 内BookInfo应用程序将作为市民群集上productpage服务具有访问私有集群上的细节和评论服务和私人群集上的评论服务就可以访问该评级服务市民群集上。
步骤7:观察该应用程序是否正常运行
可以从名称空间aws-eu-west
找到Bookinfo应用程序的网址:
$echo $(kubectl get service/productpage -o jsonpath= 'http://{.status.loadBalancer.ingress[0].hostname}:9080' )
在网络浏览器中打开地址。 该应用程序现在应该可以正常运行了。
清理
Skupper和Bookinfo服务可能会从群集中删除。
命名空间aws-eu-west
:
skupper delete
kubectl delete -f public-cloud.yaml
命名空间laptop
:
skupper delete
kubectl delete -f private-cloud.yaml
最后的想法
借助Skupper之类的工具,启用多云方法具有很多好处,并且变得越来越容易。 如果有时间,请在其Github Repo上尝试Skupper的其他示例。 希望您从这篇文章中学到一些东西。 敬请期待更多!
关于作者-Sudip是一位具有15年以上工作经验的解决方案架构师,并且是Javelynn的创始人。 他喜欢通过写作分享自己的知识,当他不这样做时,他一定是在钓鱼或下棋。
先前发布在 https://appfleet.com/上 。
翻译自: https://hackernoon.com/enabling-multi-cloud-kubernetes-communication-with-skupper-glz3u6p
启用隧道ip和不启用