04部署案例应用bookinfo

本文详细介绍了如何在Kubernetes环境中部署Istio服务网格的Bookinfo示例应用,并设置外部访问。首先启用Istio注入,然后部署Bookinfo的各个服务和Sidecar。接着,创建Istio Ingress网关以允许外部访问,并调整为NodePort类型。最后,访问产品页面验证部署成功,并展示了通过Kiali仪表板查看服务网格的结构和健康状况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 部署案例应用
  1. 部署Bookinfo的案例应用
[root@master ~]# kubectl label namespace default istio-injection=enabled
[root@master ~]# kubectl apply -f istio-1.6.2/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
  1. 当每个pod准备就绪后,Istio sidecar也会随之展开。
[root@master ~]# kubectl get pod
NAME        READY   STATUS    RESTARTS   AGE
details-v1-6c9f8bcbcb-s7gwv       2/2     Running   0          114s
productpage-v1-7df7cb7f86-9prcw   2/2     Running   0          113s
ratings-v1-65cff55fb8-97hw7       2/2     Running   0          114s
reviews-v1-7bccdbbf96-2gsxb       2/2     Running   0          113s
reviews-v2-7c9685df46-bmcnr       2/2     Running   0          114s
reviews-v3-58fc46b64-pnngc        2/2     Running   0          114s

[root@master ~]# kubectl get service
NAME           TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
details        ClusterIP   10.99.77.113     <none>        9080/TCP   2m31s
productpage    ClusterIP   10.100.18.93     <none>        9080/TCP   2m30s
ratings        ClusterIP   10.102.25.106    <none>        9080/TCP   2m30s
reviews        ClusterIP   10.106.117.244   <none>        9080/TCP   2m30s
  1. 校验所有的工作是否正常
[root@master ~]# kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>"
<title>Simple Bookstore App</title>     //Simple Bookstore 部署成功
2. 打开应用给外面访问

Bookinfo应用程序已部署,但不能从外部访问。要使其可访问,您需要创建一个Istio Ingress网关,它将路径映射到网格边缘的一个路由,

[root@master ~]# kubectl apply -f istio-1.6.2/samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created
[root@master ~]# cat istio-1.6.2/samples/bookinfo/networking/bookinfo-gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo
spec:
  hosts:
  - "*"
  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

查看创建的gateway

[root@master ~]# kubectl get gateway
NAME               AGE
bookinfo-gateway   96s
3. 确定ingress的IP和端口号
  1. 查看Ingress-gateway服务的IP和端口
[root@master ~]#  kubectl get svc istio-ingressgateway -n istio-system
NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                      AGE
istio-ingressgateway   LoadBalancer   10.102.10.254   <pending>     15020:32131/TCP,80:30131/TCP,443:32193/TCP,31400:30254/TCP,15443:31808/TCP   14m

这里的svc是pending状态,type是LoadBalancer。因为是本地搭建,需要改为NodePort

[root@master ~]#  kubectl edit svc istio-ingressgateway -n istio-system
service/istio-ingressgateway edited
[root@master ~]#  kubectl get svc istio-ingressgateway -n istio-system
NAME                   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                      AGE
istio-ingressgateway   NodePort   10.102.10.254   <none>        15020:32131/TCP,80:30131/TCP,443:32193/TCP,31400:30254/TCP,15443:31808/TCP   18m
  1. 在浏览器中访问http://192.168.1.11:30131/productpage。这里的页面有2个v1(无星星),v2(黑色星星),v3(红色星星)一共四个微服务。星星的颜色在后面的实验中可以判断出来。这里做提示

在这里插入图片描述

4. 在Dashboard中查看安装的应用

Istio通过演示安装安装了几个可选的仪表板。Kiali仪表板通过显示拓扑并指示网格的健康状况,帮助您了解服务网格的结构。

kiali 是一款 istio 服务网格可视化工具,提供了服务拓补图、全链路跟踪、指标遥测、配置校验、健康检查等功能。

[root@master ~]# kubectl edit svc kiali -n istio-system     /修改kiali的服务,类型为NodePort

使用浏览器访问http://192.168.1.11:30697/kiali/ 用户名和密码均为admin
在这里插入图片描述
Overview(概观)
展示所有命名空间下服务的流量(traffic)、配置状态(config status)、健康状态(✔)、应用数量(Applications)等。

在这里插入图片描述
Application(应用维度) applications 指运行中的应用,kiali 独有概念。在这里插入图片描述
kiali 中的负载(workloads)跟 k8s 中的资源对应(比如 deployment、Job、Daemonset、Statefulset 等)。k8s 中的这些资源都可以在 kiali 中检测到,不管这些资源有没有加入到 istio 服务网格中。

在这里插入图片描述
Istio Config(配置维度)相关配置类信息在这里插入图片描述
Services(服务维度)对应 k8s 的 service 资源类型。✔ 表示配置有效;!表示告警
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值