Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18633
  • 博文数量: 7
  • 博客积分: 90
  • 博客等级: 民兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-06 15:59
个人简介

苦力强,IBM苦力强

文章分类

全部博文(7)

文章存档

2020年(4)

2016年(1)

2015年(1)

2014年(1)

我的朋友

分类: LINUX

2020-05-14 18:34:20

istio 实战 一 Kubernetes 中快速搭建 istio
istio 实战 二 bookinfo 部署
istio 实战 三 智能路由
istio 实战 四 权重路由以及监控
istio 实战 五 网格可视化 - kiali
istio 实战 六 全链路监控 - Jaeger


istio 组件
数据面
envoy
控制面板
Pilot:服务发现、流量管理
Mixer:访问控制、遥测
Citadel:终端用户认证、流量加密
istio 管理基础概念
Gateway: 类似于k8s ingress, HTTP/TCP 流量配置负载均衡器,流量入口
VirtualService: 定义路由规则,控制流量路由到服务上的各种行为
DestinationRule: 在 VirtualService 路由生效后,配置应用与请求的策略集
ServiceEntry: 网格内部请求外部服务的策略

二 bookinfo 部署



操作步骤
在使用 kubectl apply 进行应用部署的时候,如果目标命名空间已经打上了标签 istio-injection=enabled,Istio sidecar injector 会自动把 Envoy 容器注入到你的应用 Pod 之中。


创建命名空间
kubectl create ns bookinfo


添加label
添加 label:
kubectl label ns bookinfo istio-injection=enabled


查看 label:
kubectl describe ns bookinfo
Name:         bookinfo
Labels:       istio-injection=enabled
Annotations: 
Status:       Active
No resource quota.
No resource limits.


部署 bookinfo
部署:
 kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -n bookinfo


获取 pod:
kubectl get pod -n bookinfo
NAME                             READY   STATUS    RESTARTS   AGE
details-v1-c5b5f496d-7c6sc       2/2     Running   0          29m
productpage-v1-c7765c886-5j2mr   2/2     Running   0          29m
ratings-v1-f745cf57b-lr5js       2/2     Running   0          29m
reviews-v1-75b979578c-xwv7r      2/2     Running   0          29m
reviews-v2-597bf96c8f-gmtc5      2/2     Running   0          29m
reviews-v3-54c6c64795-xcpz9      2/2     Running   0          29m

确认app是否正常:
kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o " .* "


确认集群是否支持 负载均衡
执行以下命令以确定您的 Kubernetes 集群是否在支持外部负载均衡器的环境中运行;


kubectl get svc istio-ingressgateway -n istio-system
如果 EXTERNAL-IP 有值(IP 地址或主机名),则说明您的环境具有可用于 Ingress 网关的外部负载均衡器。如果 EXTERNAL-IP 值是 (或一直是 ),则说明可能您的环境并没有为 Ingress 网关提供外部负载均衡器的功能。在这种情况下,您可以使用 Service 的 node port 方式访问网关


由于使测试环境用的本地k8s集群肯定不支持,本次使用nodeport 方式访问网关,在公有云部署的可以忽略此步骤


设置 istio-ingressgateway service 为 node port
修改 service type
 kubectl patch service istio-ingressgateway -n istio-system -p '{"spec":{"type":"NodePort"}}'  


查看service:
kubectl get svc istio-ingressgateway -n istio-system
NAME                   TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)      AGE 
istio-ingressgateway   NodePort   10.110.171.111           
15020:32681/TCP,80:31380/TCP,443:31390/TCP,31400:31400/TCP,15029:30352/TCP,15030:3133
8/TCP,15031:31328/TCP,15032:30977/TCP,15443:31688/TCP   23m  


部署 istio gateway
部署:
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml -n bookinfo


查看 gateway:
kubectl get gateway -n bookinfo
NAME               AGE
bookinfo-gateway   46s


设置 INGRESS_PORT:
 export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o  
jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')


确认 port
 echo $INGRESS_PORT
 31380


应用缺省目标规则
kubectl apply -f samples/bookinfo/networking/destination-rule-all-mtls.yaml -n bookinfo
测试
浏览器访问



四 权重路由以及监控


1. 检测 prometheus
kubectl -n istio-system get svc prometheus
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
prometheus   ClusterIP   10.111.73.248           9090/TCP   23h


2. 检测 Grafana
kubectl -n istio-system get svc grafana
NAME      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
grafana   ClusterIP   10.106.87.165           3000/TCP   23h


3. 添加端口
由于使用的是ClusterIP 类型集群外部无法访问 ,通过端口转发映射本地端口到指定的应用端口.
kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=grafana -o jsonpath='{.items[0].metadata.name}') 3000:3000 --address 172.19.16.14 &
在 Web 浏览器中访问
查看 Istio 仪表盘


五 网格可视化 - kiali


安装istio时候内置了kiali
注意: 因为没有负载均衡器,下面的操作步骤都基于nodeport的模式,公有云部署并且有lb的忽略。
之前已经做过的可以省略 第 2 步。

1. 检测服务是否正常
kubectl -n istio-system get svc kiali
NAME    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)     AGE
kiali   ClusterIP   10.110.143.163           20001/TCP   25h


2. 设置INGRESS_HOST
设置INGRESS_PORT:
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')


设置 INGRESS_HOST:
export INGRESS_HOST=127.0.0.1


设置GATEWAY_URL:
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT


3. 映射 kiali pod 端口
kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=kiali -o jsonpath='{.items[0].metadata.name}') 20001:20001 --address 172.19.16.14 &


4. 持续发送请求
如果系统中安装了 watch 命令,就可以用它来持续发送请求


watch -n 1 curl -o /dev/null -s -w %{http_code} $GATEWAY_URL/productpage


5. 测试
浏览器打开kiali地址


截图能看到整体的微服务结构、请求的流量等。
kiali 还有很多强大功能


可视化配置istio config virtualservice、destination 等规则
可视化日志查看
资源监控
service、pod application 等监控
等等 有兴趣的可以自己研究kiali

1. 安装jaeger
kubectl create -f -n istio-system
1
2. 如要配置到追踪仪表盘的访问,请使用端口转发
kubectl -n istio-system port-forward $(kubectl -n istio-system get pod -l app=jaeger -o jsonpath='{.items[0].metadata.name}') 16686:16686 &



阅读(146) | 评论(0) | 转发(0) |
0

上一篇:一张照片

下一篇:没有了

给主人留下些什么吧!~~