• istio学习(2)bookinfo示例


    自动注入

    istio网格服务的实现需要基于注入,istio的注入指的是在原基础的pod中再新创建一个容器,以sidecar的形式和原来的容器一起运行。以bookinfo的默认实例来说。
    未注入前的实例为:
    在这里插入图片描述
    将sidecar进行注入后:
    在这里插入图片描述
    原来是服务与服务之间相互调用,但是注入后所有微服务都将与一个 Envoy sidecar 打包在一起,它拦截服务的传入和传出调用,通过 Istio 控制平面、路由、遥测收集和整个应用程序的策略执行提供外部控制所需的钩子。
    同时自动注入也非常的简单,只需要给需要注入的命名空间打上一个标签即可。

    kubectl label namespaces  default istio-injection=enabled
    
    • 1

    或者我们不想让命名空间下的所有服务都进行注入,那我们也可以手动注入单个服务。

    kube-inject -f xxx.yaml | kubectl apply   -f - ##首先需要拿到yaml文件,让istio注入文件后直接apply
    
    • 1

    bookinfo示例

    部署bookinfo

    kubectl apply -f bookinfo/platform/kube/bookinfo.yaml 
    
    • 1

    部署完成后等待应用启动

    [root@localhost addons]# kubectl get pod
    NAME                              READY   STATUS    RESTARTS      AGE
    details-v1-5498c86cf5-tqbpj       2/2     Running   2 (18h ago)   4d16h
    productpage-v1-65b75f6885-5fjng   2/2     Running   2 (18h ago)   4d16h
    ratings-v1-b477cf6cf-br7h9        2/2     Running   2 (18h ago)   4d16h
    reviews-v1-79d546878f-ft946       2/2     Running   2 (18h ago)   4d16h
    reviews-v2-548c57f459-4cbhs       2/2     Running   2 (18h ago)   4d16h
    reviews-v3-6dd79655b9-dn7gc       2/2     Running   2 (18h ago)   4d16h
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这个时候我们可以看到READY是两个,再通过kubectl describe pod details-v1-5498c86cf5-tqbpj命令查看内部具体增加的什么容器。
    在这里插入图片描述
    从上面的图片可以看到,里面除了有一个默认的details容器外还有一个istio-proxy的容器,这个容器就是前面所说到的sidecar服务,主要用来做流量转发和流量劫持的,但是这个还不是注入的本质,再看创建容器之前还做了什么操作。
    在创建容器之前还有一个初始化的步骤。
    在这里插入图片描述
    从图中我们看到,这个初始化的本质其实还是对iptables进行一些操作。

    介绍完这些之后再回来看看示例。

    [root@localhost ~]# kubectl get svc
    NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
    details       ClusterIP   10.68.37.147    <none>        9080/TCP   4d16h
    kubernetes    ClusterIP   10.68.0.1       <none>        443/TCP    11d
    productpage   ClusterIP   10.68.165.107   <none>        9080/TCP   4d16h
    ratings       ClusterIP   10.68.126.87    <none>        9080/TCP   4d16h
    reviews       ClusterIP   10.68.101.69    <none>        9080/TCP   4d16h
    
    [root@localhost ~]# curl 10.68.165.107:9080 | grep  -o ".*"
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  1683  100  1683    0     0   650k      0 --:--:-- --:--:-- --:--:--  821k
    <title>Simple Bookstore App</title>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    示例设置完成后无法在网页上直接访问,下来需要设置网关入口。

    kubectl apply -f istio-1.14.3/samples/bookinfo/networking/bookinfo-gateway.yaml
    
    • 1

    网关设置完成需要确认网关确实创建

    [root@localhost ~]# kubectl get gateways.networking.istio.io 
    NAME               AGE
    bookinfo-gateway   4d16h
    
    • 1
    • 2
    • 3

    如何访问,需要将ingress设置为nodeport

    [root@localhost ~]# kubectl get svc -n istio-system 
    NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                      AGE
    grafana                NodePort    10.68.234.129   <none>        3000:30587/TCP                                                               4d18h
    istio-egressgateway    ClusterIP   10.68.246.26    <none>        80/TCP,443/TCP                                                               4d18h
    istio-ingressgateway   NodePort    10.68.169.170   <none>        15021:31793/TCP,80:32192/TCP,443:31965/TCP,31400:30983/TCP,15443:32007/TCP   4d18h
    istiod                 ClusterIP   10.68.124.64    <none>        15010/TCP,15012/TCP,443/TCP,15014/TCP                                        4d18h
    jaeger-collector       ClusterIP   10.68.47.19     <none>        14268/TCP,14250/TCP,9411/TCP                                                 4d18h
    kiali                  NodePort    10.68.130.213   <none>        20001:30134/TCP,9090:32608/TCP                                               4d18h
    prometheus             ClusterIP   10.68.99.184    <none>        9090/TCP                                                                     4d18h
    tracing                ClusterIP   10.68.175.144   <none>        80/TCP,16685/TCP                                                             4d18h 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    这时候访问网页。
    在这里插入图片描述
    同时不断的刷新就可以看到网页的星星有不同的变化,因为reviews服务有三个版本,通过默认调用service会均匀的负载到reviews中。想要更直观的查看服务的调用可以再将kiali也使用nodeport暴露出来在网页上进行查看。
    在这里插入图片描述

  • 相关阅读:
    TestNG如何编排测试用例,第3种方式最实用
    企业为什么难创新?5个常见的创新障碍
    【Java】java: 无效的标记: -parameters
    springboot使用filter增加全局traceId,方便日志查找
    缓存案例-架构真题(二十二)
    JavaScript操作DOM元素的一些基础方法与属性
    最长字段和问题
    使用IVX来创造一个自己的3D小游戏【后台和中台、React Core、three.js、Pixi.js、Krpano、antD......】
    联盟链 Hyperledger Fabric 应用场景
    工作中需要用到的Java知识(AQS篇)
  • 原文地址:https://blog.csdn.net/passnetY/article/details/126380283