如何使用Rancher 2.0在Kubernetes集群上部署Istio

栏目: 服务器 · 发布时间: 7年前

内容简介:Service mesh旨在解决云原生应用之间服务拓扑的连接问题。如果你想要构建云原生应用,那么就需要Service mesh。Istio是Service mesh中的一个明星项目,在Istio文档中对其有非常全面的介绍:目前,Istio最适合Kubernetes,但未来也会支持其他平台。因此,为了部署Istio并且展示其功能,首先需要一个Kubernetes集群。满足这一条件之后,使用Rancher 2.0将十分容易。前期准备

Service mesh旨在解决云原生应用之间服务拓扑的连接问题。如果你想要构建云原生应用,那么就需要Service mesh。Istio是Service mesh中的一个明星项目,在Istio文档中对其有非常全面的介绍: https://istio.io/docs/concepts/what-is-istio/ 。Istio基于Envoy Proxy,是一个极其有前景的Service mesh解决方案,有多家科技巨头对其进行联合开发。

目前,Istio最适合Kubernetes,但未来也会支持其他平台。因此,为了部署Istio并且展示其功能,首先需要一个Kubernetes集群。满足这一条件之后,使用Rancher 2.0将十分容易。

前期准备

为了能够顺利demo,你需要做如下准备:

  • 一个Google Cloud账号,免费的即可
  • 一个Ubuntu 16.04实例(这将是Rancher实例的运行环境)
  • 一个部署于Google Cloud Platform并且使用GKE服务的Kubernetes集群。本次demo使用的是1.10.5-gke.2版本
  • Istio 0.8.0(这是本文成稿时使用的版本,现在Istio 1.0已发布)

一般情况下,本教程中的步骤对于更新的版本也适用。

启动Rancher 2.0

首先,启动一个Rancher 2.0实例。关于如何启动Rancher 2.0,可以参考Rancher官网上的入门教程,非常简洁直观( https://rancher.com/quick-start/ )。必要的步骤也会在下文中列出。

本文示例将使用Google Cloud Platform,所以我们首先启动一个Ubuntu实例并且通过Console 或者CLI( https://cloud.google.com/compu ... tance )。使用HTTP和HTTPs协议与其通信。实现上述目的的命令如下:

如何使用Rancher 2.0在Kubernetes集群上部署Istio

请确保Rancher 实例至少有1 vCPU和大约4GB的RAM可用。

接着,通过ssh登录到Ubuntu实例并且安装Docker( https://docs.docker.com/instal ... untu/ )。Docker安装完成之后,即可启动Rancher验证其是否正在运行。

如何使用Rancher 2.0在Kubernetes集群上部署Istio

获得Ubuntu实例的公共IP地址,并用你的浏览器访问它。

如何使用Rancher 2.0在Kubernetes集群上部署Istio

接着页面会重新跳转到Rancher的HTTPs协议页面上,并且你将看到浏览器的警告。因为Rancher使用的是自签名证书。不需要理会这些警告,因为你已经启动了实例(千万不要在不受信任的网站上进行这项操作),接下来开始设置管理员密码和服务器URL来启动Rancher 2.0。下面就可以开始启动Kubernetes集群了。

启动一个Kubernetes集群

首先,你需要一个附加以下角色的Google云服务账号:Compute Viewer,Kubernetes Engine Admin, Service Account User, Project Viewer。接着,你需要生成服务账户密钥,具体步骤请参考: https://cloud.google.com/iam/d ... -keys

现在你可以用你的服务账户密钥来使用Rancher 2.0启动一个Kubernetes集群(使用默认的Compute Engine服务帐户是安全的):

如何使用Rancher 2.0在Kubernetes集群上部署Istio

请留意<SA-NAME>@developer.gserviceaccount.com值,你稍后还会用到它。

现在,你已经做好启动集群的准备工作了。打开Rancher的面板,然后点击【添加集群/Add Cluster】。你需要执行以下操作:

在选择Kubernetes托管服务提供商时,选择GCE;

为你的集群起一个名字,比如rancher-demo;

将服务密钥详细信息从上述步骤中生成的key.json文件导出或复制粘贴到Service Account字段中。

接着去【配置节点/Configure Nodes】选项并按如下选择:

  • Kubernetes版本的选择,你可以选择最新版本,不过本测试是在1.10.5-gke.2版本上进行的;
  • 区域的选择,选择离你最近的区域;
  • 机器类型的选择,至少需要 n1-standard-1;
  • 至于节点数,对于Istio Demo来说,至少需要4个节点。

当上述内容设置完成之后,你的设置页面如下图所示:

如何使用Rancher 2.0在Kubernetes集群上部署Istio

毫不犹豫地点击【创建/Create】吧。

几分钟之后,你可以在Rancher的面板上看到集群处于活跃状态。还记得上文提到的<SA-NAME>@developer.gserviceaccount.com值吗?现在它要派上用场了。你需要用它来授予当前用户群集管理员权限(需要管理员权限才能为Istio创建必要的RBAC规则)。为此,你需要点击Rancher面板上rancher-demo的集群名字,然后进入rancher-demo的集群面板。

现在启动kubectl,这将打开这个特定群集的kubectl命令行。你还可以导出Kubeconfig文件,与本地安装的kubectl一起使用。基于本次实例的目的,使用Rancher提供的命令行就可以了。你打开了命令行之后,运行下列命令:

如何使用Rancher 2.0在Kubernetes集群上部署Istio

在Rancher上部署Istio

Istio有一个Helm包,Rancher可以用它安装Istio。想要获得官方的Istio Helm包,需要将Istio的库添加到Rancher的应用目录里。为此,首先要访问Rancher Global View,进入目录选项,并选择【添加目录】,名字填写istio-github,目录URL为 https://github.com/istio/istio.git (Rancher可以处理git clone处理的任何事情),在Branch的部分,你可以写branch名字,并将其设置为master。设置完成后,应该如下截图所示:

如何使用Rancher 2.0在Kubernetes集群上部署Istio

点击【创建/Create】。

在这一步,你将开始使用Rancher Catalog部署Istio。首先,访问rancher-demo集群的默认项目,并且选择目录应用。当你点击【启动/Launch】之后,你将看到许多默认可用的应用。由于此demo是关于Istio的,在【所有目录/All Catalogs】中选择istio-github目录,也就是你刚刚自行创建的那个。这将为您提供两个选项:istio和istio-remote。选择istio并点击【查看详情/View Details】,你将看到部署Istio的选项,按如下选择:

设置名字为istio-demo;

让模板版本保持为0.8.0;

默认的istio的命名空间是istio-system,因此这里就将命名空间设置为istio-system;

在默认情况下,Istio不会加密组件之间的访问,但加密功能挺重要的,因此我们需要把加密这一功能加上,;

Istio的helm chart默认不添加Grafana,我们也应该把它加上。

点击Add Answer,将global.controlPlaneSecurityEnabled和grafana.enabled的值设置为true。即可添加上述功能。

完成上述操作之后,界面应该如下图所示:

如何使用Rancher 2.0在Kubernetes集群上部署Istio

点击【启动/Launch】。

如果你现在看到工作负载的标签,那么你应该能看到Istio的所有组件正在你的集群里运行,同时请确保所有的工作负载都是绿色的。此外,还需要检查负载均衡标签,istio-ingress和istio-ingressgateway都应该处于活跃状态。

如果istio-ingressgateway处于待定(Pending)状态,那么你需要再次申请istio-ingressgateway服务。具体步骤是:点击Import Yaml;对于Import Mode,选择【集群:将任何资源直接导入此集群】Cluster: Direct import of any resources into this cluster;将 istio-demo-ingressgateway.yaml 服务复制/粘贴到 Import Yaml 编辑器并点击导入:

这一步骤将解决 istio-ingressgateway待定状态的问题。

现在,你需要在Rancher的面板上检查Istio所有的工作负载、负载均衡以及服务发现均处于良好状态。

最后还有一样东西需要添加:在你的默认命名空间里添加一个istio-injected标签,Istio sidecar容器会自动注入你的节点,运行下方的kubectl命令(如上文所述,你可以从Rancher内部启动kubectl)。

如何使用Rancher 2.0在Kubernetes集群上部署Istio

这一标签将使得Istio-Sidecar-Injector自动将Envoy容器注入您的应用程序节点。

部署Bookinfo示例应用

现在,你可以开始部署一个测试应用并且测试Istio的强大功能。首先,部署Bookinfo示例应用。这个应用有趣的部分在于它有三个版本的reviews程序同时运行。我们可-以在这三个版本的程序中体验到Istio的一些功能。接着,访问rancher-demo的默认项目中的工作负载来部署Bookinfo app,具体的操作是:

点击Import Yaml;下载bookinfo.yaml( https://info.rancher.com/hubfs/bookinfo.yaml )到本地;

当你进入Import Yaml菜单之后,通过从文件读取,将其上传至Rancher;

对于 Import Mode,选择【集群:将任何资源直接导入此集群】Cluster: Direct import of any resources into this cluster;

点击【导入/Import】。

这应该为您的rancher-demo Default项目增加6个工作负载。如下图:

如何使用Rancher 2.0在Kubernetes集群上部署Istio

现在,通过Istio暴露Bookinfo app,你需要应用此bookinfo-gateway.yaml( https://info.rancher.com/hubfs ... y.yam l),操作方式与bookinfo.yaml相同。此时,你可以用浏览器访问bookinfo app。你有两种方式可以获取istio-ingressgateway负载均衡器的外部IP地址:

第一,从Rancher中获取。访问负载均衡,从右手边的菜单栏选择View in API。它将打开一个新的浏览器页面,在那搜索publicEndpoints -> addresses,你就可以看到公共IP地址了。

第二,通过kubectl获取:

如何使用Rancher 2.0在Kubernetes集群上部署Istio

用你的浏览器访问: http://${INGRESS_HOST}/productpage ,然后你应该看到Bookinfo app。多次刷新页面时,你应该看到 Book Reviews部分有三个不同版本:第一个版本没有星星;第二个版本有黑星星;第三个版本有红星星。

使用Istio,您可以限制您的应用仅路由到应用的第一个版本。具体操作为:导入 route-rule-all-v1.yaml( https://info.rancher.com/hubfs ... .yaml )到Rancher,几秒之后再刷新页面,你将不会在reviews上看到任何星星。

除此之外,你也可以仅将流量路由到一组用户。当你导入route-rule-reviews-test-v2.yaml到Rancher之后,使用jason这个用户名(无需密码)登录Bookinfo app,你应该只能看到版本2的reviews(即有黑星星的版本)。但登出之后,你仅能看到版本1reviews的app。

至此,你已经体会了Istio的强大功能。当然,这并非全部,Istio还有很多其他功能。创建此设置后,您可以完成Istio文档中的任务。

Istio的遥感

现在是时候深入了解Istio另一个更有用的功能 :默认情况下提供指标。

让我们从Grafana开始。当我们部署Istio时,值设置为true的grafana.enabled创建了一个grafana实例,并配置为收集Istio的指标以几个面板中显示它们。默认情况下,Grafana的服务不会公开显示,因此想要查看指标,首先需要将Grafana的服务暴露给公共IP地址。当然,还有另一个选项也可以暴露服务:NodePort( https://kubernetes.io/docs/con ... eport ),但是这要求你在Google Cloud Platform防火墙的所有节点上开放Nodeport,这不止有一项任务,因此通过公共IP地址暴露服务更为简单。

为此,在rancher-demo的默认项目中访问工作负载并选择【服务发现】标签。当所有在集群上的工作都完成之后,应该有5项服务在默认的命名空间内,有12项服务在istio-system命名空间内,并且所有这些服务都处于活跃状态。接着,选择grafana服务,并且从右边的菜单栏内选择 View/Edit YAML。

如何使用Rancher 2.0在Kubernetes集群上部署Istio

找到包含type: ClusterIP的那行,将其改为type: LoadBalancer,并点击【保存/Save】。然后它应该开始在Google Cloud Platform中配置负载均衡器,并在其默认端口3000上暴露Grafana。如果想要获取Grafana的公共IP地址的话,只需重复bookinfo示例中获取IP地址的步骤即可,即在API中查看grafana服务,你可以在其中找到IP地址,或通过kubectl获取它:

如何使用Rancher 2.0在Kubernetes集群上部署Istio

用你的浏览器访问:http://${GRAFANA_HOST}:3000/ ,选择其中一个面板,比如 Istio Service。通过此前应用的配置,我们限制了流量,仅显示版本1的reveiws应用。从服务的下拉菜单中选择 reviews.default.svc.cluster.local,就可以从图表中查看。现在使用以下命令从Rancher的kubectl生成一些流量:

如何使用Rancher 2.0在Kubernetes集群上部署Istio

需要等待约5分钟,为Grafana生成的流量将会显示在如下面板上:

如何使用Rancher 2.0在Kubernetes集群上部署Istio

如果你滚动面板,在SERVICE WORKLOADS下你将看到Incoming Requests by Destination And Response Code的图表,它要求Reviews应用程序只在v1端点结束。如果你使用以下命令,生成对版本2的应用的请求(请记得用户jason可以访问版本2的reviews 应用):

如何使用Rancher 2.0在Kubernetes集群上部署Istio

你应该也可以看到显示在版本2的应用上的请求:

如何使用Rancher 2.0在Kubernetes集群上部署Istio

用同样的方式,也可能可以暴露并且看到Istio其他默认的指标,比如Prometheus, Tracing 和ServiceGraph。

总结与思考

正如你所看到的,Istio是一个具有强大功能并且十分实用的service mesh平台。在未来,它一定会成为云原生生态中一个核心工具。但目前, Istio仍暂不建议进入生产环境。引用Kelsey Hightower的一句话:“不要只消耗它,将它部署到生产环境中。你将成为新闻焦点”。无论如何,请你坚信,在不久的将来,Istio一定会被部署到生产环境中。

至于Rancher 2.0,它对于查看Kubernetes集群状态、所有的工作负载、服务以及节点都十分实用。它通过WebUI提供了一种简易的方式来管理集群并通过Helm Charts部署应用,即便对于不太熟悉Kubernetes的人来说,Rancher也十分容易上手。使用Rancher 2.0,你会拥有管理Kubernetes集群所需的一切,并对其状态有一个很好的概览。我相信,Rancher的小伙伴们之后会继续添加越来越多实用的功能来不断完善Rancher。


以上所述就是小编给大家介绍的《如何使用Rancher 2.0在Kubernetes集群上部署Istio》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Algorithms on Strings, Trees and Sequences

Algorithms on Strings, Trees and Sequences

Dan Gusfield / Cambridge University Press / 1997-5-28 / USD 99.99

String algorithms are a traditional area of study in computer science. In recent years their importance has grown dramatically with the huge increase of electronically stored text and of molecular seq......一起来看看 《Algorithms on Strings, Trees and Sequences》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具