【云原生】【istio】安装使用

举报
huahua.Dr 发表于 2021/05/17 21:47:53 2021/05/17
【摘要】 完成下面步骤需要你有一个 cluster, 且运行着兼容版本的 Kubernetes (1.17, 1.18, 1.19, 1.20)。 。下载 Istio转到 Istio 发布 页面,下载针对你操作系统的安装文件, 或用自动化工具下载并提取最新版本(Linux 或 macOS):$ curl -L https://istio.io/downloadIstio | sh -上面的命令下载最新...

完成下面步骤需要你有一个 cluster, 且运行着兼容版本的 Kubernetes (1.17, 1.18, 1.19, 1.20)。

下载 Istio

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

    $ curl -L https://istio.io/downloadIstio | sh -
  2. 转到 Istio 包目录。例如,如果包是 istio-1.9.5

    $ cd istio-1.9.5

    安装目录包含:

    • samples/ 目录下的示例应用程序
    • bin/ 目录下的 istioctl 客户端二进制文件 .
  3.  istioctl 客户端加入搜索路径(Linux or macOS):

    $ export PATH=$PWD/bin:$PATH

安装 Istio

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

    $ istioctl install --set profile=demo -y
    ✔ Istio core installed ✔ Istiod installed ✔ Egress gateways installed ✔ Ingress gateways installed ✔ Installation complete
  2. 给命名空间添加标签,指示 Istio 在部署应用的时候,自动的注入 Envoy 边车代理:

    $ kubectl label namespace default istio-injection=enabled
    namespace/default labeled

部署示例应用

  1. 部署 Bookinfo 示例应用:

    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
  2. 应用很快会启动起来。当一个个的 Pod 准备就绪,ISTIO 边车代理将伴随他们一起部署。

    $ kubectl get services
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE details ClusterIP 10.0.0.212 <none> 9080/TCP 29s kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 25m productpage ClusterIP 10.0.0.57 <none> 9080/TCP 28s ratings ClusterIP 10.0.0.33 <none> 9080/TCP 29s reviews ClusterIP 10.0.0.28 <none> 9080/TCP 29s

    $ kubectl get pods
    NAME READY STATUS RESTARTS AGE details-v1-558b8b4b76-2llld 2/2 Running 0 2m41s productpage-v1-6987489c74-lpkgl 2/2 Running 0 2m40s ratings-v1-7dc98c7588-vzftc 2/2 Running 0 2m41s reviews-v1-7f99cc4496-gdxfn 2/2 Running 0 2m41s reviews-v2-7d79d5bd5d-8zzqd 2/2 Running 0 2m41s reviews-v3-7dbcdcbc56-m8dph 2/2 Running 0 2m41s
  3. 验证方方面面均工作无误。运行下面命令,通过检查返回的页面标题,来验证应用是否已在集群中运行,并已提供网页服务:

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

对外开放应用程序

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

  1. 把应用关联到 Istio 网关:

    gateway.networking.istio.io/bookinfo-gateway created virtualservice.networking.istio.io/bookinfo created
  2. 确保配置文件没有问题:

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

确定入站 IP 和端口

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

Minikube其他平台

设置入站端口:

$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}') $ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')

确认端口被成功的赋值给了每一个环境变量:

$ echo "$INGRESS_PORT"
32194
$ echo "$SECURE_INGRESS_PORT"
31632

设置入站 IP:

$ export INGRESS_HOST=$(minikube ip)

确认 IP 地址被成功的赋值给了环境变量:

$ echo "$INGRESS_HOST"
192.168.4.102

在一个新的终端窗口中执行此命令,启动一个 Minikube tunnel,它将把流量发送到你 Istio 入站网关:

$ minikube tunnel
  1. 设置环境变量 GATEWAY_URL:

    $ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
  2. 确保 IP 地址和端口均成功的赋值给了环境变量:

    $ echo "$GATEWAY_URL"
    192.168.99.100:32194

验证外部访问

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

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

    $ echo "http://$GATEWAY_URL/productpage"
  2. 把上面命令的输出地址复制粘贴到浏览器并访问,确认 Bookinfo 应用的产品页面是否可以打开。

查看仪表板

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

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

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

    $ kubectl apply -f samples/addons $ 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
  2. 访问 Kiali 仪表板。

    $ istioctl dashboard kiali
  3. 在左侧的导航菜单,选择 Graph ,然后在 Namespace 下拉列表中,选择 default 

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

    Kiali Dashboard
    Kiali Dashboard

后续步骤

恭喜你完成了评估安装!

对于新手来说,这些任务是非常好的资源,可以借助 demo 安装更深入评估 Istio 的特性:

在你为了生产系统定制Istio之前,参阅这些资源:

加入 Istio 社区

我们欢迎你加入 Istio 社区, 提出问题,并给我们以反馈。

卸载

删除 Bookinfo 示例应用和配置, 参阅 清理 Bookinfo.

Istio 卸载程序按照层次结构逐级的从 istio-system 命令空间中删除 RBAC 权限和所有资源。对于不存在的资源报错,可以安全的忽略掉,毕竟他们已经被分层的删除了。

$ kubectl delete -f samples/addons $ istioctl manifest generate --set profile=demo | kubectl delete --ignore-not-found=true -f -

命名空间 istio-system 默认情况下并不会被删除。 不需要的时候,使用下面命令删掉它:

$ kubectl delete namespace istio-system

指示 Istio 自动注入 Envoy 边车代理的标签默认也不删除。 不需要的时候,使用下面命令删掉它。

$ kubectl label namespace default istio-injection-
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。