2021-07-30
前面3~12节学习了istio的流量管理功能,包括如何配置请求路由、故障注入、流量转移、流量镜像、设置请求超时和熔断、将服务网格外部流量接入到集群内、控制服务网格的出口流量等。
从本节开始学习istio的安全管理功能,看istio是如何保护服务网格内的微服务的。本节将根据istio官方文档https://istio.io/latest/zh/docs/tasks/security/authentication/authn-policy/中的内容,学习使用istio的认证策略来设置双向TLS和基本的终端用户认证。
...2021-07-30
linux memory cgroup子系统
#
限制容器的内存使用需要借助memory cgroup子系统。
在使用cgroups时需要先挂载,例如在centos下memory cgroup子系统被挂载到了/sys/fs/cgroup/memory
下,,在这个目录下是各个memory控制组目录,每个控制组目录下还可以有子目录,各个控制组形成了一个树状的层级关系。
...2021-07-29
上一节学习了istio服务网格内部访问外部服务的三种方法,推荐使用ServiceEntry将一个外部服务注册到服务网格中的方式,这样服务网格内部的到外部服务的访问流量都是受到istio管理的,但这种方法下访问外部服务的流量都是从内部服务实例所在节点的sidecar代理发出的,这在某些场景下会有一些限制。
例如,一个对安全有严格要求的组织,要求服务网格所有的出站流量必须经过一组专用节点。专用节点运行在专门的机器上,与集群中运行应用程序的其他节点隔离,这些专用节点将专门实施针对出站流量的策略,并且受到比其余节点更严密地监控。另外一个场景是在集群中不是所有节点都可以访问公网(或某个外部IP的),如集群中只有一个节点可以访问公网,所以服务网格内其他节点上的服务实例也就无法访问公网上的外部服务了。在这两个场景中都是因为服务网格内的一部分节点在网络上无法访问外部服务,因此需要有一个在网络上可以访问外部服务的节点作为egress gateway节点,用来引导所有的出站流量,这样也能实现该节点以受控的方式访问外部服务。
...2021-07-29
容器的单进程模型
#
容器的单进程模型是指推荐在一个容器里只运行一个进程
。
容器的单进程模型
并不是说容器里只能运行一个进程,而是因为容器本身没有管理多个进程的能力,推荐在一个容器里只运行一个进程。
在正常的Linux操作系统里都有个1号进程init,例如CentOS的systemd,所有的其他进程都是1号进程的子进程或者是子进程的子进程。
1号进程具有进程管理能力,例如对僵尸进程的管理。而容器中的1号进程就是容器运行的应用本身,它是没有进程管理能力的,所以推荐在容器中只运行一个进程。
...2021-07-28
在默认情况下所有istio服务网格内某个服务实例的出战流量都将被重定向到其Envoy Sidecar代理,集群外部URL的可访问性取决于Sizdecar代理的配置。
在默认情况下,isito将Envoy代理配置为允许传递请求到未知服务(未在isito服务发现中注册的服务),这带来了一定的便利性,但一般情况下在生产环境建议配置更为严格的配置。
在实际中,由我们负责开发的部署在服务网格中的服务往往还需要访问一些外部资源,如外部的API、中间件等,这就需要配置从istio服务网格内访问外部服务的方式。
...2021-07-28
在最近25~28节,学习了容器镜像构建的一些实践和技巧,使用Containerd替代Docker后,使用buildkit作为容器镜构建工具,到此对容器镜像构建的学习先告一段落。
在前面第6节学习了容器资源限制背后的技术cgroups的基本概念,并以cgroups cpu子系统为例体验一下手动设置cgroup。
先简单复习一下第6节的内容。使用CGroups可以控制的资源有: CPU、内存、网络、IO、文件设备等,因为计算资源(CPU)是cgroups资源限制中最重要的一种资源之一,本节将详细介绍一下如何使用cpu cgroup限制容器CPU的使用。
...2021-07-27
流量镜像,也叫称为影子流量,是指将实时流量的副本发送到镜像服务。镜像流量发生在主服务的关键请求路径之外。
本节将测试使用istio流量管理中的流量镜像功能。会在k8s的default命名空间内部署httpbin
服务的v1和v2两个版本,首先把流量全部路由到httpbin:v1
,然后执行规则将一部分流量镜像到v2版本。
...2021-07-27
在构建容器镜像时,有的时候需要在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这样写的话,用户名和密码就会暴露在构建出的镜像中,并随着镜像的分发泄露出去。
...2021-07-26
前面几节内容我们学习了Istio API资源对象中的虚拟服务VirtualService
, 目标规则DestinationRule
, Gateway
。
使用它们可以实现将集群外部流量(http或tcp)接入到服务网格内部,可以进行一些常见的流量管理功能如: 设置请求路由、故障注入、流量转移(http或tcp)等。
本节我们学习使用istio进行流量管理的另外两个常见功能:设置请求超时和熔断。
...2021-07-26
在构建容器镜像时,会用到一些技巧以构建出体积更小的镜像,以在镜像分发和容器部署时获得更快的速度。
构建体积更小的镜像
#
一个镜像是由很多层(Layers)组成的,Dockerfile中的每条指令都会创建镜像层,但只有RUN
, COPY
, ADD
会使镜像的体积增加。
理解了镜像层后,显而易见构建体积更小的镜像的需要从两个方面着手: 精简镜像层数
和精简镜像每层的大小
。
...