所有步骤都是从官网例子整理出来的:
https://istio.io/latest/zh/docs/tasks/observability/logs/access-log/

安装istio

先下载istio

安装多个版本的istiod有问题么_linux


然后转到 Istio 包目录

安装多个版本的istiod有问题么_运维_02


安装多个版本的istiod有问题么_安装多个版本的istiod有问题么_03


将 istioctl 客户端加入搜索路径

安装多个版本的istiod有问题么_kubernetes_04


使用istioctl进行安装(这里采用的是 demo 配置组合)

$ istioctl install --set profile=demo –y

安装多个版本的istiod有问题么_运维_05


给命名空间添加标签

$ kubectl label namespace default istio-injection=enabled

安装多个版本的istiod有问题么_json_06

部署示例应用

部署官网bookinfo的例子

$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml

yml文件
https://raw.githubusercontent.com/istio/istio/release-1.12/samples/bookinfo/platform/kube/bookinfo.yaml

查看pod和service,都有了

安装多个版本的istiod有问题么_kubernetes_07

检查并返回页面标题

$ kubectl exec "$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')"  -c ratings -- curl -s productpage:9080/productpage | grep -o “<title>.*</title>”

这里bash脚本比较长,拆分来看:

$ kubectl exec (执行容器)
"$(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}')"-c ratings (容器名)
-- curl -s productpage:9080/productpage | grep -o “<title>.*</title>”(bash)

执行结果如下

安装多个版本的istiod有问题么_运维_08

该脚本用于验证应用是否已在集群中运行,并已提供网页服务

对外开放应用程序

创建 Istio 入站网关(Ingress Gateway), 它会在网格边缘把一个路径映射到路由
1.把应用关联到 Istio 网关:

$ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

yml文件:
https://raw.githubusercontent.com/istio/istio/release-1.12/samples/bookinfo/networking/bookinfo-gateway.yaml

安装多个版本的istiod有问题么_json_09


2.确保配置文件没有问题:

$ istioctl analyze

安装多个版本的istiod有问题么_linux_10

确定入站 IP 和端口

判断你的 Kubernetes 集群环境是否支持外部负载均衡:

$ kubectl get svc istio-ingressgateway -n istio-system

安装多个版本的istiod有问题么_linux_11


如果 EXTERNAL-IP 的值为 (或者一直是 状态), 则你的环境则没有提供可作为入站流量网关的外部负载均衡。 在这个情况下,你还可以用服务(Service)的 节点端口( NodePort) 访问网关。

设置入站 IP 地址和端口

$ export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')

有些环境需要使用主机名访问

$ export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')

然后是其他平台的环境配置:

安装多个版本的istiod有问题么_运维_12

验证外部访问

1.设置环境变量 GATEWAY_URL:

$ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT

2.确保 IP 地址和端口均成功的赋值给了环境变量:

$ echo "$GATEWAY_URL"

192.168.99.100:32194(这是例子返回的url,具体看本机)
3.获取该应用

$ echo "http://$GATEWAY_URL/productpage"

查看Kiali仪表板

Istio和几个遥测应用做了集成。 遥测能帮你了解服务网格的结构、展示网络的拓扑结构、分析网格的健康状态。
仪表板包括Kiali 、 Prometheus、 Grafana、 还有 Jaeger,例子里使用Kiali

1.安装 Kiali 和其他插件,等待部署完成。

$ kubectl apply -f samples/addons
$ kubectl rollout status deployment/kiali -n istio-system

2.访问 Kiali 仪表板。

$ istioctl dashboard kiali

安装多个版本的istiod有问题么_json_13

在左侧的导航菜单,选择 Graph ,然后在 Namespace 下拉列表中,选择 default 。
Kiali 仪表板展示了网格的概览、以及 Bookinfo 示例应用的各个服务之间的关系。 它还提供过滤器来可视化流量的流动。