2.istio介绍及安装
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 |
