1. 简介

istio主要解决原生k8s三个问题,流量管控、安全性、可观测性。
要想使用istio:
非网格里的设备的流量需要进入到网格里去必须要经过istio-ingress-gw
网格里的数据要进入到非网格里要经过istio-egress-gw

1.1 主要能用到的资源类型

Gateway
VirtualService
DestinationRule
ServiceEntry

PeerAuthentication
AuthorizationPolicy
RequestAuthentication

1.2 istio架构图

1.3 pilot

Discovery Services:pilot-discovery,扮演服务注册中心、istio控制面到envoy之间的桥梁作用:
1)监控服务注册中心(例如:k8s)的服务注册情况。k8s下会监控service、endpoint、pod、node等资源信息。
2)监控istio控制面信息变化,在k8s下,会监控routerule、virtualservice、Gateway、EgressRule、ServiceEntry等以k8s CRD形式存在的istio控制面配置信息。
3)将1)和2)的两类信息合并组合为envoy可以理解的xds配置信息,以gRPC协议提供给envoyAgent: pilot-agent,生成envoy配置文件,管理envoy生命周期:
1)生成envoy的配置
2)启动envoy
3) 监控和管理envoy的运行情况。

Citadel:
Istio的核心安全组件,负责服务的密钥和数字证书管理,用于提供自动生成、分发、轮换及撤销密钥和数据证书的功能。
Galley:
负责向Istio的其它组件提供支撑功能,可以理解为Istio的配置中心,它用于校验进入网络配置信息的格式内容正确性,并将这些配置信息提供给Pilot

1.4 istio注入

不管是哪个k8s命名空间,或者是非kubernetes集群里的主机,只要被istio注入了,那么就在一个网络平面里了。

2. 安装istio

2.1 安装istioctl

解压

1
tar xf istio-1.14.1-linux-amd64.tar.gz

客户端工具

1
cp bin/istioctl /usr/local/bin/

添加环境变量

1
source <(istioctl completion bash)

2.2 安装卸载

查看可用的profile

1
istioctl profile list

安装demo

1
istioctl install --set profile=demo

卸载

1
istioctl x uninstall --purge

3. 注入

3.1 手动注入

1
istioctl kube-inject -f pod1.yaml | kubectl apply -f -

pod中会自动添加一个sidecar容器

3.2 自动注入

以名称空间为最小单位,添加istio标签

1
kubectl label ns ns1 istio-injection=enabled

4. 安装观测工具

安装kiali

1
kubectl apply -f kiali.yaml