02、istio部署到k8s中

一、下载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

1666607215(1).png

六、查看仪表板

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 示例应用的各个服务之间的关系。 它还提供过滤器来可视化流量的流动。


企业微信截图_16666069806695.png

你可能感兴趣的:(02、istio部署到k8s中)