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
- 当每个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
- 校验所有的工作是否正常
[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和端口号
- 查看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
- 在浏览器中访问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 资源类型。✔ 表示配置有效;!表示告警