ITPub博客

首页 > 数据库 > 数据库开发技术 > Istio 初体验

Istio 初体验

原创 数据库开发技术 作者:步步运维步步坑 时间:2024-05-27 11:07:33 0 删除 编辑

转到 Istio 发布 页面,下载针对您操作系统的安装文件, 或用自动化工具下载并提取最新版本(Linux 或 macOS):

$ curl -L https://istio.io/downloadIstio | sh -


上面的命令下载最新版本(用数值表示)的 Istio。您可以给命令行传递变量,用来下载指定的、不同处理器体系的版本。例如,要为 x86_64 架构下载 Istio 1.22.0,请运行:

$ curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.22.0 TARGET_ARCH=x86_64 sh -

转到 Istio 包目录。例如,如果包是 istio-1.22.0:

$ cd istio-1.22.0

安装目录包含:

  • samples/ 目录下的示例应用程序

  • bin/ 目录下的 istioctl 客户端二进制文件。

将 istioctl 客户端添加到路径(Linux 或 macOS):

$ export PATH=$PWD/bin:$PATH

安装 Istio

对于本次安装,我们采用 demo 配置组合。选择它是因为它包含了一组专为测试准备的功能集合,另外还有用于生产或性能测试的配置组合。

如果您的平台有供应商提供的配置组合,比如 Openshift,则在下面命令中替换掉 demo 配置项。可参考https://istio.io/latest/zh/docs/setup/platform-setup/

  • default:这是Istio的默认配置模式,它提供了Istio的核心功能,并适用于大多数生产环境。

  • demo:这个配置模式主要用于演示和测试目的,它通常包含了比default模式更多的功能,并且可能启用了某些用于调试或监视的特性。但是,由于这些特性可能会增加资源的消耗或带来安全风险,因此通常不建议在生产环境中使用demo模式。

  • empty:这个配置模式提供了一个非常精简的Istio安装,只包含最基本的组件和设置。它适用于那些只需要Istio的部分功能或需要自定义配置的用户。


$ istioctl install --set profile=demo -y✔ Istio core installed✔ Istiod installed✔ Egress gateways installed✔ Ingress gateways installed✔ Installation complete

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

 kubectl label namespace default istio-injection=enablednamespace/default labeled

部署示例应用

部署 Bookinfo 示例应用:

$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yamlservice/details createdserviceaccount/bookinfo-details createddeployment.apps/details-v1 createdservice/ratings createdserviceaccount/bookinfo-ratings createddeployment.apps/ratings-v1 createdservice/reviews createdserviceaccount/bookinfo-reviews createddeployment.apps/reviews-v1 createddeployment.apps/reviews-v2 createddeployment.apps/reviews-v3 createdservice/productpage createdserviceaccount/bookinfo-productpage createddeployment.apps/productpage-v1 created



应用很快会启动起来。当每个 Pod 准备就绪时,Istio 将伴随应用一起部署。

$ kubectl get servicesNAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGEdetails       ClusterIP   10.0.0.212      <none>        9080/TCP   29skubernetes    ClusterIP   10.0.0.1        <none>        443/TCP    25mproductpage   ClusterIP   10.0.0.57       <none>        9080/TCP   28sratings       ClusterIP   10.0.0.33       <none>        9080/TCP   29sreviews       ClusterIP   10.0.0.28       <none>        9080/TCP   29s
$ kubectl get podsNAME                              READY   STATUS    RESTARTS   AGEdetails-v1-558b8b4b76-2llld       2/2     Running   0          2m41sproductpage-v1-6987489c74-lpkgl   2/2     Running   0          2m40sratings-v1-7dc98c7588-vzftc       2/2     Running   0          2m41sreviews-v1-7f99cc4496-gdxfn       2/2     Running   0          2m41sreviews-v2-7d79d5bd5d-8zzqd       2/2     Running   0          2m41sreviews-v3-7dbcdcbc56-m8dph       2/2     Running   0          2m41s

在执行下一步之前,重新运行上面的命令直到所有的 Pod 达到此状态:就绪状态(READY)的值为 2/2、状态(STATUS)的值为 Running。基于您平台的不同,这个操作过程可能会花费几分钟的时间。

确认上面的操作都正确之后,运行下面命令,通过检查返回的页面标题来验证应用是否已在集群中运行,并已提供网页服务:

$ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -sS productpage:9080/productpage | grep -o "<title>.*</title>"<title>Simple Bookstore App</title>



对外开放应用程序

此时,BookInfo 应用已经部署,但还不能被外界访问。要开放访问,您需要创建 Istio 入站网关(Ingress Gateway), 它会在网格边缘把一个路径映射到路由。

把应用关联到 Istio 网关:

$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yamlgateway.networking.istio.io/bookinfo-gateway createdvirtualservice.networking.istio.io/bookinfo created

确保配置文件没有问题:

$ istioctl analyze✔ No validation issues found when analyzing namespace: default.



确定入站 IP 和端口

按照说明,为访问网关设置两个变量:INGRESS_HOST 和 INGRESS_PORT。使用标签页,切换到您选用平台的说明:

Minikube其他平台

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

$ minikube tunnel

设置入站主机和端口:

$ export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')


确保 IP 地址和端口被成功地赋值给了每一个环境变量:

$ echo "$INGRESS_HOST"127.0.0.1$ echo "$INGRESS_PORT"80$ echo "$SECURE_INGRESS_PORT"443

设置环境变量 GATEWAY_URL:

$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT

确保 IP 地址和端口均成功地赋值给了环境变量:

$ echo "$GATEWAY_URL"192.168.99.100:32194


验证外部访问

用浏览器查看 Bookinfo 应用的产品页面,验证 Bookinfo 已经实现了外部访问。

运行下面命令,获取 Bookinfo 应用的外部访问地址。

$ echo "http://$GATEWAY_URL/productpage"


查看仪表板

Istio 和几个遥测应用做了集成。遥测能帮您了解服务网格的结构、展示网络的拓扑结构、分析网格的健康状态。

使用下面说明部署 Kiali 仪表板、 以及 Prometheus、 Grafana、 还有 Jaeger。

安装 Kiali 和其他插件,等待部署完成。

$ kubectl apply -f samples/addons$ kubectl rollout status deployment/kiali -n istio-systemWaiting for deployment "kiali" rollout to finish: 0 of 1 updated replicas are available...deployment "kiali" successfully rolled out

如果在安装插件时出错,再运行一次命令。有一些和时间相关的问题,再次运行就能解决。

访问 Kiali 仪表板

$ istioctl dashboard kiali

在左侧的导航菜单,选择 Graph ,然后在 Namespace 下拉列表中,选择 default 。



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

$ for i in $(seq 1 100); do curl -s -o /dev/null "http://$GATEWAY_URL/productpage"; done

Kiali 仪表板展示了网格的概览以及 Bookinfo 示例应用的各个服务之间的关系。它还提供过滤器来可视化流量的流动。


END


添加博主

微信号|yfq940-


点个关注!!!


原文作者:步步运维步步坑;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-10-08

  • 博文量
    100
  • 访问量
    51720