如何临时或永久修改route table
内容摘要
如何修改route table,如何临时增加或删除路由条目,如何永久添加或删除路由条目。主要涉及route命令、nmcli命令、相关配置文件持久化位置等
临时修改,重启后丢失
直接使用 route 命令可以进行临时修改,但是在系统重启或者是执行interface重启后会丢失。
命令使用方式:
route {add | delete} {-host | -net} {des_ip} [netmask {net mask}] [gw {gw}] [dev {device}]
route add:命令关键字,表示增加路由,若要删除路由,则为route del;
-host | -net:表示路由目标是主机还是网段;
netmask:表示路由目标为网段时才会使用到,表示路由目标网段的子网掩码;
gw:命令关键字,后面跟下一跳网关;
dev:命令关键字,后面跟具体设备名,表示路由是从该设备出去。
metric:为路由指定所需跳数里的多个路由中选择与转发包中的目标地址最为匹配的路由。所选的路由具有最少的跳数。跳数能够反映途经节点的数量、路径的速度、路径可靠性、路径吞吐量以及管理属性。
示例:
添加路由:
route add –host 192.168.168.110 dev eth0
route add –host 192.168.168.119 gw 192.168.168.1
route add -net 192.168.3.0/24 dev eth0
route add -net 192.168.2.0/24 gw 192.168.2.254
route add –net 180.200.0.0 netmask 255.255.0.0 gw 10.200.6.201 dev eth0 metric 1
envoy proxy调研笔记
内容提要
我们主要想了解 envoy 如何提供 L4/L7的代理服务,envoy具体提供哪些功能,我们如何利用这些功能实现我们的业务场景。在envoy如何提供代理能力方面,主要有两点:1. envoy 如何从控制面获取配置; 2. envoy 如何根据配置信息进行路由。在如何利用envoy提供的功能实现我们的业务场景方面,主要是 如何将 k8s集群中的相关资源对象的描述信息,转换为envoy 的配置。
本文我们将围绕以上两个方面,进行介绍,主要有以下相关内容:
-
envoy是什么?为了解决什么问题,具有什么特点,能力边界在哪里。
-
明确envoy中的基本术语,以及envoy的基本工作框架,处理流程。
-
envoy的动态配置能力。控制面如何将k8s集群中的route资源描述信息动态实时地传达到envoy?
-
有了路由配置信息后,envoy如何对请求进行路由。这部分内容主要聚焦在路由能力,这个能力主要是由http route filter提供。这部分涉及到一些代码实现层面的处理以及相关数据结构。
-
envoy的主要组件与模型:线程模型、常见组件、过滤器等。
-
对几个控制面组件的简单对比。
-
为了便于评估envoy能够对哪些业务需求提供支持,简单罗列了envoy提供的功能特性。
Envoy 是什么¶
根据envoy官网的定义,envoy是一个开源的为云原生应用而设计的边缘和服务代理(edge and service proxy)。使用c++ 编写,设计定位是用于大规模微服务服务网格架构的通用数据平面。为的是解决以下在大规模微服务场景中存在的挑战:1. 复杂异构系统中的网络维护;2. 流量监控中的困难;3. 扩缩容。
通常来说有两种部署方式,一种是作为sidecar 和微服务应用部署在一起,将网络相关的逻辑从微服务中抽离出来,提供服务网格的数据面能。

另一种部署方式是作为一个代理网关部署,作为微服务集群的流量入口。

envoy可以提供的能力有:负载均衡、可用性增强能力(如超时、熔断、重试等)、可观测性、指标监控等。
envoy的一大特点是可以通过xDS实现实时的动态配置更新。在k8s容器集群中,部署的应用会不停地新增、减少、漂移,路由配置会不停地发生变化,xDS 这一特性能很好地在这种频繁发生路由配置变化的场景下高效运作。不仅仅是路由相关的配置可以热加载生效,envoy 可以通过xds进行除本身二进制文件之外的几乎所有变更,也就是除非需要更新envoy本身,否则任何变更都无需将envoy停止运行,这为我们的运维变更带来了极大的便利性。
除了支持xds进行动态配置,envoy也支持进行静态配置,但是通常来说,由于其配置具有很高的灵活度,也导致了配置具有较高的复杂性,难以人工维护,通常来说都是由代码生成。
envoy只扮演数据平面的角色,不扮演控制平面的角色。尽管envoy适用于k8s集群云原生场景,但是并不会对k8s集群的路由相关资源进行监控,并转换为相关的路由配置。因此我们需要有控制面程序来完成对k8s集群中路由相关资源进行监控,来完成路由配置的生成,并通过xds将配置同步到envoy中。
当前常见的控制面实现有:istio、contour、emissary-ingress(ambassador)、gloo等。以conotur为例,常见的部署形态如下所示:

参考链接:
- https://www.tetrate.io/blog/get-started-with-envoy-in-5-minutes/
- https://www.tetrate.io/what-is-envoy-proxy/#:~:text=Introducing Envoy Proxy,data plane for service mesh.
envoy的基本概念和框架¶
基本概念:
https://www.envoyproxy.io/docs/envoy/v1.21.4/intro/arch_overview/intro/terminology:
使用make进行golang编译中的小问题及解决方案
- 报错信息:Clock skew detected. Your build may be incomplete.
make: Warning: Clock skew detected. Your build may be incomplete.
表示检测到了时钟偏差,通常发生在将代码从开发主机拷贝到编译主机进行编译,而两个设备系统之间的时间上存在差距。
解决方案:
find ./ -type f | xargs touch
将所有文件进行一次touch,刷新时间为本地时间,然后进行编译
- 报错信息:
no required module provides package main.go; to add it:
go get main.go
解决方案
修改 makefile中 build 的命令行:
由
go build -o bin/manager main.go
改为:
go build -o bin/manager ${MODULE}/path/to/the/dir/of/main.go
${MODULE} 为当前项目module值,可在 go.mod中获取,即开头的 module值
/path/to/the/dir/of/main.go 为main.go所在目录在本项目中的相对路径