[DAY22]Istio实作篇-Bookinfo

Bookinfo可以在sample这个folder里面找到,官方是使用这个专案demo istio的功能特性,那我也来手把手跟着做做看

Bookinfo 由四个微服务组成:

  • productpage : 用来生成页面 detailsreviews
  • details : 书籍的资讯
  • reviews : 书籍相关的评论。 它还会呼叫ratings
  • ratings : 书籍评价组成的评级资讯。

reviews有三个版本

  • reviews v1 版本不会呼叫ratigs服务
  • reviews v2 版本会呼叫ratigs服务,并使用 1 到 5 个黑色星形图示来显示评分
  • reviews v3 版本会呼叫ratigs服务,并使用 1 到 5 个红色星形图示来显示评分

Bookinfo架构图

没透过istio来进行服务间的沟通时,变成服务本身要自行与对应的服务进行沟通

图片来源
使用istio时,每个服务间都是透过istio进行沟通

图片来源

istio-injection

Bookinfo服务装在namespace: default上面,所以要先进行istio-injection,使用sidecar的方式把istio注入pod里

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

部署samples里面的bookinfo.yaml档

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

确定一下pod是否有正常启动,这边有node资源最低的要求,4g ram感觉不太够,会遇到pod因为资源不足无法启动,所以我这边的spec是4c8g

kubectl get pods -n default
NAME                              READY   STATUS    RESTARTS   AGE
details-v1-79f774bdb9-259mt       2/2     Running   0          53s
productpage-v1-6b746f74dc-z2d6k   2/2     Running   0          53s
ratings-v1-b6994bb9-pczcp         2/2     Running   0          53s
reviews-v1-545db77b95-qqgp4       2/2     Running   0          53s
reviews-v2-7bf8c9648f-8ff5x       2/2     Running   0          53s
reviews-v3-84779c7bbc-g6jgf       2/2     Running   0          53s

确认istio是否有透过sidecar执行,看到有istio-init跟istio-proxy的container在执行就没错啦~~
https://ithelp.ithome.com.tw/upload/images/20210929/20129515Hqp4v2huX9.png

测试一下是否一切都正常

kubectl exec -ti ratings-v1-b6994bb9-pczcp -- /bin/bash
node@ratings-v1-b6994bb9-pczcp:/opt/microservices$ curl productpage:9080/productpage

如果有下面的资讯就一切都正常啦

<!DOCTYPE html>
<html>
  <head>
    <title>Simple Bookstore App</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
....

让外部可以存取cluster服务 By Istio-Ingress

kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created

来看看bookinfo-gateway.yaml做什麽

apiVersion: networking.istio.io/v1alpha3
kind: Gateway #建立一个Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers: 
  - port:
      number: 80 # 使用80port
      name: http
      protocol: HTTP
    hosts: 这边是没指定host name
    - "*" 
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService 建立virtual service
metadata:
  name: bookinfo
spec:
  hosts:  # 当host是*时,会根据path不同导到productpage
  - "*"
  gateways:
  - bookinfo-gateway
  http:
  - match:
    - uri:
        exact: /productpage
    - uri:
        prefix: /static
    - uri:
        exact: /login
    - uri:
        exact: /logout
    - uri:
        prefix: /api/v1/products
    route:
    - destination:
        host: productpage
        port:
          number: 9080

因为这边我是部署到gcp上面,所以有一组外部ip,开启http://[external_ip]/productpage後会看到部署的bookinfo网页
https://ithelp.ithome.com.tw/upload/images/20210929/20129515P9XvEPIvC0.png

下一篇来讲讲上面提到的一个东西VirtualService


<<:  Day 30:Google Map 结合口罩资料 & 铁人赛最後一天

>>:  Day 16 实作个资隐私盘点

[DAY 25] 估计学生战力

如同前几天所说 「估计战力」是可以依照想看的不同能力去做的 例如我们把题目先依照章节进行分类 再去看...

JavaScript入门 Day24_物件1

今天要讲物件这种资料型态,那他是什麽呢? 他就是可以存放很多的资料,有各种的key、value ke...

有时差的我如何跟团队协作

由於目前人在美东,与台湾的时差刚好 12hr,完全可以说出:「当我在睡觉时,台湾的大家都还在认真工作...

[从0到1] C#小乳牛 练成基础程序逻辑 Day 25 - String操纵术II

分拆Split() 添加Insert() | 长度Length() 指标位置IndexOf() |...

Windows 10 KB5006670 更新导致电脑连接已安装的网络印表机,显示“0x00000709错误”

这几天公司连接网路印表机的电脑报出"0x00000709"无法使用错误 目前爬文...