如何在 Kubernetes 中安装和使用 Istio

介绍

服务网是一个基础设施层,允许您管理应用程序的微服务之间的通信. 随着越来越多的开发人员使用微服务,服务网已经演变,通过在分布式设置中整合共同的管理和管理任务来使这项工作更容易和更有效。

使用像 Istio这样的服务网格可以简化服务发现、路由和流量配置、加密和身份验证/授权、监控和远程测量等任务,特别是 Istio 旨在无需对现有服务代码进行重大更改。

在本教程中,您将使用 Kubernetes 的 Helm包管理器安装 Istio,然后使用 Istio 将演示应用程序 Node.js暴露在外部流量中,通过创建 GatewayVirtual Service 资源。

如果您正在寻找一个管理的Kubernetes托管服务,请查看我们的简单的,用于增长的管理的Kubernetes服务(https://www.digitalocean.com/products/kubernetes)。

前提条件

要完成本教程,您将需要:

<$>[注] 注: 我们强烈建议为此设置使用至少8GB可用内存和4vCPU的集群。

您可以閱讀更多關於安裝「kubectl」的資訊在 官方文件

步骤 1 - 包装应用程序

要使用我们的演示应用程序与Kubernetes,我们需要克隆代码并包装它,以便 kubelet 代理可以拉动图像。

我们的第一步是将 nodejs-image-demo respositoryDigitalOcean Community GitHub 帐户克隆出来。该库包括在 How To Build a Node.js Application with Docker中描述的设置中的代码,其中描述了如何为 Node.js 应用程序构建图像以及如何使用该图像创建容器。

要开始,将 nodejs-image-demo 存储库克隆到名为 'istio_project' 的目录中:

1git clone https://github.com/do-community/nodejs-image-demo.git istio_project

导航到istio_project目录:

1cd istio_project

该目录包含用于提供用户关于鲨鱼的基本信息的鲨鱼信息应用程序的文件和文件夹. 除了应用程序文件,该目录还包含用应用程序代码构建 Docker 图像的指令的 Dockerfile。

要测试应用程序代码和 Dockerfile 是否按预期工作,您可以使用 docker build 命令构建和标记图像,然后使用图像运行演示容器。

用以下命令构建图像:

1docker build -t your_dockerhub_username/node-demo .

命令中的 . 表示构建背景是当前的目录. 我们已经命名图像为 node-demo,但您可以自由地命名它为其他东西。

一旦构建过程完成,您可以将您的图像列为 docker images:

1docker images

您将看到以下输出,确认图像构建:

1[secondary_label Output]
2REPOSITORY TAG IMAGE ID CREATED SIZE
3your_dockerhub_username/node-demo latest 37f1c2939dbf 5 seconds ago 77.6MB
4node 10-alpine 9dfa73010b19 2 days ago 75.3MB

接下来,您将使用docker run创建一个基于此图像的容器,我们将包含三个旗帜以此命令:

  • -p:此文将端口发布到容器上,并将其映射到我们的主机上的端口。我们将使用端口 80在主机上,但如果您有其他进程在该端口上运行的情况下,您可以随时随意修改该端口。 有关如何运作的更多信息,请参阅Docker 文件中的此讨论在 端口绑定
  • -d:此文在背景中运行容器。

运行以下命令来构建容器:

1docker run --name node-demo -p 80:8080 -d your_dockerhub_username/node-demo

检查您的运行容器用 docker ps :

1docker ps

您将看到确认您的应用程序容器正在运行的输出:

1[secondary_label Output]
2CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
349a67bafc325 your_dockerhub_username/node-demo   "docker-entrypoint.s…"   8 seconds ago Up 6 seconds 0.0.0.0:80->8080/tcp node-demo

您现在可以访问您的服务器 IP 来测试您的设置: http://your_server_ip. 您的应用程序将显示以下定位页面:

Application Landing Page

现在你已经测试了应用程序,你可以停止运行容器. 再次使用docker ps来获取你的CONTAINER ID:

1docker ps
1[secondary_label Output]
2CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
349a67bafc325 your_dockerhub_username/node-demo   "docker-entrypoint.s…"   About a minute ago Up About a minute 0.0.0.0:80->8080/tcp node-demo

请确保将这里列出的CONTAINER ID替换为自己的应用程序CONTAINER ID:

1docker stop 49a67bafc325

现在您已经测试了图像,您可以将其推到 Docker Hub. 首先,请在前提条件下登录您创建的 Docker Hub 帐户:

1docker login -u your_dockerhub_username

当被提示时,请输入您的 Docker Hub 帐户密码. 以此方式登录将创建一个 ~/.docker/config.json 文件,在您的非根用户的主目录中与您的 Docker Hub 凭证。

使用 docker push 命令将应用程序图像推到 Docker Hub。 请记住用自己的 Docker Hub 用户名替换 your_dockerhub_username:

1docker push your_dockerhub_username/node-demo

现在你有一个应用程序图像,你可以拉到运行你的应用程序与 Kubernetes 和 Istio. 接下来,你可以继续安装 Istio 与 Helm。

步骤 2 – 使用头盔安装 Istio

虽然Istio提供不同的安装方法,但文档建议使用头盔,以最大限度地管理配置选项的灵活性。

首先,添加 Istio 发布存储库:

1helm repo add istio.io https://storage.googleapis.com/istio-release/releases/1.1.7/charts/

这将使您能够使用存储库中的 Helm 图表来安装 Istio。

看看你是否有 Repo:

1helm repo list

您应该看到列出的istio.io复制片:

1[secondary_label Output]
2NAME URL                                                                
3stable https://kubernetes-charts.storage.googleapis.com                   
4local http://127.0.0.1:8879/charts                                       
5istio.io https://storage.googleapis.com/istio-release/releases/1.1.7/charts/

接下来,安装 Istio 的 自定义资源定义(CRDs)与使用 helm install 命令istio-init 图表:

1helm install --name istio-init --namespace istio-system istio.io/istio-init
1[secondary_label Output]
2NAME:   istio-init
3LAST DEPLOYED: Fri Jun 7 17:13:32 2019
4NAMESPACE: istio-system
5STATUS: DEPLOYED
6...

该命令将 53 个 CRD 委托给 kube-apiserver,使它们可用于 Istio 网格中。它还为 Istio 对象创建了一个 namespace称为 istio-system,并使用 --name 选项来命名 Helm release istio-init

要检查所有所需 CRD 是否已完成,请运行以下命令:

1kubectl get crds | grep 'istio.io\|certmanager.k8s.io' | wc -l

这个数字应该是53

现在您可以安装istio图表. 为了确保与图表一起安装 Grafana 远程测量插件,我们将使用 - set grafana.enabled=true 配置选项与我们的helm install 命令. 我们还将使用所需的 配置配置配置文件的安装协议:默认配置配置文件。 Istio 具有许多配置配置配置文件可供您在安装与 Helm 时选择,允许您定制 Istio 控制飞机和数据飞机侧车.默认配置文件建议用于生产部署,我们将使用它来熟悉我们在迁移到生产时使用的配置选项。

运行以下helm install命令来安装图表:

1helm install --name istio --namespace istio-system --set grafana.enabled=true istio.io/istio
1[secondary_label Output]
2NAME:   istio
3LAST DEPLOYED: Fri Jun 7 17:18:33 2019
4NAMESPACE: istio-system
5STATUS: DEPLOYED
6...

再次,我们将我们的Istio对象安装到istio-system名称空间中,并命名该版本 - 在这种情况下,istio

我们可以验证我们预期为默认配置文件的 服务对象是用以下命令创建的:

1kubectl get svc -n istio-system

我们希望在这里看到的服务包括istio-citadel,istio-galley,istio-ingressgateway,istio-pilot,istio-policy,istio-sidecar-injector,istio-telemetryprometheus

 1[secondary_label Output]
 2NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)                                                                                                                                      AGE
 3grafana ClusterIP 10.245.85.162    <none>            3000/TCP 3m26s
 4istio-citadel ClusterIP 10.245.135.45    <none>            8060/TCP,15014/TCP 3m25s
 5istio-galley ClusterIP 10.245.46.245    <none>            443/TCP,15014/TCP,9901/TCP 3m26s
 6istio-ingressgateway LoadBalancer 10.245.171.39 174.138.125.110 15020:30707/TCP,80:31380/TCP,443:31390/TCP,31400:31400/TCP,15029:30285/TCP,15030:31668/TCP,15031:32297/TCP,15032:30853/TCP,15443:30406/TCP 3m26s
 7istio-pilot ClusterIP 10.245.56.97     <none>            15010/TCP,15011/TCP,8080/TCP,15014/TCP 3m26s
 8istio-policy ClusterIP 10.245.206.189   <none>            9091/TCP,15004/TCP,15014/TCP 3m26s
 9istio-sidecar-injector ClusterIP 10.245.223.99    <none>            443/TCP 3m25s
10istio-telemetry ClusterIP 10.245.5.215     <none>            9091/TCP,15004/TCP,15014/TCP,42422/TCP 3m26s
11prometheus ClusterIP 10.245.100.132   <none>            9090/TCP 3m26s

我们也可以用以下命令查找相应的 Istio Pods:

1kubectl get pods -n istio-system

对应这些服务的Pods应有状态运行,表明Pods绑定到节点,并且与Pods相关的容器正在运行:

 1[secondary_label Output]
 2NAME READY STATUS RESTARTS AGE
 3grafana-67c69bb567-t8qrg 1/1 Running 0 4m25s
 4istio-citadel-fc966574d-v5rg5 1/1 Running 0 4m25s
 5istio-galley-cf776876f-5wc4x 1/1 Running 0 4m25s
 6istio-ingressgateway-7f497cc68b-c5w64 1/1 Running 0 4m25s
 7istio-init-crd-10-bxglc 0/1 Completed 0 9m29s
 8istio-init-crd-11-dv5lz 0/1 Completed 0 9m29s
 9istio-pilot-785694f946-m5wp2 2/2 Running 0 4m25s
10istio-policy-79cff99c7c-q4z5x 2/2 Running 1 4m25s
11istio-sidecar-injector-c8ddbb99c-czvwq 1/1 Running 0 4m24s
12istio-telemetry-578b6f967c-zk56d 2/2 Running 1 4m25s
13prometheus-d8d46c5b5-k5wmg 1/1 Running 0 4m25s

准备字段表示Pod中运行了多少容器. 有关更多信息,请参阅《Pod生命周期文档》(https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/)。

<$>[注] 注: 如果您在状态列中看到意想不到的阶段,请记住,您可以使用以下命令来解决您的Pod:

1kubectl describe pods your_pod -n pod_namespace
2kubectl logs your_pod -n pod_namespace

美元

Istio 安装的最后一步将是允许创建 Envoy代理,这些代理将作为 sidecars 部署到在网络中运行的服务中。

Sidecars 通常用于在现有容器环境中添加一个额外的功能层。Istio 的 mesh 架构依赖于使者侧面车之间的通信,这些侧面车包括网格的数据平面和控制平面的组件。

实现这一目标有两种方式: 手动 sidecar 注射自动 sidecar 注射.我们将通过 标签创建我们的应用程序对象的名称空间来启用自动 sidecar 注射。

我们将使用默认名称空间创建我们的应用程序对象,因此我们将使用以下命令将istio-injection=enabled标签应用到该名称空间:

1kubectl label namespace default istio-injection=enabled

我们可以通过运行该命令来验证该命令是否按预定工作:

1kubectl get namespace -L istio-injection

您将看到以下结果:

1[secondary_label Output]
2AME STATUS AGE ISTIO-INJECTION
3default Active 47m enabled
4istio-system Active 16m   
5kube-node-lease Active 47m   
6kube-public Active 47m   
7kube-system Active 47m

安装和配置 Istio 后,我们可以继续创建我们的应用服务和 部署对象。

步骤三:创建应用对象

有了 Istio 网格并配置为注入 sidecar Pods,我们可以为我们的服务和部署对象创建一个应用程序 manifest具有 specifications

我们的应用服务将确保运行我们的容器的Pods在动态环境中仍然可用,因为单个Pod被创建和摧毁,而我们的部署将描述我们的Pods的预期状态。

打开名为node-app.yaml的文件,使用nano或您最喜欢的编辑器:

1nano node-app.yaml

首先,添加以下代码来定义nodejs应用服务:

 1[label ~/istio_project/node-app.yaml]
 2apiVersion: v1
 3kind: Service
 4metadata:
 5  name: nodejs
 6  labels: 
 7    app: nodejs
 8spec:
 9  selector:
10    app: nodejs
11  ports:
12  - name: http
13    port: 8080

本服务定义包括一个选择器,它将与相应的应用程序:nodejs标签匹配Pod。

我們也正在命名服務端口,符合ISTIO的 Pods and Services 要求

接下来,在服务下方,为应用部署添加以下规格: 请确保在容器规格下列出的图像被您在 步骤 1中创建并推到 Docker Hub 的图像取代:

 1[label ~/istio_project/node-app.yaml]
 2...
 3---
 4apiVersion: apps/v1
 5kind: Deployment
 6metadata:
 7  name: nodejs
 8  labels:
 9    version: v1
10spec:
11  replicas: 1
12  selector:
13    matchLabels:
14      app: nodejs
15  template:
16    metadata:
17      labels:
18        app: nodejs
19        version: v1
20    spec:
21      containers:
22      - name: nodejs
23        image: your_dockerhub_username/node-demo
24        ports:
25        - containerPort: 8080

此部署的规格包括复制件的数量(在这种情况下,1)以及一个选择器来定义部署将管理哪些Pods。

模板字段包含执行以下操作的值:

Istio 推荐app标签添加到部署规格,以提供Istio的指标和远程测量情况信息。 *将版本标签应用,以指定与此部署相符的应用程序版本。与app标签一样,Istio建议将版本标签添加到部署规格中,以便为Istio的指标和远程测量提供背景信息。

  • 对Pod将运行的容器定义规格,包括容器的名称图像。这里的图像是您在步骤1(https://andsky.com/tech/tutorials/how-to-install-and-use-istio# step-1-%E2%80%94-cloning-and-packaging-the-application)中创建的图像,并推到Docker Hub。 容器规格还包括一个容器端口配置,以指明每个

保存并关闭文件,当你完成编辑。

有了这个文件,我们可以继续编辑该文件,该文件将包含 Gateway 和虚拟服务对象的定义,这些对象可以控制流量如何进入网格,以及一旦到达网格时如何路由。

步骤 4 – 创建 Istio 对象

为了控制对集群的访问和向服务的路由,Kubernetes 使用 Ingress ResourcesControllers

有关使用 Ingress 资源和控制器的更多信息,请参阅 如何在 DigitalOcean Kubernetes 上使用 Cert-Manager 设置 Nginx Ingress

Istio 使用不同的对象组合来实现相似的目的,虽然存在一些重要差异。而不是使用控制器来负载平衡流量,Istio 网格使用一个 Gateway,它作为一个负载平衡器来处理输入和输出 HTTP/TCP 连接。

例如,Kubernetes Ingress 资源和控制器为运营商提供一些路由选项,但网关和虚拟服务提供了更强大的功能集,因为它们允许流量进入网格,换句话说,Kubernetes Ingress 资源和控制器为集群运营商提供的有限的 应用层功能不包括 Istio 服务网格中的侧面卡提供的功能(包括先进的路由、跟踪和远程测量)。

为了允许外部流量进入我们的网格并配置路由到我们的Node应用程序,我们需要创建一个Istio网关和虚拟服务。

1nano node-istio.yaml

首先,添加 Gateway 对象的定义:

 1[label ~/istio_project/node-isto.yaml]
 2apiVersion: networking.istio.io/v1alpha3
 3kind: Gateway
 4metadata:
 5  name: nodejs-gateway
 6spec:
 7  selector:
 8    istio: ingressgateway 
 9  servers:
10  - port:
11      number: 80
12      name: http
13      protocol: HTTP
14    hosts:
15    - "*"

除了在元数据字段中指定 Gateway 的名称外,我们还包括了以下规格:

  • 将该资源与默认的 Istio IngressGateway 控制器匹配的选择器,该控制器是与我们在安装 Istio 时选择的 配置配置配置文件启用的。
  • 一个服务器规格,指定要暴露入口的端口和 Gateway 暴露的主机

在Gateway定义下方,添加虚拟服务的规格:

 1[label ~/istio_project/node-istio.yaml]
 2...
 3---
 4apiVersion: networking.istio.io/v1alpha3
 5kind: VirtualService
 6metadata:
 7  name: nodejs
 8spec:
 9  hosts:
10  - "*"
11  gateways:
12  - nodejs-gateway
13  http:
14  - route:
15    - destination:
16        host: nodejs

除了为此虚拟服务提供名称外,我们还包括此资源的规格,其中包括:

在这种情况下,我们再次使用 wildcard 值(*)以便在浏览器中快速访问应用程序,因为我们不使用域名。

  • 指定目标主机的网关字段。在这种情况下,它会被路由到我们的nodejs-gateway字段。
  • 指示如何路由HTTP流量的http字段:
  • 指示请求将路由到哪里的目的地字段。在这种情况下,它会被路由到nodejs-gateway服务,这暗示扩展到服务的完全合格域名(FQDN)在Kubernetes环境中: nodejs.default.svccluster.locter.0 一个`目的

保存并关闭文件,当你完成编辑。

有了yaml文件,您可以创建应用程序服务和部署,以及允许访问应用程序的网关和虚拟服务对象。

步骤 5 – 创建应用资源并允许远程测量访问

一旦您创建了应用程序服务和部署对象,以及网关和虚拟服务,您将能够对应用程序生成一些请求,并在您的 Istio Grafana 仪表板中查看相关数据。

我们将允许使用 HTTP 访问(https://istio.io/docs/tasks/telemetry/gateways/# option-2-insecure-access-http),但当您在生产或敏感环境中工作时,强烈建议您允许使用 HTTPS 访问(https://istio.io/docs/tasks/telemetry/gateways/# option-1-secure-access-https)。

由于我们在 步骤 2中安装 Istio 时设置了 --set grafana.enabled=true’ 配置选项,所以我们在我们的 istio-system` 名称空间中有一个 Grafana 服务和 Pod,我们在该步骤中确认了这一点。

有了这些资源,我们的下一步将是创建一个门户和虚拟服务的宣言,以便我们可以曝光Grafana添加剂。

打开文件以获取宣言:

1nano node-grafana.yaml

将下列代码添加到文件中,以创建网关和虚拟服务,以曝光和路由流量到Grafana服务:

 1[label ~/istio_project/node-grafana.yaml]
 2apiVersion: networking.istio.io/v1alpha3
 3kind: Gateway
 4metadata:
 5  name: grafana-gateway
 6  namespace: istio-system
 7spec:
 8  selector:
 9    istio: ingressgateway
10  servers:
11  - port:
12      number: 15031
13      name: http-grafana
14      protocol: HTTP
15    hosts:
16    - "*"
17---
18apiVersion: networking.istio.io/v1alpha3
19kind: VirtualService
20metadata:
21  name: grafana-vs
22  namespace: istio-system
23spec:
24  hosts:
25  - "*"
26  gateways:
27  - grafana-gateway
28  http:
29  - match:
30    - port: 15031
31    route:
32    - destination:
33        host: grafana
34        port:
35          number: 3000

我们的 Grafana 网关和虚拟服务规格类似于我们在 步骤 4中定义的应用网关和虚拟服务规格。

  • Grafana 将显示在名为 http-grafana 的端口(端口是 15031)上,并且在主机上的端口是 3000。
  • 网关和虚拟服务都定义在istio-system名空间中。
  • 本虚拟服务的主机istio-system名空间中的grafana服务。

<$>[note] 注: 由于我们当前的 MeshPolicy配置为在 允许模式中运行 TLS,我们不需要将 目的地规则应用到我们的宣言中。如果您在您的 Istio 安装中选择了不同的配置文件,那么您需要添加一个目的地规则来禁用相互 TLS,当允许使用 HTTP 访问 Grafana 时。

保存并关闭文件,当你完成编辑。

使用以下命令创建您的 Grafana 资源:

1kubectl apply -f node-grafana.yaml

kubectl apply命令允许您在创建或更新过程中将特定配置应用到对象中.在我们的情况下,我们正在将我们在 node-grafana.yaml 文件中指定的配置应用到我们的网关和虚拟服务对象中。

您可以用以下命令查看istio-system名称空间中的 Gateway:

1kubectl get gateway -n istio-system

您将看到以下结果:

1[secondary_label Output]
2NAME AGE
3grafana-gateway 47s

您可以为虚拟服务做同样的事情:

1kubectl get virtualservice -n istio-system
1[secondary_label Output]
2NAME GATEWAYS HOSTS AGE
3grafana-vs   [grafana-gateway]   [*]     74s

但是,在我们这样做之前,让我们创建我们的应用程序服务和部署,以及我们的应用程序网关和虚拟服务,并检查我们可以在浏览器中访问我们的应用程序。

使用以下命令创建应用程序服务和部署:

1kubectl apply -f node-app.yaml

等待几秒钟,然后用以下命令检查应用程序Pods:

1kubectl get pods
1[secondary_label Output]
2NAME READY STATUS RESTARTS AGE
3nodejs-7759fb549f-kmb7x 2/2 Running 0 40s

您的应用程序容器正在运行,正如您可以在状态列中看到的那样,但为什么准备列表列表2/2,如果应用程序从 步骤 3中表现出来,只有指定 1 个副本?

这个第二个容器是Envoy sidecar,您可以使用以下命令检查它. 请确保用您自己的nodejsPod的NAME代替这里列出的pod:

1kubectl describe pod nodejs-7759fb549f-kmb7x
 1[secondary_label Output]
 2Name:               nodejs-7759fb549f-kmb7x
 3Namespace:          default
 4...
 5Containers:
 6  nodejs:
 7  ...
 8  istio-proxy:
 9    Container ID:  docker://f840d5a576536164d80911c46f6de41d5bc5af5152890c3aed429a1ee29af10b
10    Image:         docker.io/istio/proxyv2:1.1.7
11    Image ID:      docker-pullable://istio/proxyv2@sha256:e6f039115c7d5ef9c8f6b049866fbf9b6f5e2255d3a733bb8756b36927749822 
12    Port:          15090/TCP
13    Host Port:     0/TCP
14    Args:
15    ...

接下来,创建您的应用程序网关和虚拟服务:

1kubectl apply -f node-istio.yaml

您可以通过以下命令检查 Gateway:

1kubectl get gateway
1[secondary_label Output]
2NAME AGE
3nodejs-gateway 7s

虚拟服务:

1kubectl get virtualservice
1[secondary_label Output]
2NAME GATEWAYS HOSTS AGE
3nodejs   [nodejs-gateway]   [*]     28s

要做到这一点,我们需要与我们的istio-ingressgateway服务相关的外部IP,这是一个LoadBalancer Service类型(https://kubernetes.io/docs/concepts/services-networking/service/# loadbalancer)。

使用以下命令获取istio-ingressgateway服务的外部 IP:

1kubectl get svc -n istio-system

你会看到这样的输出:

 1[secondary_label Output]
 2NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)                                                                                                                                      AGE
 3grafana ClusterIP 10.245.85.162    <none>            3000/TCP 42m
 4istio-citadel ClusterIP 10.245.135.45    <none>            8060/TCP,15014/TCP 42m
 5istio-galley ClusterIP 10.245.46.245    <none>            443/TCP,15014/TCP,9901/TCP 42m
 6istio-ingressgateway LoadBalancer 10.245.171.39 ingressgateway_ip 15020:30707/TCP,80:31380/TCP,443:31390/TCP,31400:31400/TCP,15029:30285/TCP,15030:31668/TCP,15031:32297/TCP,15032:30853/TCP,15443:30406/TCP 42m
 7istio-pilot ClusterIP 10.245.56.97     <none>            15010/TCP,15011/TCP,8080/TCP,15014/TCP 42m
 8istio-policy ClusterIP 10.245.206.189   <none>            9091/TCP,15004/TCP,15014/TCP 42m
 9istio-sidecar-injector ClusterIP 10.245.223.99    <none>            443/TCP 42m
10istio-telemetry ClusterIP 10.245.5.215     <none>            9091/TCP,15004/TCP,15014/TCP,42422/TCP 42m
11prometheus ClusterIP 10.245.100.132   <none>            9090/TCP 42m

istio-ingressgateway应该是唯一具有TYPE``LoadBalancer的服务,也是唯一具有外部IP的服务。

在您的浏览器中导航到此外部 IP: http://ingressgateway_ip

你应该看到下面的登陆页面:

Application Landing Page

接下来,通过点击刷新五次或六次来生成网站的一些负载。

您现在可以检查Grafana仪表板查看流量数据。

在您的浏览器中,导航到以下地址,再次使用您的istio-ingressgateway外部IP和您在您的Grafana Gateway中定义的端口: http://ingressgateway_ip:15031

您将看到以下登陆页面:

Grafana Home Dash

点击页面顶部的 主页 将带您到一个具有 ** istio** 文件夹的页面. 要查看下载选项的列表,请点击 ** istio** 文件夹图标:

Istio Dash Options Dropdown Menu

从此选项列表中,单击 Istio 服务仪表板

这将带你到一个定位页面,另一个下载菜单:

Service Dropdown in Istio Service Dash

从可用的选项列表中选择nodejs.default.svc.cluster.local

您现在可以查看该服务的流量数据:

Nodejs Service Dash

您现在有一个运行的 Node.js 应用程序在 Istio 服务网格中运行,Grafana 已启用并配置为外部访问。

结论

在本教程中,您使用 Helm 包管理器安装了 Istio,并使用它来暴露使用 Gateway 和虚拟服务对象的 Node.js 应用服务,您还配置了 Gateway 和虚拟服务对象以暴露 Grafana 远程测量插件,以查看您的应用程序的流量数据。

随着生产的转变,您将想要采取步骤,例如 使用 HTTPS 保护您的应用程序网关并确保访问您的 Grafana 服务也是 安全

您还可以探索其他与远程测量相关的任务(https://istio.io/docs/tasks/telemetry/),包括 收集和处理指标, 日志跟踪范围

Published At
Categories with 技术
comments powered by Disqus