一、下载istio
1、下载
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.6.8 TARGET_ARCH=x86_64 sh -
2、包目录结构:
Istio 包目录包含:
-
samples/
目录下的示例应用程序 -
bin/
目录下的客户端二进制文件
3、将 istioctl 客户端加入搜索路径(Linux or macOS):
$ export PATH=$PWD/bin:$PATH
或 软连接
二、安装Istio
1、安装
$ istioctl install --set profile=demo -y
✔ Istio core installed
✔ Istiod installed
✔ Egress gateways installed
✔ Ingress gateways installed
✔ Installation complete
$ kubectl get pod -n istio-system
NAME READY STATUS RESTARTS AGE
grafana-7647cf9c74-dx2m6 1/1 Running 0 10m
istio-egressgateway-d5c657bd7-lqp7p 1/1 Running 0 10m
istio-ingressgateway-79d496c968-szkvt 1/1 Running 0 10m
istio-tracing-7fcc6f5848-h6p85 1/1 Running 0 10m
istiod-fc75f6c-dncpf 1/1 Running 0 10m
kiali-7f575d9c4c-lfqwg 1/1 Running 0 10m
prometheus-5b8fdb884f-6k8nm 2/2 Running 0 10m
2、命名空间添加标签
给命名空间添加标签,指示 Istio 在部署应用的时候,自动注入 Envoy 边车代理:
$ kubectl label namespace default istio-injection=enabled
namespace/default labeled
$ kubectl describe ns default
Name: default
Labels: istio-injection=enabled
Annotations:
Status: Active
No resource quota.
No LimitRange resource.
三、部署示例应用
1、部署 Bookinfo
示例应用:
$ 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
2、案例应用pod、service部署状态
应用很快会启动起来。当每个 Pod 准备就绪时,Istio 边车代理将伴随它们一起部署。
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
details ClusterIP 10.0.0.212 9080/TCP 29s
kubernetes ClusterIP 10.0.0.1 443/TCP 25m
productpage ClusterIP 10.0.0.57 9080/TCP 28s
ratings ClusterIP 10.0.0.33 9080/TCP 29s
reviews ClusterIP 10.0.0.28 9080/TCP 29s
和
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
details-v1-558b8b4b76-2llld 2/2 Running 0 2m41s
productpage-v1-6987489c74-lpkgl 2/2 Running 0 2m40s
ratings-v1-7dc98c7588-vzftc 2/2 Running 0 2m41s
reviews-v1-7f99cc4496-gdxfn 2/2 Running 0 2m41s
reviews-v2-7d79d5bd5d-8zzqd 2/2 Running 0 2m41s
reviews-v3-7dbcdcbc56-m8dph 2/2 Running 0 2m41s
3、验证案例部署
确认上面的操作都正确之后,运行下面命令,通过检查返回的页面标题,来验证应用是否已在集群中运行,并已提供网页服务
$ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')" -c ratings -- curl -s productpage:9080/productpage | grep -o ".* "
Simple Bookstore App
四、对外开放应用程序
1、把应用关联到 Istio 网关:
$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created
2、确保配置文件没有问题:
$ istioctl analyze
✔ No validation issues found when analyzing namespace: default.
五、确定入站 IP 和端口
1、存在外部的负载均衡
$ kubectl get svc istio-ingressgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 172.21.109.129 130.211.10.121 80:31380/TCP,443:31390/TCP,31400:31400/TCP 17h
此时外部访问地址:
http://130.211.10.121/productpage
https://130.211.10.121/productpage
设置 EXTERNAL-IP
的值之后, 您的环境就有了一个外部的负载均衡,可以用它做入站网关。 但如果 EXTERNAL-IP
的值为
(或者一直是
状态), 则您的环境则没有提供可作为入站流量网关的外部负载均衡。 在这个情况下,您还可以用服务(Service)的节点端口访问网关。
2、没有外部负载均衡
设置入站的端口:
http 端口:
$ kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}'
30780
https端口:
$ kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}'
30593
节点IP:
$ kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}'
10.2.110.134
此时外部访问地址:
http://10.2.110.134:30780/productpage
https://10.2.110.134:30593/productpage
六、查看仪表板
Istio 和几个遥测应用做了集成。 遥测能帮您了解服务网格的结构、展示网络的拓扑结构、分析网格的健康状态。
使用下面说明部署 Kiali 仪表板、 以及 Prometheus、 Grafana、 还有 Jaeger
1、安装 Kiali 和其他插件,等待部署完成
$ kubectl apply -f samples/addons
$ kubectl rollout status deployment/kiali -n istio-system
Waiting for deployment "kiali" rollout to finish: 0 of 1 updated replicas are available...
deployment "kiali" successfully rolled out
2、访问 Kiali 仪表板
$ istioctl dashboard kiali
http://localhost:32031/kiali
3、在左侧的导航菜单,选择 Graph ,然后在 Namespace 下拉列表中,选择 default 。
Kiali 仪表板展示了网格的概览、以及 Bookinfo 示例应用的各个服务之间的关系。 它还提供过滤器来可视化流量的流动。