虽然k8s有部分微服务治理功能,但不全面,使用起来也不是很方便。目前主流的微服务框架有springcloud、istio、dubbo等等。Istio是服务网格思想的实现。
· istio适用于容器或虚拟机环境(特别是 k8s),兼容异构架构。
· istio使用 sidecar(边车模式)代理服务的网络,不需要对业务代码本身做任何的改动。
· HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡。
· istio通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度控制;支持访问控制、速率限制和配额。
· istio对出入集群入口和出口中所有流量的自动度量指标、日志记录和跟踪。
与SprintCloud的简单比较:
SpringCloud是独立于k8s的微服务框架,只支持java。具有完备独立的微服务组件。其中微服务开发是侵入式的,需要在每个微服务中包含相关配置和代码实现。
1.K8s中安装Istio环境
下载安装包(所有节点),这里使用istio1.12版本,和k8s 1.23版本对应,对应关系可查询官网。
wget https://github.com/istio/istio/releases/download/1.12.1/istio-1.12.1-linux-amd64.tar.gz
解压tar包
设置环境变量,以使用istio命令
export PATH=/home/master/istio/istio-1.12.1/bin:$PATH
cp tools/istioctl.bash $HOME/
source ~/istioctl.bash
查看可使用的配置:
istioctl profile list
安装demo配置的istio
istioctl install --set profile=demo -y
对应yaml文件在manifests/profiles/demo.yaml,将会创建默认istio-ingressgate,istiod等服务
查看安装的服务:
kubectl get svc -n istio-system
Istio组件默认安装在istio-system命名空间:
2.安装kiali可视化
安装可视化界面:
kubectl apply -f samples/addons/
kubectl apply -f samples/addons/extras/
映射外网端口(nodeport):
kubectl patch svc -n istio-system kiali -p '{"spec": {"type": "NodePort"}}'
查看映射的端口
kubectl get all -n istio-system
外网登录访问: