华宝油气(162411)昨晚到账,今天开盘卖出,每台拖拉机赚33
我拖了两天, 第二天的份额今晚已经到账, 明天大概率继续吃肉
docker0是Docker默认网络的核心组件, 通过虚拟网桥和NAT技术, 实现了容器间的通信以及容器与外部网络的交互。然而, docker0网段是固定的(通常是172.17.0.0/16), 为了更灵活地管理容器网络,Docker支持创建自定义网桥,允许用户指定网段。
例如, 在我以前做的一个单板仿真项目里, 每个容器用来模拟一块板, 单板的IP需要设置为172.16.0.0/16, 和docker0网段不一致。 由于这个项目部署在每个开发的工作机上, 我们决定不直接修改docker0配置, 选择了创建自定义网桥这种更灵活的方式。
Docker在主机上创建一个虚拟网桥(docker0), 每当启动一个容器,Docker会自动创建一对虚拟网卡(veth pair), 其中一端放在容器内部作为它的网络接口, 另一端则连接到主机上的这个虚拟网桥。 通过这种方式,容器之间可以通过网桥直接通信,数据包在网桥内转发,不经过主机的物理网络接口。
如果容器访问的是外部网络, 容器发出的数据包会先通过虚拟网桥到达主机, 然后主机通过NAT将容器的私有IP替换为自己的公网IP,从而让数据包能够顺利发送到外部网络。
在我们的业务场景中,客户终端需要访问部署在云端的各种服务,这些云端服务分布在不同的域名下。 例如, 一个典型的客户需要访问数十个甚至上百个不同的FQDN来满足他的业务需求
然而, 许多客户的防火墙不支持通配符的FQDN白名单配置, 这意味者他们必须手动配置每个具体的FQDN,这种配置非常麻烦,而且一旦配置错误会导致网络不通,严重影响用户体验, 增加运维负担
为了解决这个问题,我设计了一个基于Stunnel的加密通信方案, 以简化客户的防火墙配置:
这种方案下,客户只需在防火墙配置Cloud Proxy这一个FQDN即可,无需逐一配置所有目标服务的FQDN,这个方案大幅简化了客户的防火墙配置,同时有效减少了网络不通问题
Stunnel是一款开源软件,其主要功能是为应用程序或服务提供TLS/SSL加密支持。 它的设计初衷是为了增强那些本身不支持加密功能的传统应用程序或服务的安全性
通过Stunnel, 可以在严格的防火墙规则下实现安全的加密通信,同时有效绕过可能存在的网络访问限制。
Ingress是k8s的一种资源对象,用于管理外部对集群内服务的访问, 它通过提供一个统一的入口点,将外部流量路由到集群内部的不同服务。
k8s集群中服务默认只能在集群内访问。 如果需要从外部访问服务,通常需要使用NodePort或LoadBalancer类型服务,这两个服务都存在一些问题
在Linux双系统升级过程中, 需要先备份新系统的所有文件得到升级包, 然后在需要升级的机器上解压升级包, 完成升级. tar是Linux系统最常用的备份工具之一。
然而, 在这种跨系统的备份和迁移中, 如果没有正确地处理文件所有者信息, 就会导致权限混乱, 升级后出现一些严重问题, 例如用户无法登录。
我在实际项目中遇到了这个问题。 以下说明为什么使用tar备份Linux系统时需要添加--numeric-owner
参数
--numeric-owner
参数是什么--numeric-owner
是tar的一个选项, 用于在打包或解包时, 保留文件的UID和GID, 而不是直接映射当前系统的用户名称和组名称
--numeric-owner
参数因为在跨系统迁移时,源系统和目标系统的用户配置可能是不一致的,例如:
--numeric-owner
, 源系统解压了tar包后得到的文件UID是1000; 升级到目标系统后, alice(UID=1002)并不是UID=1000的文件所有者, 就会出现权限错误的问题以下通过演示, 说明备份系统时忽略--numeric-owner
时存在的问题
我们的客户有一些本地部署的网关设备(CentOS 7)需要做固件升级。 原有的单系统分区架构缺乏有效的回滚机制, 升级遇到故障后无法回滚, 导致服务中断, 用户体验差
设计一种解决方案, 自动将客户的网关设备从单系统分区平滑升级到双系统,同时保证用户配置(IP, DNS, 登录口令)不丢失
整个升级过程对客户完全透明, 无需客户进行额外操作(比如添加磁盘, 创建新机器)
设计如下方案:
方案 | 描述 | 优点 | 缺点 |
---|---|---|---|
定制initramfs | 通过定制initramfs进入紧急模式,预先加载升级包和配置文件到内存,再重建磁盘分区 | 用户无感知, 且备份了旧的配置 | 内存空间有限, 升级包+解压后系统文件需小于内存 |
安装ISO | 下载并安装目标系统ISO | 不需要单独出一个升级包 | 客户的配置很难同步, 升级后需要用户做一些手动配置 |
使用Python pika客户端, 写一个简单的生产者和消费者
1 | Producer ------> Queue -----> Consumer |
先连接Broker, 建立connection和channel
1 | import pika |
接着声明一个队列; 在RabbitMQ中,消息不是直接发送到队列,而是先发送到交换机(exchange), 由交换机发送到队列。
1 | channel.queue_declare(queue='hello') |
使用basic_publish发送消息。 这里使用默认交换机(‘’), routing_key参数指定为队列名称
1 | channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') |
昨天(1月24号)下午,多个货币基金集体涨停。