Istio初体验

Istio

简介
1
2
3
4
5
6
一个用于服务治理的开发平台
一个Service Mesh形态的用于服务治理的开放平台
一个与k8s紧密结合的使用于云原生场景的Service Mesh形态的用于服务治理的开放平台

Istio是一个用于连接/管理以及安全化微服务的开放平台,提供了一种简单的方式用于创建微服务网格。
并提供负载均衡、服务间认证以及监控等能力,并不需要修改太多服务就可以实现上述功能。
功能
  • 流量管理:控制服务之间调用的流量和API调用,使得调用更可靠,并使网络在恶劣情况下更加健壮。
  • 可观测性:获取服务之间的依赖,以及服务调用的流量走向,从而提供快速识别问题的能力。
  • 策略执行:控制服务的访问策略,不需要改动服务本身。
  • 服务身份和安全:为网格中的服务提供可验证身份,并提供保护服务流量的能力,使其可以在不同可信度的网络上流转。

Istio组件功能

  • 自动注入:指在创建应用程序时自动注入sidecar代理。
  • 流量拦截:在Pod初始化时设置iptables规则,当有流量到来时,基于配置的iptables规则拦截业务容器的Inbound和Outbound流量到sidecar上。
  • 服务发现:服务发起方的Envoy调用管理面组件Pilot的服务发现接口获取目标服务的实例列表。
  • 负载均衡:服务发起方的Envoy根据配置的负载均衡策略选择服务实例,并连接对应的实例地址。
  • 流量治理:Envoy从Pilot中获取配置的流量规则,在拦截到进出流量时执行治理逻辑。
  • 访问安全:在服务间访问时通过双方的Envoy进行双向认证和通道加密,并基于服务的身份进行授权管理。
  • 服务遥测:在服务间通信时,通信双方的Envoy都会连接管理面组件Mixer上报访问数据,并通过Mixer将数据转发给对应的监控后端。
  • 策略执行:在进行服务访问时,通过Mixer连接后端服务来控制服务间的访问,判断对访问是放心还是拒绝。
  • 外部访问:在网格的入口处有个Envoy扮演入口网关的角色。

下载

1
curl -L https://istio.io/downloadIstio | sh -

解压安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
tar zxvf istio-1.14.3.tar.gz
cd istio-1.14.3

# 添加环境变量
vim /etc/profile
export PATH=/root/istio-1.14.3/bin:$PATH
source /etc/profile # 生效

istioctl version # 查看版本

istioctl install --set profile=demo -y # 安装

# 卸载
kubectl delete -f samples/addons
istioctl uninstall -y --purge
kubectl delete namespace istio-system
kubectl label namespace default istio-injection-

# 查看资源
[root@master ~]# kubectl get pod -n istio-system
NAME READY STATUS RESTARTS AGE
istio-egressgateway-7d75d6f46f-qcrqn 1/1 Running 0 3m5s
istio-ingressgateway-5df7fcddf-sbdkt 1/1 Running 0 3m5s
istiod-56fd889679-59mbz 1/1 Running 0 3m48s

创建demo

1
2
3
4
kubectl create ns istio   # 创建ns
kubectl label ns istio istio-injection=enabled # 打上标签用于自动注入

kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -n istio
1
2
# 创建网关
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml -n istio

访问测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 默认svc采用loadBalancer,此处改为NodePort
kubectl edit -n istio-system svc istio-ingressgateway

http://x.x.x.x:port/productpage
# 刷新页面会看到Reviewer的变化(无星星、黑色星星、红色星星),因为还没使用istio来控制版本的路由。

# 应用默认目标规则
kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
[root@master istio-1.14.3]# kubectl get destinationrules
NAME HOST AGE
details details 16s
productpage productpage 17s
ratings ratings 16s
reviews reviews 17s

开启dashboard

1
2
3
4
5
kubectl apply -f samples/addons -n istio
kubectl rollout status deployment/kiali -n istio-system

kubectl edit -n istio-system svc kiali # 改为NodePort
for i in $(seq 1 100); do curl -s -o /dev/null "http://x.x.188.182:32303/productpage"; done # 访问
-------------本文结束感谢您的阅读-------------
原创技术分享,感谢您的支持。