0%

使用 Hyper-V 或者 KVM 的虚拟机的时候,我一般会通过 SSH 或者 RDP 进行访问,这样不同虚拟机的使用体验相对统一,不依赖具体 VM 管理软件的功能。只要配置好网络,就和正常使用服务器一样(不考虑有些公司内的虚机限制联网的情况)。因此,我们需要先来配置合适的网络满足我们的需求。

网络选择

在之前 KVM 网络里面介绍了两种网络的拓扑,Bridge 和 NAT,两者最大的区别在于是否多了一层子网,因为子网内的机器正常情况下无法被外面的其他机器访问到,因此选择的时候最主要考虑的就是这个点。

  1. Default NAT: Hyper-V 和 KVM 都会在安装完成后自动创建一个带 NAT 的子网。KVM 创建的是固定的 IP 段,还可以再自行修改到想要的 IP 段;而 Hyper-V 创建的 IP 段会在每次重启时发生变化,如果要使用固定的 IP 段,需要每次都重新配置一下,相当麻烦。
  2. Bridge: 在可以搭建 Bridge 网络的情况下,我倾向使用 Bridge 网络,这种情况下,VM 和宿主机有相同的连通性,可以配置成一个类似整个局域网的设备,如旁路由。但是,Bridge 网络有着麻烦的前置条件,就是需要破坏宿主机已有的网络,并且依赖外部的路由器,一般适合用在家里能物理访问到的机器上,不用担心网络出问题了连不上。普通家用路由器的情况下,一般路由器的 DHCP 都会根据 MAC 分配固定的 IP,当然自己也可以手动指定一个不冲突的 IP。
  3. Static NAT: 这个是专门针对 Hyper-V 的,因为 KVM 默认就是 Static NAT,不需要在单独配置。Hyper-V 可以通过新建一个虚拟交换机来分配固定的 IP 段,使得虚拟机可以配置固定的 IP。

因此,我一般在本地主机选择 Bridge,而使用服务器是会选 Static NAT。其实我之前配置 VM 的时候,也会选择配置主机名,经过局域网广播后,可以通过主机名直接访问而不需要关心 IP,但这个只有在局域网直连时有用,做一些特殊配置(如 proxy)的时候就可能会比较麻烦。

阅读全文 »

事故现象:服务的 nginx 出现大规模的请求超时,从 log 上看 upstream 都是相同的 ip,从 metrics 上看有一个 Kubernetes Node 拿不到 usage 信息

猜想与疑惑

  1. 看到这个现象的第一反应是 node 的网络出问题,也怀疑是不是 node 在重启
  2. 疑惑的一点是 Kubernetes 为什么不会把 node 摘掉?
  3. 除了 node 外,service pod 也配置了 readiness probe,请求失败的 pod 应该不会被 call 到

Debug

由于生产环境的问题一段时间自动恢复,没有现场,只能自己尝试在本地复现

阅读全文 »

前言

由于本地环境都是 windows,所以基本上所有虚拟机相关的使用和测试都是在 hyper-v 里面的,就连之前文章里面的 KVM 相关测试也是在 hyper-v 里面的 Linux VM 做的。很多时候虚拟机是需要向整个局域网提供服务的,所以一般情况使用的网络拓扑都是桥接(Bridge)模式。在 hyper-v 里面,搭建桥接网络很简单,只要虚拟交换机里面创建一个外部网络就可以;对于 KVM 而言,Linux 没有内置的指令一键完成,因此需要自行配置网络。

网络结构介绍

本文不会详细解释各个网络名词,如网关(Gateway),子网(Subnet)等,还不了解的话需要自行搜索

一般设备间的网络拓扑有两种(针对 IPv4 的局域网情况,IPv6 暂时不需要 NAT):

阅读全文 »

最近把 Ubuntu 从双系统中删掉了,不过因为经常需要折腾 Linux 相关的东西,所以最近没事在折腾 Linux 虚拟机相关,所以顺便也记录记录。

前言

虚拟机一般都是单系统,相对物理机双系统来说最大的优势是可以乱搞,不满意直接挂 iso 重新格式化就好。当然现在 UEFI 引导的系统理论上也可以随便格分区,只要还有有效的启动项就可以了,但如果还是 BIOS 引导的电脑乱格分区,很容易就会需要搜索如何修复引导了(主要还是虚拟机不会影响物理机上的重要文件)。

不过,由于虚拟机需要跑在宿主系统内,性能肯定是比不上直接装到物理机上的,所以虚拟机不适合跑性能要求高的东西,比如炼丹。

我测试的系统是:物理机 Windows 10 x64,图形界面虚拟机 Ubuntu 20.04,命令行虚拟机 Debian 10。虚拟机软件为:Windows 的 Hyper-V 和 Linux 的 KVM。之前用过 VMware 和 VirtualBox,但由于第三方的虚拟机软件或多或少会和系统的一些配置有冲突,因此我现在一般都采用这两个操作系统原生的虚拟机技术。

阅读全文 »

!!!警告 :本文的 demo 仅为原理展示,没有任何安全认证,不建议长时间直接暴露在外网使用。(直接使用后果自负)

Proxy 是一种特殊的网络服务,服务器不提供内容服务,而是进行流量转发。Proxy 可以用于:网络加速、访问限制与突破、隐藏IP、负载均衡等场景

Serverless 是一个云服务概念,通过对后端计算资源的隐藏,可以方便地部署特定的 HTTP 服务,并且大部分的 serverless 服务提供入口的 HTTPS 服务保证通信安全,使得用户不需要自行申请与安装 HTTPS 证书

所有能通过 HTTP/ws (Websockt 可以兼容 HTTP) 协议提供服务的 Proxy 都可以使用该方式搭建(不过,由于标准的 HTTP Proxy 协议不与负载均衡层如 nginx 兼容,故不可直接使用)

本文会介绍如何简易地搭建一个 Websocket + HTTP Proxy 的服务,我们使用的 proxy 服务是 proxy.py,websocket 服务是 websockify —— 它会以 websocket 协议监听一个 TCP 端口,并将收到的所有消息转发到另一个 TCP 端口上,从而实现了在 HTTP Proxy 的外面套上 Websocket 协议

阅读全文 »

由于身边已经没有 BIOS/MBR 机器了,所以只介绍 UEFI/GPT 引导相关
警告!!!:如果你的机器启动类型是 BIOS 的,请不要参考文章的任何做法

懒人心血来潮写点笔记(可能写一两篇就又会忘了),记录最近的胡乱鼓捣

一笔带过的安装篇

由于现在双系统安装已经很成熟了(也可能只是我装多了比较熟悉),所以这里只是稍微带过。不经常鼓捣 Linux 所以一般只用常规的 Ubuntu/Debian

以 UEFI + Win 安装 Ubuntu 为例

阅读全文 »