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

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

目前,Istio最适合Kubernetes,但将来也会支持其余平台。所以,为了部署Istio而且展现其功能,首先须要一个Kubernetes集群。知足这一条件以后,使用Rancher 2.0将十分容易。linux

前期准备git

为了可以顺利demo,你须要作以下准备:github

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

通常状况下,本教程中的步骤对于更新的版本也适用。docker

启动Rancher 2.0json

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

本文示例将使用Google Cloud Platform,因此咱们首先启动一个Ubuntu实例而且经过Console 或者CLI(https://cloud.google.com/comp... )。使用HTTP和HTTPs协议与其通讯。实现上述目的的命令以下:浏览器

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

接着,经过ssh登陆到Ubuntu实例而且安装Docker(https://docs.docker.com/insta... )。Docker安装完成以后,便可启动Rancher验证其是否正在运行。服务器

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

接着页面会从新跳转到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/...

如今你能够用你的服务帐户密钥来使用Rancher 2.0启动一个Kubernetes集群(使用默认的Compute Engine服务账户是安全的):

请留意<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个节点。

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

坚决果断地点击【建立/Create】吧。

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

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

在Rancher上部署Istio

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

点击【建立/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。便可添加上述功能。

完成上述操做以后,界面应该以下图所示:

点击【启动/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)。

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

部署Bookinfo示例应用

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

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

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

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

点击【导入/Import】。

这应该为您的rancher-demo Default项目增长6个工做负载。以下图:

如今,经过Istio暴露Bookinfo app,你须要应用此bookinfo-gateway.yaml(https://info.rancher.com/hubf...,操做方式与bookinfo.yaml相同。此时,你能够用浏览器访问bookinfo app。你有两种方式能够获取istio-ingressgateway负载均衡器的外部IP地址:

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

第二,经过kubectl获取:

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

使用Istio,您能够限制您的应用仅路由到应用的第一个版本。具体操做为:导入 route-rule-all-v1.yaml( https://info.rancher.com/hubf... )到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/co... ),可是这要求你在Google Cloud Platform防火墙的全部节点上开放Nodeport,这不止有一项任务,所以经过公共IP地址暴露服务更为简单。

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

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

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

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

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

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

用一样的方式,也可能能够暴露而且看到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。

相关文章
相关标签/搜索