• Service Mesh之Istio部署bookinfo


      前文我们了解了service mesh、分布式服务治理和istio部署相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/17281541.html;今天我们在istio环境中部署官方示例项目bookinfo;通过部署bookinfo项目来了解istio;

      给istio部署插件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    root@k8s-master01:/usr/local# cd istio
    root@k8s-master01:/usr/local/istio# ls samples/addons/
    extras  grafana.yaml  jaeger.yaml  kiali.yaml  prometheus.yaml  README.md
    root@k8s-master01:/usr/local/istio# kubectl apply -f 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
    root@k8s-master01:/usr/local/istio#

      提示:istio插件的部署清单在istio/samples/addons/目录下,该目录下有grafana、jaeger、kiali、prometheus的部署清单;其中jaeger是负责链路追踪,kiali是istio的一个web客户端工具,我们可以在web页面来管控istio,prometheus是负责指标数据采集,grafana负责指标数据的展示工具;应用该目录下的所有部署清单后,对应istio-system名称空间下会跑相应的pod和相应的svc资源;

      验证:在istio-system名称空间下,查看对应pod是否正常跑起来了?对应svc资源是否创建?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    root@k8s-master01:/usr/local/istio# kubectl get pods -n istio-system
    NAME                                   READY   STATUS    RESTARTS       AGE
    grafana-69f9b6bfdc-cm966               1/1     Running   0              12m
    istio-egressgateway-774d6846df-fv97t   1/1     Running   3 (144m ago)   22h
    istio-ingressgateway-69499dc-pdgld     1/1     Running   3 (144m ago)   22h
    istiod-65dcb8497-9skn9                 1/1     Running   3 (145m ago)   22h
    jaeger-cc4688b98-wzfph                 1/1     Running   0              12m
    kiali-594965b98c-kbllg                 1/1     Running   0              64s
    prometheus-5f84bbfcfd-62nwc            2/2     Running   0              12m
    root@k8s-master01:/usr/local/istio# kubectl get svc -n istio-system
    NAME                   TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                                                                      AGE
    grafana                ClusterIP      10.107.10.186              3000/TCP                                                                     12m
    istio-egressgateway    ClusterIP      10.106.179.126             80/TCP,443/TCP                                                               22h
    istio-ingressgateway   LoadBalancer   10.102.211.120   192.168.0.252   15021:32639/TCP,80:31338/TCP,443:30597/TCP,31400:31714/TCP,15443:32154/TCP   22h
    istiod                 ClusterIP      10.96.6.69                 15010/TCP,15012/TCP,443/TCP,15014/TCP                                        22h
    jaeger-collector       ClusterIP      10.100.138.187             14268/TCP,14250/TCP,9411/TCP                                                 12m
    kiali                  ClusterIP      10.99.88.50                20001/TCP,9090/TCP                                                           12m
    prometheus             ClusterIP      10.108.131.84              9090/TCP                                                                     12m
    tracing                ClusterIP      10.100.53.36               80/TCP,16685/TCP                                                             12m
    zipkin                 ClusterIP      10.110.231.233             9411/TCP                                                                     12m
    root@k8s-master01:/usr/local/istio#

      提示:可以看到对应pod都在正常runing并处于ready状态;对应svc资源也都正常创建;我们要想访问对应服务,可以在集群内部访问对应的clusterIP来访问;也可以修改svc对应资源类型为nodeport或者loadbalancer类型;当然除了上述修改svc资源类型的方式实现集群外部访问之外,我们也可以通过istio的入口网关来访问;不过这种方式需要我们先通过配置文件告诉给istiod,让其把对应的服务通过ingressgate的外部IP地址暴露出来;

      这里说一下通过ingressgateway暴露服务的原理;我们在安装istio以后,对应会在k8s上创建一些crd资源,这些crd资源就是用来定义如何管控流量的;即我们通过定义这些crd类型的资源来告诉istiod,对应服务该如何暴露;只要我们在k8s集群上创建这些crd类型的资源以后,对应istiod就会将其收集起来,把对应资源转换为envoy的配置文件格式,再统一下发给通过istio注入的sidecar,以实现配置envoy的目的(envoy就是istio注入到应用pod中的sidecar);

      查看crd 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    root@k8s-master01:~# kubectl get crds
    NAME                                                  CREATED AT
    authorizationpolicies.security.istio.io               2023-04-02T16:28:24Z
    bgpconfigurations.crd.projectcalico.org               2023-04-02T02:26:34Z
    bgppeers.crd.projectcalico.org                        2023-04-02T02:26:34Z
    blockaffinities.crd.projectcalico.org                 2023-04-02T02:26:34Z
    caliconodestatuses.crd.projectcalico.org              2023-04-02T02:26:34Z
    clusterinformations.crd.projectcalico.org             2023-04-02T02:26:34Z
    destinationrules.networking.istio.io                  2023-04-02T16:28:24Z
    envoyfilters.networking.istio.io                      2023-04-02T16:28:24Z
    felixconfigurations.crd.projectcalico.org             2023-04-02T02:26:34Z
    gateways.networking.istio.io                          2023-04-02T16:28:24Z
    globalnetworkpolicies.crd.projectcalico.org           2023-04-02T02:26:34Z
    globalnetworksets.crd.projectcalico.org               2023-04-02T02:26:34Z
    hostendpoints.crd.projectcalico.org                   2023-04-02T02:26:34Z
    ipamblocks.crd.projectcalico.org                      2023-04-02T02:26:34Z
    ipamconfigs.crd.projectcalico.org                     2023-04-02T02:26:34Z
    ipamhandles.crd.projectcalico.org                     2023-04-02T02:26:34Z
    ippools.crd.projectcalico.org                         2023-04-02T02:26:34Z
    ipreservations.crd.projectcalico.org                  2023-04-02T02:26:34Z
    istiooperators.install.istio.io                       2023-04-02T16:28:24Z
    kubecontrollersconfigurations.crd.projectcalico.org   2023-04-02T02:26:34Z
    networkpolicies.crd.projectcalico.org                 2023-04-02T02:26:34Z
    networksets.crd.projectcalico.org                     2023-04-02T02:26:34Z
    peerauthentications.security.istio.io                 2023-04-02T16:28:24Z
    proxyconfigs.networking.istio.io                      2023-04-02T16:28:24Z
    requestauthentications.security.istio.io              2023-04-02T16:28:24Z
    serviceentries.networking.istio.io                    2023-04-02T16:28:24Z
    sidecars.networking.istio.io                          2023-04-02T16:28:24Z
    telemetries.telemetry.istio.io                        2023-04-02T16:28:24Z
    virtualservices.networking.istio.io                   2023-04-02T16:28:24Z
    wasmplugins.extensions.istio.io                       2023-04-02T16:28:24Z
    workloadentries.networking.istio.io                   2023-04-02T16:28:24Z
    workloadgroups.networking.istio.io                    2023-04-02T16:28:24Z
    root@k8s-master01:~# kubectl api-resources --api-group=networking.istio.io
    NAME               SHORTNAMES   APIVERSION                     NAMESPACED   KIND
    destinationrules   dr           networking.istio.io/v1beta1    true         DestinationRule
    envoyfilters                    networking.istio.io/v1alpha3   true         EnvoyFilter
    gateways           gw           networking.istio.io/v1beta1    true         Gateway
    proxyconfigs                    networking.istio.io/v1beta1    true         ProxyConfig
    serviceentries     se           networking.istio.io/v1beta1    true         ServiceEntry
    sidecars                        networking.istio.io/v1beta1    true         Sidecar
    virtualservices    vs           networking.istio.io/v1beta1    true         VirtualService
    workloadentries    we           networking.istio.io/v1beta1    true         WorkloadEntry
    workloadgroups     wg           networking.istio.io/v1beta1    true         WorkloadGroup
    root@k8s-master01:~#

      提示:可以看到在networking.istio.io这个群组里面有很多crd资源类型;其中gateway就是来定义如何接入外部流量的;virtualservice就是来定义虚拟主机的(类似apache中的虚拟主机),destinationrules用于定义外部流量通过gateway进来以后,结合virtualservice路由,对应目标该如何承接对应流量的;我们在k8s集群上创建这些类型的crd资源以后,都会被istiod收集并由它负责将其转换为envoy识别的格式配置统一下发给整个网格内所有的envoy sidecar或istio-system名称空间下所有envoy pod;

      通过istio ingressgateway暴露kiali服务

      定义 kiali-gateway资源实现流量匹配

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # cat kiali-gateway.yaml
    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: kiali-gateway
      namespace: istio-system
    spec:
      selector:
        app: istio-ingressgateway
      servers:
      - port:
          number: 80
          name: http-kiali
          protocol: HTTP
        hosts:
        - "kiali.ik8s.cc"

      提示:该资源定义了通过istio-ingresstateway进来的流量,匹配主机头为kiali.ik8s.cc,协议为http,端口为80的流量;

      定义virtualservice资源实现路由

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # cat kiali-virtualservice.yaml
    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: kiali-virtualservice
      namespace: istio-system
    spec:
      hosts:
      - "kiali.ik8s.cc"
      gateways:
      - kiali-gateway
      http:
      - match:
        - uri:
            prefix: /
        route:
        - destination:
            host: kiali
            port:
              number: 20001

      提示:该资源定义了gateway进来的流量匹配主机头为kiali.ik8s.cc,uri匹配“/”;就把对应流量路由至对应服务名为kiali的服务的20001端口进行响应;

      定义destinationrule实现如何承接对应流量

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # cat kiali-destinationrule.yaml
    apiVersion: networking.istio.io/v1beta1
    kind: DestinationRule
    metadata:
      name: kiali
      namespace: istio-system
    spec:
      host: kiali
      trafficPolicy:
        tls:
          mode: DISABLE

      提示:该资源定义了对应承接非tls的流量;即关闭kiali服务的tls功能;

      应用上述配置清单

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    root@k8s-master01:~/istio-in-practise/Traffic-Management-Basics/kiali-port-80# kubectl apply -f .
    destinationrule.networking.istio.io/kiali created
    gateway.networking.istio.io/kiali-gateway created
    virtualservice.networking.istio.io/kiali-virtualservice created
    root@k8s-master01:~/istio-in-practise/Traffic-Management-Basics/kiali-port-80# kubectl get gw -n istio-system
    NAME            AGE
    kiali-gateway   27s
    root@k8s-master01:~/istio-in-practise/Traffic-Management-Basics/kiali-port-80# kubectl get vs -n istio-system 
    NAME                   GATEWAYS            HOSTS               AGE
    kiali-virtualservice   ["kiali-gateway"]   ["kiali.ik8s.cc"]   33s
    root@k8s-master01:~/istio-in-practise/Traffic-Management-Basics/kiali-port-80# kubectl get dr -n istio-system 
    NAME    HOST    AGE
    kiali   kiali   38s
    root@k8s-master01:~/istio-in-practise/Traffic-Management-Basics/kiali-port-80#

      通过集群外部客户端的hosts文件将kiali.ik8s.cc解析至istio-ingressgateway外部地址

      提示:我这里是一台win11的客户端,修改C:\Windows\System32\drivers\etc\hosts文件来实现解析;

      测试,用浏览器访问kiali.ik8s.cc看看对应是否能够访问到kiali服务呢?

      提示:可以看到我们现在就把集群内部kiali服务通过gateway、virtualservice、destinationrule这三种资源的创建将其暴露给ingresgateway的外部地址上;对于其他服务我们也可以采用类似的逻辑将其暴露出来;这里建议kiali不要直接暴露给集群外部客户端访问,因为kiali没有认证,但它又具有管理istio的功能;

      部署bookinfo

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    root@k8s-master01:/usr/local/istio# kubectl apply -f 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
    root@k8s-master01:/usr/local/istio#

      提示:我们安装istio以后,bookinfo的部署清单就在istio/samples/bookinfo/platform/kube/目录下;该部署清单会在default名称空间将bookinfo需要的pod运行起来,并创建相应的svc资源;

      验证:查看default名称空间下的pod和svc资源,看看对应pod和svc是否正常创建?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    root@k8s-master01:/usr/local/istio# kubectl get pods
    NAME                             READY   STATUS    RESTARTS   AGE
    details-v1-6997d94bb9-4jssp      2/2     Running   0          2m56s
    productpage-v1-d4f8dfd97-z2pcz   2/2     Running   0          2m55s
    ratings-v1-b8f8fcf49-j8l44       2/2     Running   0          2m56s
    reviews-v1-5896f547f5-v2h92      2/2     Running   0          2m56s
    reviews-v2-5d99885bc9-dhjdk      2/2     Running   0          2m55s
    reviews-v3-589cb4d56c-rw6rw      2/2     Running   0          2m55s
    root@k8s-master01:/usr/local/istio# kubectl get svc
    NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
    details       ClusterIP   10.109.96.34            9080/TCP   3m2s
    kubernetes    ClusterIP   10.96.0.1               443/TCP    38h
    productpage   ClusterIP   10.101.76.112           9080/TCP   3m1s
    ratings       ClusterIP   10.97.209.163           9080/TCP   3m2s
    reviews       ClusterIP   10.108.1.117            9080/TCP   3m2s
    root@k8s-master01:/usr/local/istio#

      提示:可以看到default名称空间下跑了几个pod,每个pod内部都有两个容器,其中一个是bookinfo程序的主容器,一个是istio注入的sidecar;bookinfo的访问入口是productpage;

      验证:查看istiod是否将配置下发给我们刚才部署的bookinfo中注入的sidecar配置?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    root@k8s-master01:/usr/local/istio# istioctl ps
    NAME                                                  CLUSTER        CDS        LDS        EDS        RDS          ECDS         ISTIOD                     VERSION
    details-v1-6997d94bb9-4jssp.default                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-65dcb8497-9skn9     1.17.1
    istio-egressgateway-774d6846df-fv97t.istio-system     Kubernetes     SYNCED     SYNCED     SYNCED     NOT SENT     NOT SENT     istiod-65dcb8497-9skn9     1.17.1
    istio-ingressgateway-69499dc-pdgld.istio-system       Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-65dcb8497-9skn9     1.17.1
    productpage-v1-d4f8dfd97-z2pcz.default                Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-65dcb8497-9skn9     1.17.1
    ratings-v1-b8f8fcf49-j8l44.default                    Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-65dcb8497-9skn9     1.17.1
    reviews-v1-5896f547f5-v2h92.default                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-65dcb8497-9skn9     1.17.1
    reviews-v2-5d99885bc9-dhjdk.default                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-65dcb8497-9skn9     1.17.1
    reviews-v3-589cb4d56c-rw6rw.default                   Kubernetes     SYNCED     SYNCED     SYNCED     SYNCED       NOT SENT     istiod-65dcb8497-9skn9     1.17.1
    root@k8s-master01:/usr/local/istio#

      提示:这里我们只需要关心cds、lds、eds、rds即可;显示synced表示对应配置已经下发;配置下发完成以后,对应服务就可以在集群内部访问了;

      验证:在集群内部部署一个客户端pod,访问productpage:9080看看对应bookinfo是否被访问到?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    root@k8s-master01:/usr/local/istio# kubectl apply -f samples/sleep/sleep.yaml
    serviceaccount/sleep created
    service/sleep created
    deployment.apps/sleep created
    root@k8s-master01:/usr/local/istio# kubectl get pods
    NAME                             READY   STATUS    RESTARTS   AGE
    details-v1-6997d94bb9-4jssp      2/2     Running   0          12m
    productpage-v1-d4f8dfd97-z2pcz   2/2     Running   0          12m
    ratings-v1-b8f8fcf49-j8l44       2/2     Running   0          12m
    reviews-v1-5896f547f5-v2h92      2/2     Running   0          12m
    reviews-v2-5d99885bc9-dhjdk      2/2     Running   0          12m
    reviews-v3-589cb4d56c-rw6rw      2/2     Running   0          12m
    sleep-bc9998558-vjc48            2/2     Running   0          50s
    root@k8s-master01:/usr/local/istio#

      进入sleep pod,访问productpage:9080看看是否能访问?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    root@k8s-master01:/usr/local/istio# kubectl exec -it sleep-bc9998558-vjc48 -- /bin/sh
    / $ cd
    ~ $ curl productpage:9080
      <head>
        Simple Bookstore App<</code><code class="bash plain">/title</code><code class="bash plain">></code></div><div class="line number8 index7 alt1"><code class="bash plain"><meta charset=</code><code class="bash string">"utf-8"</code><code class="bash plain">></code></div><div class="line number9 index8 alt2"><code class="bash plain"><meta http-equiv=</code><code class="bash string">"X-UA-Compatible"</code> <code class="bash plain">content=</code><code class="bash string">"IE=edge"</code><code class="bash plain">></code></div><div class="line number10 index9 alt1"><code class="bash plain"><meta name=</code><code class="bash string">"viewport"</code> <code class="bash plain">content=</code><code class="bash string">"width=device-width, initial-scale=1"</code><code class="bash plain">></code></div><div class="line number11 index10 alt2"> </div><div class="line number12 index11 alt1"><code class="bash plain"><!-- Latest compiled and minified CSS --></code></div><div class="line number13 index12 alt2"><code class="bash plain"><link rel=</code><code class="bash string">"stylesheet"</code> <code class="bash plain">href=</code><code class="bash string">"static/bootstrap/css/bootstrap.min.css"</code><code class="bash plain">></code></div><div class="line number14 index13 alt1"> </div><div class="line number15 index14 alt2"><code class="bash plain"><!-- Optional theme --></code></div><div class="line number16 index15 alt1"><code class="bash plain"><link rel=</code><code class="bash string">"stylesheet"</code> <code class="bash plain">href=</code><code class="bash string">"static/bootstrap/css/bootstrap-theme.min.css"</code><code class="bash plain">></code></div><div class="line number17 index16 alt2"> </div><div class="line number18 index17 alt1"><code class="bash spaces">  </code><code class="bash plain"><</code><code class="bash plain">/head</code><code class="bash plain">></code></div><div class="line number19 index18 alt2"><code class="bash spaces">  </code><code class="bash plain"><body></code></div><div class="line number20 index19 alt1"><code class="bash spaces">    </code> </div><div class="line number21 index20 alt2"><code class="bash spaces">    </code> </div><div class="line number22 index21 alt1"><code class="bash plain"><p></code></div><div class="line number23 index22 alt2"><code class="bash spaces">    </code><code class="bash plain"><h3>Hello! This is a simple bookstore application consisting of three services as shown below<</code><code class="bash plain">/h3</code><code class="bash plain">></code></div><div class="line number24 index23 alt1"><code class="bash plain"><</code><code class="bash plain">/p</code><code class="bash plain">></code></div><div class="line number25 index24 alt2"> </div><div class="line number26 index25 alt1"><code class="bash plain"><table class=</code><code class="bash string">"table table-condensed table-bordered table-hover"</code><code class="bash plain">><</code><code class="bash functions">tr</code><code class="bash plain">><th>name<</code><code class="bash plain">/th</code><code class="bash plain">><td>http:</code><code class="bash plain">//details</code><code class="bash plain">:9080<</code><code class="bash plain">/td</code><code class="bash plain">><</code><code class="bash plain">/tr</code><code class="bash plain">><</code><code class="bash functions">tr</code><code class="bash plain">><th>endpoint<</code><code class="bash plain">/th</code><code class="bash plain">><td>details<</code><code class="bash plain">/td</code><code class="bash plain">><</code><code class="bash plain">/tr</code><code class="bash plain">><</code><code class="bash functions">tr</code><code class="bash plain">><th>children<</code><code class="bash plain">/th</code><code class="bash plain">><td><table class=</code><code class="bash string">"table table-condensed table-bordered table-hover"</code><code class="bash plain">><</code><code class="bash functions">tr</code><code class="bash plain">><th>name<</code><code class="bash plain">/th</code><code class="bash plain">><th>endpoint<</code><code class="bash plain">/th</code><code class="bash plain">><th>children<</code><code class="bash plain">/th</code><code class="bash plain">><</code><code class="bash plain">/tr</code><code class="bash plain">><</code><code class="bash functions">tr</code><code class="bash plain">><td>http:</code><code class="bash plain">//details</code><code class="bash plain">:9080<</code><code class="bash plain">/td</code><code class="bash plain">><td>details<</code><code class="bash plain">/td</code><code class="bash plain">><td><</code><code class="bash plain">/td</code><code class="bash plain">><</code><code class="bash plain">/tr</code><code class="bash plain">><</code><code class="bash functions">tr</code><code class="bash plain">><td>http:</code><code class="bash plain">//reviews</code><code class="bash plain">:9080<</code><code class="bash plain">/td</code><code class="bash plain">><td>reviews<</code><code class="bash plain">/td</code><code class="bash plain">><td><table class=</code><code class="bash string">"table table-condensed table-bordered table-hover"</code><code class="bash plain">><</code><code class="bash functions">tr</code><code class="bash plain">><th>name<</code><code class="bash plain">/th</code><code class="bash plain">><th>endpoint<</code><code class="bash plain">/th</code><code class="bash plain">><th>children<</code><code class="bash plain">/th</code><code class="bash plain">><</code><code class="bash plain">/tr</code><code class="bash plain">><</code><code class="bash functions">tr</code><code class="bash plain">><td>http:</code><code class="bash plain">//ratings</code><code class="bash plain">:9080<</code><code class="bash plain">/td</code><code class="bash plain">><td>ratings<</code><code class="bash plain">/td</code><code class="bash plain">><td><</code><code class="bash plain">/td</code><code class="bash plain">><</code><code class="bash plain">/tr</code><code class="bash plain">><</code><code class="bash plain">/table</code><code class="bash plain">><</code><code class="bash plain">/td</code><code class="bash plain">><</code><code class="bash plain">/tr</code><code class="bash plain">><</code><code class="bash plain">/table</code><code class="bash plain">><</code><code class="bash plain">/td</code><code class="bash plain">><</code><code class="bash plain">/tr</code><code class="bash plain">><</code><code class="bash plain">/table</code><code class="bash plain">></code></div><div class="line number27 index26 alt2"> </div><div class="line number28 index27 alt1"><code class="bash plain"><p></code></div><div class="line number29 index28 alt2"><code class="bash spaces">    </code><code class="bash plain"><h4>Click on one of the links below to auto generate a request to the backend as a real user or a tester</code></div><div class="line number30 index29 alt1"><code class="bash spaces">    </code><code class="bash plain"><</code><code class="bash plain">/h4</code><code class="bash plain">></code></div><div class="line number31 index30 alt2"><code class="bash plain"><</code><code class="bash plain">/p</code><code class="bash plain">></code></div><div class="line number32 index31 alt1"><code class="bash plain"><p><a href=</code><code class="bash string">"/productpage?u=normal"</code><code class="bash plain">>Normal user<</code><code class="bash plain">/a</code><code class="bash plain">><</code><code class="bash plain">/p</code><code class="bash plain">></code></div><div class="line number33 index32 alt2"><code class="bash plain"><p><a href=</code><code class="bash string">"/productpage?u=test"</code><code class="bash plain">>Test user<</code><code class="bash plain">/a</code><code class="bash plain">><</code><code class="bash plain">/p</code><code class="bash plain">></code></div><div class="line number34 index33 alt1"> </div><div class="line number35 index34 alt2"> </div><div class="line number36 index35 alt1"><code class="bash spaces">    </code> </div><div class="line number37 index36 alt2"><code class="bash plain"><!-- Latest compiled and minified JavaScript --></code></div><div class="line number38 index37 alt1"><code class="bash plain"><script src=</code><code class="bash string">"static/jquery.min.js"</code><code class="bash plain">><</code><code class="bash plain">/script</code><code class="bash plain">></code></div><div class="line number39 index38 alt2"> </div><div class="line number40 index39 alt1"><code class="bash plain"><!-- Latest compiled and minified JavaScript --></code></div><div class="line number41 index40 alt2"><code class="bash plain"><script src=</code><code class="bash string">"static/bootstrap/js/bootstrap.min.js"</code><code class="bash plain">><</code><code class="bash plain">/script</code><code class="bash plain">></code></div><div class="line number42 index41 alt1"> </div><div class="line number43 index42 alt2"><code class="bash spaces">  </code><code class="bash plain"><</code><code class="bash plain">/body</code><code class="bash plain">></code></div><div class="line number44 index43 alt1"><code class="bash plain"><</code><code class="bash plain">/html</code><code class="bash plain">></code></div><div class="line number45 index44 alt2"><code class="bash plain">~ $ </code></div></div></td></tr></tbody></table></div></div> </div> <p>  提示:可以看到对应客户端pod能够正常访问productpage:9080;这里说一下我们在集群内部pod中用productpage来访问服务是可以正常被coredns解析到对应svc上进行响应的;</p> <p>  暴露bookinfo给集群外部客户端访问</p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_763468" class="syntaxhighlighter bash"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div><div class="line number34 index33 alt1">34</div><div class="line number35 index34 alt2">35</div><div class="line number36 index35 alt1">36</div><div class="line number37 index36 alt2">37</div><div class="line number38 index37 alt1">38</div><div class="line number39 index38 alt2">39</div><div class="line number40 index39 alt1">40</div><div class="line number41 index40 alt2">41</div><div class="line number42 index41 alt1">42</div><div class="line number43 index42 alt2">43</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">root@k8s-master01:~</code><code class="bash comments"># cat /usr/local/istio/samples/bookinfo/networking/bookinfo-gateway.yaml </code></div><div class="line number2 index1 alt1"><code class="bash plain">apiVersion: networking.istio.io</code><code class="bash plain">/v1alpha3</code></div><div class="line number3 index2 alt2"><code class="bash plain">kind: Gateway</code></div><div class="line number4 index3 alt1"><code class="bash plain">metadata:</code></div><div class="line number5 index4 alt2"><code class="bash spaces">  </code><code class="bash plain">name: bookinfo-gateway</code></div><div class="line number6 index5 alt1"><code class="bash plain">spec:</code></div><div class="line number7 index6 alt2"><code class="bash spaces">  </code><code class="bash plain">selector:</code></div><div class="line number8 index7 alt1"><code class="bash spaces">    </code><code class="bash plain">istio: ingressgateway </code><code class="bash comments"># use istio default controller</code></div><div class="line number9 index8 alt2"><code class="bash spaces">  </code><code class="bash plain">servers:</code></div><div class="line number10 index9 alt1"><code class="bash spaces">  </code><code class="bash plain">- port:</code></div><div class="line number11 index10 alt2"><code class="bash spaces">      </code><code class="bash plain">number: 80</code></div><div class="line number12 index11 alt1"><code class="bash spaces">      </code><code class="bash plain">name: http</code></div><div class="line number13 index12 alt2"><code class="bash spaces">      </code><code class="bash plain">protocol: HTTP</code></div><div class="line number14 index13 alt1"><code class="bash spaces">    </code><code class="bash plain">hosts:</code></div><div class="line number15 index14 alt2"><code class="bash spaces">    </code><code class="bash plain">- </code><code class="bash string">"*"</code></div><div class="line number16 index15 alt1"><code class="bash plain">---</code></div><div class="line number17 index16 alt2"><code class="bash plain">apiVersion: networking.istio.io</code><code class="bash plain">/v1alpha3</code></div><div class="line number18 index17 alt1"><code class="bash plain">kind: VirtualService</code></div><div class="line number19 index18 alt2"><code class="bash plain">metadata:</code></div><div class="line number20 index19 alt1"><code class="bash spaces">  </code><code class="bash plain">name: bookinfo</code></div><div class="line number21 index20 alt2"><code class="bash plain">spec:</code></div><div class="line number22 index21 alt1"><code class="bash spaces">  </code><code class="bash plain">hosts:</code></div><div class="line number23 index22 alt2"><code class="bash spaces">  </code><code class="bash plain">- </code><code class="bash string">"*"</code></div><div class="line number24 index23 alt1"><code class="bash spaces">  </code><code class="bash plain">gateways:</code></div><div class="line number25 index24 alt2"><code class="bash spaces">  </code><code class="bash plain">- bookinfo-gateway</code></div><div class="line number26 index25 alt1"><code class="bash spaces">  </code><code class="bash plain">http:</code></div><div class="line number27 index26 alt2"><code class="bash spaces">  </code><code class="bash plain">- match:</code></div><div class="line number28 index27 alt1"><code class="bash spaces">    </code><code class="bash plain">- uri:</code></div><div class="line number29 index28 alt2"><code class="bash spaces">        </code><code class="bash plain">exact: </code><code class="bash plain">/productpage</code></div><div class="line number30 index29 alt1"><code class="bash spaces">    </code><code class="bash plain">- uri:</code></div><div class="line number31 index30 alt2"><code class="bash spaces">        </code><code class="bash plain">prefix: </code><code class="bash plain">/static</code></div><div class="line number32 index31 alt1"><code class="bash spaces">    </code><code class="bash plain">- uri:</code></div><div class="line number33 index32 alt2"><code class="bash spaces">        </code><code class="bash plain">exact: </code><code class="bash plain">/login</code></div><div class="line number34 index33 alt1"><code class="bash spaces">    </code><code class="bash plain">- uri:</code></div><div class="line number35 index34 alt2"><code class="bash spaces">        </code><code class="bash plain">exact: </code><code class="bash plain">/logout</code></div><div class="line number36 index35 alt1"><code class="bash spaces">    </code><code class="bash plain">- uri:</code></div><div class="line number37 index36 alt2"><code class="bash spaces">        </code><code class="bash plain">prefix: </code><code class="bash plain">/api/v1/products</code></div><div class="line number38 index37 alt1"><code class="bash spaces">    </code><code class="bash plain">route:</code></div><div class="line number39 index38 alt2"><code class="bash spaces">    </code><code class="bash plain">- destination:</code></div><div class="line number40 index39 alt1"><code class="bash spaces">        </code><code class="bash plain">host: productpage</code></div><div class="line number41 index40 alt2"><code class="bash spaces">        </code><code class="bash plain">port:</code></div><div class="line number42 index41 alt1"><code class="bash spaces">          </code><code class="bash plain">number: 9080</code></div><div class="line number43 index42 alt2"><code class="bash plain">root@k8s-master01:~</code><code class="bash comments"># </code></div></div></td></tr></tbody></table></div></div> </div> <p>  提示:该清单将bookinfo通过关联ingressgateway的外部地址的80端口关联,所以我们访问ingressgateway的外部地址就可以访问到bookinfo;</p> <p>  应用清单</p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_91154" class="syntaxhighlighter bash"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">root@k8s-master01:~</code><code class="bash comments"># kubectl apply -f /usr/local/istio/samples/bookinfo/networking/bookinfo-gateway.yaml</code></div><div class="line number2 index1 alt1"><code class="bash plain">gateway.networking.istio.io</code><code class="bash plain">/bookinfo-gateway</code> <code class="bash plain">created</code></div><div class="line number3 index2 alt2"><code class="bash plain">virtualservice.networking.istio.io</code><code class="bash plain">/bookinfo</code> <code class="bash plain">created</code></div><div class="line number4 index3 alt1"><code class="bash plain">root@k8s-master01:~</code><code class="bash comments"># </code></div></div></td></tr></tbody></table></div></div> </div> <p>  验证:访问ingressgateway的外部地址,看看对应bookinfo是否能够被访问到?</p> <p><img src="https://1000bd.com/contentImg/2023/06/12/181103823.gif" alt="" loading="lazy" class="medium-zoom-image"></p> <p>  提示:可以看到现在我们在集群外部通过访问ingressgateway的外部地址就能正常访问到bookinfo,通过多次访问,还可以实现不同的效果;</p> <p>  模拟客户端访问bookinfo</p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_55081" class="syntaxhighlighter bash"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">root@k8s-node03:~</code><code class="bash comments"># while true ; do curl 192.168.0.252/productpage;sleep 0.$RANDOM;done</code></div></div></td></tr></tbody></table></div></div> </div> <p>  在kiali上查看绘图</p> <p><img src="https://1000bd.com/contentImg/2023/06/12/181040953.gif" alt="" loading="lazy" class="medium-zoom-image"></p> <p>  提示:我们在kiali上看到的图形,就是通过模拟客户端访问流量所形成的图形;该图形能够形象的展示对应服务流量的top,以及动态显示对应流量访问应用的比例;我们可以通过定义配置文件的方式,动态调整客户端能够访问到bookinfo那个版本;对应绘图也会通过采集到的指标数据动态将流量路径绘制出来;</p> <p>  通过bookinfo测试流量治理功能</p> <p>  创建destinationrule</p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_983668" class="syntaxhighlighter bash"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div><div class="line number23 index22 alt2">23</div><div class="line number24 index23 alt1">24</div><div class="line number25 index24 alt2">25</div><div class="line number26 index25 alt1">26</div><div class="line number27 index26 alt2">27</div><div class="line number28 index27 alt1">28</div><div class="line number29 index28 alt2">29</div><div class="line number30 index29 alt1">30</div><div class="line number31 index30 alt2">31</div><div class="line number32 index31 alt1">32</div><div class="line number33 index32 alt2">33</div><div class="line number34 index33 alt1">34</div><div class="line number35 index34 alt2">35</div><div class="line number36 index35 alt1">36</div><div class="line number37 index36 alt2">37</div><div class="line number38 index37 alt1">38</div><div class="line number39 index38 alt2">39</div><div class="line number40 index39 alt1">40</div><div class="line number41 index40 alt2">41</div><div class="line number42 index41 alt1">42</div><div class="line number43 index42 alt2">43</div><div class="line number44 index43 alt1">44</div><div class="line number45 index44 alt2">45</div><div class="line number46 index45 alt1">46</div><div class="line number47 index46 alt2">47</div><div class="line number48 index47 alt1">48</div><div class="line number49 index48 alt2">49</div><div class="line number50 index49 alt1">50</div><div class="line number51 index50 alt2">51</div><div class="line number52 index51 alt1">52</div><div class="line number53 index52 alt2">53</div><div class="line number54 index53 alt1">54</div><div class="line number55 index54 alt2">55</div><div class="line number56 index55 alt1">56</div><div class="line number57 index56 alt2">57</div><div class="line number58 index57 alt1">58</div><div class="line number59 index58 alt2">59</div><div class="line number60 index59 alt1">60</div><div class="line number61 index60 alt2">61</div><div class="line number62 index61 alt1">62</div><div class="line number63 index62 alt2">63</div><div class="line number64 index63 alt1">64</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">root@k8s-master01:</code><code class="bash plain">/usr/local/istio</code><code class="bash comments"># cat samples/bookinfo/networking/destination-rule-all.yaml</code></div><div class="line number2 index1 alt1"><code class="bash plain">apiVersion: networking.istio.io</code><code class="bash plain">/v1alpha3</code></div><div class="line number3 index2 alt2"><code class="bash plain">kind: DestinationRule</code></div><div class="line number4 index3 alt1"><code class="bash plain">metadata:</code></div><div class="line number5 index4 alt2"><code class="bash spaces">  </code><code class="bash plain">name: productpage</code></div><div class="line number6 index5 alt1"><code class="bash plain">spec:</code></div><div class="line number7 index6 alt2"><code class="bash spaces">  </code><code class="bash plain">host: productpage</code></div><div class="line number8 index7 alt1"><code class="bash spaces">  </code><code class="bash plain">subsets:</code></div><div class="line number9 index8 alt2"><code class="bash spaces">  </code><code class="bash plain">- name: v1</code></div><div class="line number10 index9 alt1"><code class="bash spaces">    </code><code class="bash plain">labels:</code></div><div class="line number11 index10 alt2"><code class="bash spaces">      </code><code class="bash plain">version: v1</code></div><div class="line number12 index11 alt1"><code class="bash plain">---</code></div><div class="line number13 index12 alt2"><code class="bash plain">apiVersion: networking.istio.io</code><code class="bash plain">/v1alpha3</code></div><div class="line number14 index13 alt1"><code class="bash plain">kind: DestinationRule</code></div><div class="line number15 index14 alt2"><code class="bash plain">metadata:</code></div><div class="line number16 index15 alt1"><code class="bash spaces">  </code><code class="bash plain">name: reviews</code></div><div class="line number17 index16 alt2"><code class="bash plain">spec:</code></div><div class="line number18 index17 alt1"><code class="bash spaces">  </code><code class="bash plain">host: reviews</code></div><div class="line number19 index18 alt2"><code class="bash spaces">  </code><code class="bash plain">subsets:</code></div><div class="line number20 index19 alt1"><code class="bash spaces">  </code><code class="bash plain">- name: v1</code></div><div class="line number21 index20 alt2"><code class="bash spaces">    </code><code class="bash plain">labels:</code></div><div class="line number22 index21 alt1"><code class="bash spaces">      </code><code class="bash plain">version: v1</code></div><div class="line number23 index22 alt2"><code class="bash spaces">  </code><code class="bash plain">- name: v2</code></div><div class="line number24 index23 alt1"><code class="bash spaces">    </code><code class="bash plain">labels:</code></div><div class="line number25 index24 alt2"><code class="bash spaces">      </code><code class="bash plain">version: v2</code></div><div class="line number26 index25 alt1"><code class="bash spaces">  </code><code class="bash plain">- name: v3</code></div><div class="line number27 index26 alt2"><code class="bash spaces">    </code><code class="bash plain">labels:</code></div><div class="line number28 index27 alt1"><code class="bash spaces">      </code><code class="bash plain">version: v3</code></div><div class="line number29 index28 alt2"><code class="bash plain">---</code></div><div class="line number30 index29 alt1"><code class="bash plain">apiVersion: networking.istio.io</code><code class="bash plain">/v1alpha3</code></div><div class="line number31 index30 alt2"><code class="bash plain">kind: DestinationRule</code></div><div class="line number32 index31 alt1"><code class="bash plain">metadata:</code></div><div class="line number33 index32 alt2"><code class="bash spaces">  </code><code class="bash plain">name: ratings</code></div><div class="line number34 index33 alt1"><code class="bash plain">spec:</code></div><div class="line number35 index34 alt2"><code class="bash spaces">  </code><code class="bash plain">host: ratings</code></div><div class="line number36 index35 alt1"><code class="bash spaces">  </code><code class="bash plain">subsets:</code></div><div class="line number37 index36 alt2"><code class="bash spaces">  </code><code class="bash plain">- name: v1</code></div><div class="line number38 index37 alt1"><code class="bash spaces">    </code><code class="bash plain">labels:</code></div><div class="line number39 index38 alt2"><code class="bash spaces">      </code><code class="bash plain">version: v1</code></div><div class="line number40 index39 alt1"><code class="bash spaces">  </code><code class="bash plain">- name: v2</code></div><div class="line number41 index40 alt2"><code class="bash spaces">    </code><code class="bash plain">labels:</code></div><div class="line number42 index41 alt1"><code class="bash spaces">      </code><code class="bash plain">version: v2</code></div><div class="line number43 index42 alt2"><code class="bash spaces">  </code><code class="bash plain">- name: v2-mysql</code></div><div class="line number44 index43 alt1"><code class="bash spaces">    </code><code class="bash plain">labels:</code></div><div class="line number45 index44 alt2"><code class="bash spaces">      </code><code class="bash plain">version: v2-mysql</code></div><div class="line number46 index45 alt1"><code class="bash spaces">  </code><code class="bash plain">- name: v2-mysql-vm</code></div><div class="line number47 index46 alt2"><code class="bash spaces">    </code><code class="bash plain">labels:</code></div><div class="line number48 index47 alt1"><code class="bash spaces">      </code><code class="bash plain">version: v2-mysql-vm</code></div><div class="line number49 index48 alt2"><code class="bash plain">---</code></div><div class="line number50 index49 alt1"><code class="bash plain">apiVersion: networking.istio.io</code><code class="bash plain">/v1alpha3</code></div><div class="line number51 index50 alt2"><code class="bash plain">kind: DestinationRule</code></div><div class="line number52 index51 alt1"><code class="bash plain">metadata:</code></div><div class="line number53 index52 alt2"><code class="bash spaces">  </code><code class="bash plain">name: details</code></div><div class="line number54 index53 alt1"><code class="bash plain">spec:</code></div><div class="line number55 index54 alt2"><code class="bash spaces">  </code><code class="bash plain">host: details</code></div><div class="line number56 index55 alt1"><code class="bash spaces">  </code><code class="bash plain">subsets:</code></div><div class="line number57 index56 alt2"><code class="bash spaces">  </code><code class="bash plain">- name: v1</code></div><div class="line number58 index57 alt1"><code class="bash spaces">    </code><code class="bash plain">labels:</code></div><div class="line number59 index58 alt2"><code class="bash spaces">      </code><code class="bash plain">version: v1</code></div><div class="line number60 index59 alt1"><code class="bash spaces">  </code><code class="bash plain">- name: v2</code></div><div class="line number61 index60 alt2"><code class="bash spaces">    </code><code class="bash plain">labels:</code></div><div class="line number62 index61 alt1"><code class="bash spaces">      </code><code class="bash plain">version: v2</code></div><div class="line number63 index62 alt2"><code class="bash plain">---</code></div><div class="line number64 index63 alt1"><code class="bash plain">root@k8s-master01:</code><code class="bash plain">/usr/local/istio</code><code class="bash comments"># </code></div></div></td></tr></tbody></table></div></div> </div> <p>  提示:上述清单主要定义了不同版本对应的服务的版本;</p> <p>  应用清单</p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_311175" class="syntaxhighlighter bash"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">root@k8s-master01:</code><code class="bash plain">/usr/local/istio</code><code class="bash comments"># kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml</code></div><div class="line number2 index1 alt1"><code class="bash plain">destinationrule.networking.istio.io</code><code class="bash plain">/productpage</code> <code class="bash plain">created</code></div><div class="line number3 index2 alt2"><code class="bash plain">destinationrule.networking.istio.io</code><code class="bash plain">/reviews</code> <code class="bash plain">created</code></div><div class="line number4 index3 alt1"><code class="bash plain">destinationrule.networking.istio.io</code><code class="bash plain">/ratings</code> <code class="bash plain">created</code></div><div class="line number5 index4 alt2"><code class="bash plain">destinationrule.networking.istio.io</code><code class="bash plain">/details</code> <code class="bash plain">created</code></div><div class="line number6 index5 alt1"><code class="bash plain">root@k8s-master01:</code><code class="bash plain">/usr/local/istio</code><code class="bash comments"># </code></div></div></td></tr></tbody></table></div></div> </div> <p>  将所有流量路由至v1版本</p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_861826" class="syntaxhighlighter bash"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">root@k8s-master01:</code><code class="bash plain">/usr/local/istio</code><code class="bash comments"># kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml</code></div><div class="line number2 index1 alt1"><code class="bash plain">virtualservice.networking.istio.io</code><code class="bash plain">/productpage</code> <code class="bash plain">created</code></div><div class="line number3 index2 alt2"><code class="bash plain">virtualservice.networking.istio.io</code><code class="bash plain">/reviews</code> <code class="bash plain">created</code></div><div class="line number4 index3 alt1"><code class="bash plain">virtualservice.networking.istio.io</code><code class="bash plain">/ratings</code> <code class="bash plain">created</code></div><div class="line number5 index4 alt2"><code class="bash plain">virtualservice.networking.istio.io</code><code class="bash plain">/details</code> <code class="bash plain">created</code></div><div class="line number6 index5 alt1"><code class="bash plain">root@k8s-master01:</code><code class="bash plain">/usr/local/istio</code><code class="bash comments"># </code></div></div></td></tr></tbody></table></div></div> </div> <p>  验证:在kiali上查看对应流量是否只有v1版本了?</p> <p><img src="https://1000bd.com/contentImg/2023/06/12/181044261.gif" alt="" loading="lazy" class="medium-zoom-image"></p> <p>  提示:可以看到现在kiali绘制的图里面就只有v1版本的流量,其他v2,v3版本流量就没有了;</p> <p>  通过客户端登陆身份标识来路由</p> <div class="cnblogs_Highlighter sh-gutter"> <div><div id="highlighter_287137" class="syntaxhighlighter bash"><div class="toolbar"><span><a href="#" class="toolbar_item command_help help">?</a></span></div><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div><div class="line number3 index2 alt2">3</div><div class="line number4 index3 alt1">4</div><div class="line number5 index4 alt2">5</div><div class="line number6 index5 alt1">6</div><div class="line number7 index6 alt2">7</div><div class="line number8 index7 alt1">8</div><div class="line number9 index8 alt2">9</div><div class="line number10 index9 alt1">10</div><div class="line number11 index10 alt2">11</div><div class="line number12 index11 alt1">12</div><div class="line number13 index12 alt2">13</div><div class="line number14 index13 alt1">14</div><div class="line number15 index14 alt2">15</div><div class="line number16 index15 alt1">16</div><div class="line number17 index16 alt2">17</div><div class="line number18 index17 alt1">18</div><div class="line number19 index18 alt2">19</div><div class="line number20 index19 alt1">20</div><div class="line number21 index20 alt2">21</div><div class="line number22 index21 alt1">22</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="bash plain">root@k8s-master01:</code><code class="bash plain">/usr/local/istio</code><code class="bash comments"># cat samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml</code></div><div class="line number2 index1 alt1"><code class="bash plain">apiVersion: networking.istio.io</code><code class="bash plain">/v1alpha3</code></div><div class="line number3 index2 alt2"><code class="bash plain">kind: VirtualService</code></div><div class="line number4 index3 alt1"><code class="bash plain">metadata:</code></div><div class="line number5 index4 alt2"><code class="bash spaces">  </code><code class="bash plain">name: reviews</code></div><div class="line number6 index5 alt1"><code class="bash plain">spec:</code></div><div class="line number7 index6 alt2"><code class="bash spaces">  </code><code class="bash plain">hosts:</code></div><div class="line number8 index7 alt1"><code class="bash spaces">    </code><code class="bash plain">- reviews</code></div><div class="line number9 index8 alt2"><code class="bash spaces">  </code><code class="bash plain">http:</code></div><div class="line number10 index9 alt1"><code class="bash spaces">  </code><code class="bash plain">- match:</code></div><div class="line number11 index10 alt2"><code class="bash spaces">    </code><code class="bash plain">- headers:</code></div><div class="line number12 index11 alt1"><code class="bash spaces">        </code><code class="bash plain">end-user:</code></div><div class="line number13 index12 alt2"><code class="bash spaces">          </code><code class="bash plain">exact: jason</code></div><div class="line number14 index13 alt1"><code class="bash spaces">    </code><code class="bash plain">route:</code></div><div class="line number15 index14 alt2"><code class="bash spaces">    </code><code class="bash plain">- destination:</code></div><div class="line number16 index15 alt1"><code class="bash spaces">        </code><code class="bash plain">host: reviews</code></div><div class="line number17 index16 alt2"><code class="bash spaces">        </code><code class="bash plain">subset: v2</code></div><div class="line number18 index17 alt1"><code class="bash spaces">  </code><code class="bash plain">- route:</code></div><div class="line number19 index18 alt2"><code class="bash spaces">    </code><code class="bash plain">- destination:</code></div><div class="line number20 index19 alt1"><code class="bash spaces">        </code><code class="bash plain">host: reviews</code></div><div class="line number21 index20 alt2"><code class="bash spaces">        </code><code class="bash plain">subset: v1</code></div><div class="line number22 index21 alt1"><code class="bash plain">root@k8s-master01:</code><code class="bash plain">/usr/local/istio</code><code class="bash comments"># </code></div></div></td></tr></tbody></table></div></div> </div> <p>  提示:上述清单定义了,登录用户名为jason,就响应v2版本;其他未登录的客户端还是以v1版本响应;</p> <p>  验证:应用配置清单,登录jason,看看是否是以v2版本响应?</p> <p><img src="https://1000bd.com/contentImg/2023/06/12/181047172.gif" alt="" loading="lazy" class="medium-zoom-image"></p> <p>  提示:可以看到我们应用了配置清单以后,对应模拟客户端访问的还是一直以v1的版本响应;我们登录jason用户以后,对应响应给我们的页面就是v2版本,退出jason用户又是以v1版本响应;</p> <p>  以上就是bookinfo在istio服务网格中,通过定义不同的配置,实现高级流量治理的效果;</p> </div> </div> </li> <li class="list-group-item ul-li"> <b>相关阅读:</b><br> <nobr> <a href="/Article/Index/941668">剑指offer 44. 从1到n整数中1出现的次数</a> <br /> <a href="/Article/Index/1410399">外包干了3个月,技术退步明显。。。。。</a> <br /> <a href="/Article/Index/863761">【AGC】如何使用认证服务与云数据库处理用户信息</a> <br /> <a href="/Article/Index/1377711">探秘Socks5代理在跨界电商、爬虫和游戏领域的应用</a> <br /> <a href="/Article/Index/1015682">AR远程协同能给企业带来哪些好处?广州华锐互动带你了解!</a> <br /> <a href="/Article/Index/1424877">代码随想录 Day38 完全背包问题 LeetCode T70 爬楼梯 T322 零钱兑换 T279 完全平方数</a> <br /> <a href="/Article/Index/1118794">Docker -- 01实践:使用Docker 快速安装Jenkins</a> <br /> <a href="/Article/Index/1333045">【随笔记】C++ condition_variable 陷阱</a> <br /> <a href="/Article/Index/1056031">SVN导入之后在本地没有创建svn控制文件,SVN如何提交文件</a> <br /> <a href="/Article/Index/1158093">【Linux】CentOS 7安装 MySQL</a> <br /> </nobr> </li> <li class="list-group-item from-a mb-2"> 原文地址:https://www.cnblogs.com/qiuhom-1874/p/17284069.html </li> </ul> </div> <div class="col-lg-4 col-sm-12"> <ul class="list-group" style="word-break:break-all;"> <li class="list-group-item ul-li-bg" aria-current="true"> 最新文章 </li> <li class="list-group-item ul-li"> <nobr> <a href="/Article/Index/1484446">攻防演习之三天拿下官网站群</a> <br /> <a href="/Article/Index/1515268">数据安全治理学习——前期安全规划和安全管理体系建设</a> <br /> <a href="/Article/Index/1759065">企业安全 | 企业内一次钓鱼演练准备过程</a> <br /> <a href="/Article/Index/1485036">内网渗透测试 | Kerberos协议及其部分攻击手法</a> <br /> <a href="/Article/Index/1877332">0day的产生 | 不懂代码的"代码审计"</a> <br /> <a href="/Article/Index/1887576">安装scrcpy-client模块av模块异常,环境问题解决方案</a> <br /> <a href="/Article/Index/1887578">leetcode hot100【LeetCode 279. 完全平方数】java实现</a> <br /> <a href="/Article/Index/1887512">OpenWrt下安装Mosquitto</a> <br /> <a href="/Article/Index/1887520">AnatoMask论文汇总</a> <br /> <a href="/Article/Index/1887496">【AI日记】24.11.01 LangChain、openai api和github copilot</a> <br /> </nobr> </li> </ul> <ul class="list-group pt-2" style="word-break:break-all;"> <li class="list-group-item ul-li-bg" aria-current="true"> 热门文章 </li> <li class="list-group-item ul-li"> <nobr> <a href="/Article/Index/888177">十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!</a> <br /> <a href="/Article/Index/797680">奉劝各位学弟学妹们,该打造你的技术影响力了!</a> <br /> <a href="/Article/Index/888183">五年了,我在 CSDN 的两个一百万。</a> <br /> <a href="/Article/Index/888179">Java俄罗斯方块,老程序员花了一个周末,连接中学年代!</a> <br /> <a href="/Article/Index/797730">面试官都震惊,你这网络基础可以啊!</a> <br /> <a href="/Article/Index/797725">你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法</a> <br /> <a href="/Article/Index/797702">心情不好的时候,用 Python 画棵樱花树送给自己吧</a> <br /> <a href="/Article/Index/797709">通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!</a> <br /> <a href="/Article/Index/797716">13 万字 C 语言从入门到精通保姆级教程2021 年版</a> <br /> <a href="/Article/Index/888192">10行代码集2000张美女图,Python爬虫120例,再上征途</a> <br /> </nobr> </li> </ul> </div> </div> </div> <!-- 主体 --> <!--body结束--> <!--这里是footer模板--> <!--footer--> <nav class="navbar navbar-inverse navbar-fixed-bottom"> <div class="container"> <div class="row"> <div class="col-md-12"> <div class="text-muted center foot-height"> Copyright © 2022 侵权请联系<a href="mailto:2656653265@qq.com">2656653265@qq.com</a>    <a href="https://beian.miit.gov.cn/" target="_blank">京ICP备2022015340号-1</a> </div> <div style="width:300px;margin:0 auto; padding:0px 5px;"> <a href="/regex.html">正则表达式工具</a> <a href="/cron.html">cron表达式工具</a> <a href="/pwdcreator.html">密码生成工具</a> </div> <div style="width:300px;margin:0 auto; padding:5px 0;"> <a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010502049817" style="display:inline-block;text-decoration:none;height:20px;line-height:20px;"> <img src="" style="float:left;" /><p style="float:left;height:20px;line-height:20px;margin: 0px 0px 0px 5px; color:#939393;">京公网安备 11010502049817号</p></a> </div> </div> </div> </div> </nav> <!--footer--> <!--footer模板结束--> <script src="/js/plugins/jquery/jquery.js"></script> <script src="/js/bootstrap.min.js"></script> <!--这里是scripts模板--> <!--scripts模板结束--> </body> </html>