下载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 个红色星形图标来显示评分信息。
下图展示了这个应用的端到端架构。
部署示例应用
- 部署 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
- 应用很快会启动起来。当每个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
- 检查应用是否正常运行,看看如下命令能否返回网页内容
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.
最终部署结构如下:
确定入站 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
查看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
点击左侧Graph菜单,选择namespace为default。可以看到各个服务之间的关系。
要查看追踪数据,必须向服务发送请求。请求的数量取决于 Istio 的采样率。 采样率在安装 Istio 时设置,默认采样速率为 1%。在第一个跟踪可见之前,您需要发送至少 100 个请求。