istio 1.10学习笔记10: Istio流量管理之流量镜像
📅 2021-07-27
流量镜像,也叫称为影子流量,是指将实时流量的副本发送到镜像服务。镜像流量发生在主服务的关键请求路径之外。
本节将测试使用istio流量管理中的流量镜像功能。会在k8s的default命名空间内部署httpbin
服务的v1和v2两个版本,首先把流量全部路由到httpbin:v1
,然后执行规则将一部分流量镜像到v2版本。
流量镜像,也叫称为影子流量,是指将实时流量的副本发送到镜像服务。镜像流量发生在主服务的关键请求路径之外。
本节将测试使用istio流量管理中的流量镜像功能。会在k8s的default命名空间内部署httpbin
服务的v1和v2两个版本,首先把流量全部路由到httpbin:v1
,然后执行规则将一部分流量镜像到v2版本。
在构建容器镜像时,有的时候需要在Dockerfile中使用一些敏感信息,例如下面的Dockerfile:
1FROM python:3
2......
3WORKDIR /usr/src/app
4RUN pip3 install -r /usr/src/app/requirements.txt -i https://username:[email protected]/simple
5......
这是构建一个python应用镜像的Dockerfile,在从私有pip源安装依赖时需要在Dockerfile中用到私有源仓库的用户名和密码。如果像上面这个Dockerfile这样写的话,用户名和密码就会暴露在构建出的镜像中,并随着镜像的分发泄露出去。
...前面几节内容我们学习了Istio API资源对象中的虚拟服务VirtualService
, 目标规则DestinationRule
, Gateway
。
使用它们可以实现将集群外部流量(http或tcp)接入到服务网格内部,可以进行一些常见的流量管理功能如: 设置请求路由、故障注入、流量转移(http或tcp)等。
本节我们学习使用istio进行流量管理的另外两个常见功能:设置请求超时和熔断。
在构建容器镜像时,会用到一些技巧以构建出体积更小的镜像,以在镜像分发和容器部署时获得更快的速度。
一个镜像是由很多层(Layers)组成的,Dockerfile中的每条指令都会创建镜像层,但只有RUN
, COPY
, ADD
会使镜像的体积增加。
理解了镜像层后,显而易见构建体积更小的镜像的需要从两个方面着手: 精简镜像层数
和精简镜像每层的大小
。
上一节我们学习了使用Istio Gateway将集群内的http服务暴露到集群外部。 Istio Gateway在接入集群外部流量时与K8S的Ingress类似istio-ingressgateway组件相当于k8s里的ingress-controller。 Istio Gateway对于K8S的不同之处在于在Istio Gateway资源中只定义对外暴露的端口、协议、域名,对于路由信息需要使用Istio的虚拟服务VirtualService的路由规则来配置,这样就可以将Istio提供的各种各样的功能应用到接入集群的流量上。
...上一节学习了一些实际工作中编写Dockerfile的实践经验,本节给大家推荐一款Dockerfile的代码规范检查工具hadolint。 hadolint的项目地址是https://github.com/hadolint/hadolint,它是一个智能的Dockerfile linter,帮助检查Dockerfile的编写是否满足最佳实践的规范。hadolint将Dockerfile解析为一个AST抽象语法树,并在AST之上执行规则。它是基于ShellCheck检查RUN指令中的Bash代码的。
...前面2节学习了容器存储挂载的基础知识,本节开始学习容器镜像构建相关知识。
当使用Containerd作为容器运行时,我们构建容器镜像的工具链发生了变化,前面在《第11节,容器镜像构建工具和方案介绍》中介绍了替代docker build
的一些方案。
我们在实际中选择的是buildkit。关于buildkit,分别在《第5节,使用nerdctl + buildkitd构建容器镜像》,《第12节,使用buildkit实现容器镜像的远程构建,《第13节,在k8s集群上部署buildkit
》做了详细的介绍。
上一节学习了nerdctl在启动containerd时挂载外部存储时支持bind mounts
, volumes
两种模式,当前0.11.0版本的nerdctl还不支持tmpfs
。
本节针对volumes
的使用做一个总结和复习。先来看一下volume在使用上的一些特点:
在Kubernetes中提供了Ingress用来接入集群外部的流量,将集群内部的Service暴露到集群外部。 而Istio提供了另一个配置模型Istio Gateway,使用Istio Gateway同样可以将服务暴露到服务器网格之外,它还允许我们将Istio的功能(诸如:监控和路由规则等)应用到进入集群的流量上。
...通过前面14~22节内容,结合Containerd学习了容器网络的一些基础知识,包括容器网络接口CNI以及Calico网络方案的一些内容。 从本节将学习容器持久化存储的相关知识。
容器的本质是一种特殊的进程,它使用namespace进行隔离,使用cgroup进行资源限制,并且以联合文件系统的形式挂载了单独的rootfs。 Containerd默认配置的snapshotter是overlayfs,overlayfs是联合文件系统的一种实现,overlayfs将只读的镜像层成为lowerdir,将读写的容器层成为upperdir,最后联合挂载呈现出mergedir。 容器中新写入的文件默认存储在容器的执行层,当容器被删除时,这些数据也就丢失了。如果想要在容器被删除后保留之前创建的文件,就需要将文件保存在宿主机上。
...