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

网友投稿 311 2022-10-14

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

Service mesh旨在解决云原生应用之间服务拓扑的连接问题。如果你想要构建云原生应用,那么就需要Service mesh。Istio是Service mesh中的一个明星项目,在Istio文档中对其有非常全面的介绍: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官网上的入门教程,非常简洁直观(Cloud Platform,所以我们首先启动一个Ubuntu实例并且通过Console 或者CLI(https://cloud.google.com/compute/docs/instances/create-start-instance)。使用HTTP和HTTPs协议与其通信。实现上述目的的命令如下:

gcloud compute --project=rancher-20 instances create rancher-20 \ --zone=europe-west2-a --machine-type=n1-standard-1 \ --tags=http-server,https-server --image=ubuntu-1604-xenial-v20180627 \ --image-project=ubuntu-os-cloud gcloud compute --project=rancher-20 firewall-rules create default-allow-http \ --direction=INGRESS --priority=1000 --network=default --action=ALLOW \ --rules=tcp:80 --source-ranges=0.0.0.0/0 --target-tags=http-server gcloud compute --project=rancher-20 firewall-rules create default-allow-https \ --direction=INGRESS --priority=1000 --network=default --action=ALLOW \ --rules=tcp:443 --source-ranges=0.0.0.0/0 --target-tags=实例至少有1 vCPU和大约4GB的RAM可用。

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

ubuntu@rancher-20:~$ sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher Unable to find image 'rancher/rancher:latest' locally latest: Pulling from rancher/rancher 6b98dfc16071: Pull complete 4001a1209541: Pull complete 6319fc68c576: Pull complete b24603670dc3: Pull complete 97f170c87c6f: Pull complete c5880aba2145: Pull complete de3fa5ee4e0d: Pull complete c973e0300d3b: Pull complete d0f63a28838b: Pull complete b5f0c036e778: Pull complete Digest: sha256:3f042503cda9c9de63f9851748810012de01de380d0eca5f1f296d9b63ba7cd5 Status: Downloaded newer image for rancher/rancher:latest 2f496a88b82abaf28e653567d8754b3b24a2215420967ed9b817333ef6d6c52f ubuntu@rancher-20:~$ sudo docker ps CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                                      NAMES 2f496a88b82a        rancher/rancher     "rancher --http-list…"   About a minute ago   Up 59 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   elegant_volhard获得Ubuntu实例的公共IP地址,并用你的浏览器访问它。

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

启动一个Kubernetes集群

首先,你需要一个附加以下角色的Google云服务账号:Compute Viewer,Kubernetes Engine Admin, Service Account User, Project Viewer。接着,你需要生成服务账户密钥,具体步骤请参考:2.0启动一个Kubernetes集群(使用默认的Compute Engine服务帐户是安全的):

gcloud iam service-accounts keys create ./key.json \     --iam-account @developer.gserviceaccount.com

> kubectl create clusterrolebinding cluster-admin-binding \     --clusterrole=cluster-admin \     --user=@developer.gserviceaccount.com clusterrolebinding "cluster-admin-binding" created

在Rancher上部署Istio

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

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

> kubectl label namespace default istio-injection=enabled namespace "default" labeled > kubectl get namespace -L istio-injection NAME            STATUS    AGE       ISTIO-INJECTION cattle-system   Active    1h default         Active    1h        enabled istio-system    Active    37m kube-public     Active    1h kube-system     Active    1h >

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

部署Bookinfo示例应用

现在,通过Istio暴露Bookinfo app,你需要应用此bookinfo-gateway.yaml(app。你有两种方式可以获取istio-ingressgateway负载均衡器的外部IP地址:第一,从Rancher中获取。访问负载均衡,从右手边的菜单栏选择View in API。它将打开一个新的浏览器页面,在那搜索publicEndpoints -> addresses,你就可以看到公共IP地址了。第二,通过kubectl获取:

> export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') > echo $INGRESS_HOST

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

使用Istio,您可以限制您的应用仅路由到应用的第一个版本。具体操作为:导入 route-rule-all-v1.yaml( app,你应该只能看到版本2的reviews(即有黑星星的版本)。但登出之后,你仅能看到版本1reviews的app。 至此,你已经体会了Istio的强大功能。当然,这并非全部,Istio还有很多其他功能。创建此设置后,您可以完成Istio文档中的任务。

Istio的遥感

现在是时候深入了解Istio另一个更有用的功能 :默认情况下提供指标。 让我们从Grafana开始。当我们部署Istio时,值设置为true的grafana.enabled创建了一个grafana实例,并配置为收集Istio的指标以几个面板中显示它们。默认情况下,Grafana的服务不会公开显示,因此想要查看指标,首先需要将Grafana的服务暴露给公共IP地址。当然,还有另一个选项也可以暴露服务:NodePort(Cloud Platform防火墙的所有节点上开放Nodeport,这不止有一项任务,因此通过公共IP地址暴露服务更为简单。 为此,在rancher-demo的默认项目中访问工作负载并选择【服务发现】标签。当所有在集群上的工作都完成之后,应该有5项服务在默认的命名空间内,有12项服务在istio-system命名空间内,并且所有这些服务都处于活跃状态。接着,选择grafana服务,并且从右边的菜单栏内选择 View/Edit YAML。

export GRAFANA_HOST=$(kubectl -n istio-system get service grafana -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo $GRAFANA_HOST

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

export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') for i in {1..1000}; do curl -o /dev/null -s -w "%{WORKLOADS下你将看到Incoming Requests by Destination And Response Code的图表,它要求Reviews应用程序只在v1端点结束。如果你使用以下命令,生成对版本2的应用的请求(请记得用户jason可以访问版本2的reviews 应用):

export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}') for i in {1..1000}; do curl -o /dev/null -s -w "%{Tracing 和ServiceGraph。

总结与思考

正如你所看到的,Istio是一个具有强大功能并且十分实用的service mesh平台。在未来,它一定会成为云原生生态中一个核心工具。但目前, Istio仍暂不建议进入生产环境。引用Kelsey Hightower的一句话:“不要只消耗它,将它部署到生产环境中。你将成为新闻焦点”。无论如何,请你坚信,在不久的将来,Istio一定会被部署到生产环境中。 至于Rancher 2.0,它对于查看Kubernetes集群状态、所有的工作负载、服务以及节点都十分实用。它通过WebUI提供了一种简易的方式来管理集群并通过Helm Charts部署应用,即便对于不太熟悉Kubernetes的人来说,Rancher也十分容易上手。使用Rancher 2.0,你会拥有管理Kubernetes集群所需的一切,并对其状态有一个很好的概览。我相信,Rancher的小伙伴们之后会继续添加越来越多实用的功能来不断完善Rancher。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring中的bean概念介绍
下一篇:手工编译安装Apache网站(赠送源码包)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~