Isito在minikube上的初体验

584 阅读6分钟

下载Istio

下载安装包:github.com/istio/istio…

解压后将解压的bin目录加入系统变量PATH中。

安装 Istio

安装配置文件

以下说明了在安装 Istio 时所能够使用的内置配置文件。这些配置文件提供了对 Istio 控制平面和 Istio 数据平面 Sidecar 的定制内容。

  • default:根据 IstioOperator API 的默认设置启动组件。 建议用于生产部署和 Multicluster Mesh 中的 Primary Cluster。
  • demo:这一配置具有适度的资源需求,旨在展示 Istio 的功能。 它适合运行 Bookinfo 应用程序和相关任务。 这是通过快速开始指导安装的配置。此配置文件启用了高级别的追踪和访问日志,因此不适合进行性能测试。
  • minimal:与默认配置文件相同,但只安装了控制平面组件。 它允许您使用 Separate Profile 配置控制平面和数据平面组件(例如 Gateway)。
  • remote:配置 Multicluster Mesh 的 Remote Cluster。
  • empty:不部署任何东西。可以作为自定义配置的基本配置文件。
  • preview:预览文件包含的功能都是实验性。这是为了探索 Istio 的新功能。不确保稳定性、安全性和性能(使用风险需自负)。

demo安装

这里使用demo配置文件安装,主要为了玩转Bookinfo示例应用。

C:\Users\Lenovo>istioctl install --set profile=demo -y
✔ Istio core installed
✔ Istiod installed
✔ Egress gateways installed
✔ Ingress gateways installed
✔ Installation complete
Making this installation the default for injection and validation.

Thank you for installing Istio 1.16.  Please take a few minutes to tell us about your install/upgrade experience!  https://forms.gle/99uiMML96AmsXY5d6

给命名空间添加标签,指示 Istio 在部署应用的时候,自动注入Envoy Sidecar代理:

C:\Users\Lenovo>kubectl label namespace default istio-injection=enabled
namespace/default labeled

Bookinfo示例应用介绍

这个应用模仿在线书店的一个分类,显示一本书的信息。 页面上会显示一本书的描述,书籍的细节(ISBN、页数等),以及关于这本书的一些评论。

Bookinfo 应用分为四个单独的微服务:

  • productpage. 这个微服务会调用 details 和 reviews 两个微服务,用来生成页面。
  • details. 这个微服务中包含了书籍的信息。
  • reviews. 这个微服务中包含了书籍相关的评论。它还会调用 ratings 微服务。
  • ratings. 这个微服务中包含了由书籍评价组成的评级信息。

reviews 微服务有 3 个版本:

  • v1 版本不会调用 ratings 服务。
  • v2 版本会调用 ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
  • v3 版本会调用 ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。

下图展示了这个应用的端到端架构。

image.png

部署示例应用

  1. 部署 Bookinfo 示例应用:

资源描述文件:bookinfo.yaml

C:\Users\Lenovo>kubectl apply -f D:\tools\istio\samples\bookinfo/platform/kube/bookinfo.yaml
service/details created
serviceaccount/bookinfo-details created
deployment.apps/details-v1 created
service/ratings created
serviceaccount/bookinfo-ratings created
deployment.apps/ratings-v1 created
service/reviews created
serviceaccount/bookinfo-reviews created
deployment.apps/reviews-v1 created
deployment.apps/reviews-v2 created
deployment.apps/reviews-v3 created
service/productpage created
serviceaccount/bookinfo-productpage created
deployment.apps/productpage-v1 created
  1. 应用很快会启动起来。当每个Pod准备就绪时,Istio Sidecar将随应用一起部署。
C:\Users\Lenovo>kubectl get services
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
details       ClusterIP   10.99.247.149   <none>        9080/TCP   81m
kubernetes    ClusterIP   10.96.0.1       <none>        443/TCP    7d19h
productpage   ClusterIP   10.107.193.9    <none>        9080/TCP   81m
ratings       ClusterIP   10.108.12.28    <none>        9080/TCP   81m
reviews       ClusterIP   10.98.77.25     <none>        9080/TCP   81m

C:\Users\Lenovo>kubectl get pods
NAME                             READY   STATUS    RESTARTS   AGE
details-v1-5ffd6b64f7-7hlj9      2/2     Running   0          81m
productpage-v1-979d4d9fc-pz4dj   2/2     Running   0          81m
ratings-v1-5f9699cfdf-pvkj2      2/2     Running   0          81m
reviews-v1-569db879f5-w672m      2/2     Running   0          81m
reviews-v2-65c4dc6fdc-bmqkt      2/2     Running   0          81m
reviews-v3-c9c4fb987-622zq       2/2     Running   0          81m
  1. 检查应用是否正常运行,看看如下命令能否返回网页内容
kubectl exec ratings-v1-5f9699cfdf-pvkj2 -c ratings -- curl -sS productpage:9080/productpage

部署网关

把应用关联到 Istio 网关。

资源描述文件:bookinfo-gateway.yaml

C:\Users\Lenovo>kubectl apply -f D:\tools\istio\samples\bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created

确保配置文件没有问题

C:\Users\Lenovo>istioctl analyze

✔ No validation issues found when analyzing namespace: default.

最终部署结构如下: image.png

确定入站 IP 和端口

istio-ingressgateway服务类型为LoadBalancer,LoadBalancer类型的服务通过外部负载均衡器暴露服务。

本机使用minikube环境,可以用minikube tunnel创建一个隧道来访问 LoadBalancer 服务。

在新的终端窗口中运行minikube tunnel命令启动一个Minikube隧道,将流量发送到Istio Ingress Gateway。 这将为 service/istio-ingressgateway 提供一个外部负载均衡器 EXTERNAL-IP。

运行minikube tunnel报错:

C:\Users\Lenovo>minikube tunnel
Status:
        machine: minikube
        pid: 14476
        route: 10.96.0.0/12 -> 172.20.34.234
        minikube: Running
        services: []
    errors:
                minikube: no errors
                router: error adding route:  ��������!
, 2
                loadbalancer emulator: no errors

查看istio-ingressgateway状态,Extenal—IP一直处于peding状态。

C:\Users\Lenovo>kubectl get svc -n istio-system
NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                                      AGE
istio-egressgateway    ClusterIP      10.106.142.182   <none>        80/TCP,443/TCP                                                               42m
istio-ingressgateway   LoadBalancer   10.104.87.161    <pending>     15021:31720/TCP,80:31674/TCP,443:30986/TCP,31400:31465/TCP,15443:31245/TCP   42m
istiod                 ClusterIP      10.96.163.45     <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP                                        4h39m

googel了一下,发现是命令行工具为中文导致的。参考:github.com/kubernetes/…

chcp 437 命令切换为英文,要切换回中文使用 chcp 936命令。切换英文后再运行minikube tunel命令就正常了。

C:\Users\Lenovo>minikube tunnel
Status:
        machine: minikube
        pid: 17312
        route: 10.96.0.0/12 -> 172.20.34.234
        minikube: Running
        services: [istio-ingressgateway]
    errors:
                minikube: no errors
                router: no errors
                loadbalancer emulator: no errors
                
C:\Users\Lenovo>kubectl get svc -n istio-system
NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                                                                      AGE
istio-egressgateway    ClusterIP      10.106.142.182   <none>          80/TCP,443/TCP                                                               47m
istio-ingressgateway   LoadBalancer   10.104.87.161    10.104.87.161   15021:31720/TCP,80:31674/TCP,443:30986/TCP,31400:31465/TCP,15443:31245/TCP   47m
istiod                 ClusterIP      10.96.163.45     <none>          15010/TCP,15012/TCP,443/TCP,15014/TCP                                        4h43m

使用Extenal IP访问产品页:http://10.104.87.161/productpage

image.png

查看dashboard

安装 Kiali和相关插件

C:\Users\Lenovo>kubectl apply -f D:\tools\istio/samples/addons
serviceaccount/grafana created
configmap/grafana created
service/grafana created
deployment.apps/grafana created
configmap/istio-grafana-dashboards created
configmap/istio-services-grafana-dashboards created
deployment.apps/jaeger created
service/tracing created
service/zipkin created
service/jaeger-collector created
serviceaccount/kiali created
configmap/kiali created
clusterrole.rbac.authorization.k8s.io/kiali-viewer created
clusterrole.rbac.authorization.k8s.io/kiali created
clusterrolebinding.rbac.authorization.k8s.io/kiali created
role.rbac.authorization.k8s.io/kiali-controlplane created
rolebinding.rbac.authorization.k8s.io/kiali-controlplane created
service/kiali created
deployment.apps/kiali created
serviceaccount/prometheus created
configmap/prometheus created
clusterrole.rbac.authorization.k8s.io/prometheus created
clusterrolebinding.rbac.authorization.k8s.io/prometheus created
service/prometheus created
deployment.apps/prometheus created

使用下面命令等待部署完成

C:\Users\Lenovo>kubectl rollout status deployment/kiali -n istio-system
Waiting for deployment "kiali" rollout to finish: 0 of 1 updated replicas are available...
deployment "kiali" successfully rolled out

访问 Kiali 仪表板

C:\Users\Lenovo>istioctl dashboard kiali
http://localhost:20001/kiali

image.png

点击左侧Graph菜单,选择namespace为default。可以看到各个服务之间的关系。

要查看追踪数据,必须向服务发送请求。请求的数量取决于 Istio 的采样率。 采样率在安装 Istio 时设置,默认采样速率为 1%。在第一个跟踪可见之前,您需要发送至少 100 个请求。

image.png