Kubernetes集群中的IP伪装 - ip-masq-agent

“IP 伪装” 通常应用于云环境中,例如 GKE, AWS, CCE 等云厂商都有使用 “IP伪装” 技术,本文将围绕 “IP伪装” 技术本身,以及这项技术在 Kubernetes 集群中的实现应用 ip-masq-agent 的源码分析,以及 ”IP伪装“ 能为 Kubernetes 带来什么作用,这三个方向阐述。 什么是IP伪装? IP 伪装 (IP Masquerade) 是 Linux 中的一个网络功能,一对多 (1 to Many) 的网络地址转换 (NAT) 的功能 。 IP 伪装允许一组计算机通过 “伪装” 网关无形地访问互联网。对于互联网上的其他计算机,出站流量将看起来来自于 IP MASQ 服务器本身。互联网上任何希望发回数据包(作为答复)的主机必须将该数据包发送到网关 (IP MASQ 服务器本身)。记住,网关(IP MASQ 服务器本身)是互联网上唯一可见的主机。网关重写目标地址,用被伪装的机器的 IP 地址替换自己的地址,并将该数据包转发到本地网络进行传递。 除了增加的功能之外,IP Masquerade 为创建一个高度安全的网络环境提供了基础。通过良好构建的防火墙,突破经过良好配置的伪装系统和内部局域网的安全性应该会相当困难。 IP Masquerade 从 Linux 1.3.x 开始支持,目前基本所有 Linux 发行版都带有 IP 伪装的功能 什么情况下不需要IP伪装 已经连接到互联网的独立主机 为其他主机分配了多个公共地址 IP伪装在Kubernetes集群中的应用 IP 伪装通常应用在大规模 Kubernetes 集群中,主要用于解决 “地址冲突” 的问题,例如在 GCP 中,通常是一种 IP 可路由的网络模型,例如分配给 Pod service 的 ClusterIP 只能在 Kubernetes 集群内部可用,而分配 IP CIDR 又是一种不可控的情况,假设,我们为 k8s 分配的 IP CIDR 段如下表所示:...

 ·  · 

Linux网络子系统中的计数器

在Prometheus node-exporter中,存在多个网络监控指标指标标志着主机的网络状态,但是大家常常忽略这些指标,而这些指标又很重要,这些指标的来源是根据Linux网络子系统中的多个计数器定义的,本文就解开这些TCP计数器的面目。 TcpExtListenOverflows 和 TcpExtListenDrops 当内核从客户端接收到 SYN 时,如果 TCP 接受队列已满,内核将丢弃 SYN 并将 TcpExtListenOverflows +1。同时内核也会给TcpExtListenDrops +1。当 TCP 套接字处于 LISTEN 状态,并且内核需要丢弃数据包时,内核总是将 TcpExtListenDrops +1。因此,增加 TcpExtListenOverflows 将使 TcpExtListenDrops 同时增加,但在不增加 TcpExtListenOverflows 的情况下,TcpExtListenDrops 也会增加,例如内存分配失败也会导致 TcpExtListenDrops 增加。 以上解释基于内核 4.10 或更高版本,在旧内核上,当 TCP 接受队列已满时,TCP Stack有不同的行为。在旧内核上,TCP Stack不会丢弃 SYN,它会完成 3 次握手。当接受队列已满时,TCP 堆栈会将套接字保留在 TCP 半开队列中。由于处于半开队列中,TCP 堆栈将在指数退避计时器上发送 SYN+ACK,在客户端回复 ACK 后,TCP Stack检查接受队列是否仍满,如果未满,则将套接字移至接受队列如果队列已满,则将套接字保留在半开队列中,下次客户端回复ACK时,该套接字将有另一次机会移至接受队列。 这两个计数器在 node_expoter 中的指标是: node_netstat_TcpExt_ListenDrops node_netstat_TcpExt_ListenOverflows TcpInSegs 和 TcpOutSegs TcpInSegs 和 TcpOutSegs 都是被定义在 RFC1213 [1] TcpInSegs 是指 TCP layer 接收到的数据包数量,包括错误接收的数据包,例如校验和错误、无效的TCP头等。只有一个错误不会被包含在内:如果第 2 层目标地址不是 NIC 的第 2 层地址。如果数据包是多播或广播数据包,或者 NIC 处于混杂模式,则可能会发生这种情况。在这些情况下,数据包将被传递到 TCP 层,但 TCP 层将在增加 TcpInSegs 之前丢弃这些数据包。 TcpInSegs 计数器不知道 GRO (Generic Receive Offload)。因此,如果两个数据包被 GRO 合并,TcpInSegs 计数器只会增加 1。...

 ·  · 

初识Argo cd - 在k8s集群上安装argo cd

GitOps 最初由 Weaveworks (weave cni的组织) 在 2017 年的博客中提出 [1],使用 “Git” 作为 CI/CD 的 “单一事实来源”,将代码的更改集成到每个项目的存储库中,并使用拉取请求来管理 infra 和部署。 在理解上就可以理解为 “是一种基于 git 的操作框架” Argo CD 是一种 kubernetes 之上的 “声明式” (declarative) 的 gitops CD, 在本文作为了解如何在 Kubernetes 集群中安装和配置 Argo CD。 前提准备 想要安装 Argo CD 首先环境需要具备如下: 已经安装好 kubectl 命令行工具 拥有 kubeconfig 文件 一个可供测试的 Kubernetes 集群,如:kind, minikube, kubeadm, binary 等任意的集群 步骤1 - 选择适配 kubernetes 版本的 Argo 根据官方的解释, Argo CD 在任何给定时刻所支持的版本,这些版本是 N 和 N - 1 次要版本的最新修补版本 (x.x.new)。这些 Argo CD 版本与 Kubernetes 项目官方支持的 Kubernetes 版本相一致,通常是 Kubernetes 的最近发布的 3 个版本。...

 ·  · 

初识Argo cd - argo cd架构

Argo组件 API Server Repository Server Application Controller API Server:一个 gRPC/REST 服务器,提供了 “Web UI”、“CLI” 和 “CI/CD” 使用的 API 应用管理和状态报告 调用应用操作(例如同步、回滚、用户定义的操作) 存储库和 Cluster credential 管理(作为 kubernetes secret 存储) 为外部提供身份认证和代理授权功能 RBAC 试试 Git webhook 事件的 listener/forwarder Repository Server:内部服务,用于维护 git 中的应用清单 (manifests) 的本地缓存。负责接收生成和返回 kubernetes 清单 仓库URL revision (commit, tag, branch) APP PATH 模板特定的参数 Application Controller:Kubernetes controller,主要做的工作是持续监控运行的 Application,并于当前实时状态和目标所需状态进行对比(与 Kubernetes Controller 功能是相同的),并且不仅仅是 KC 还会和存储库中指定目标状态进行比较,检测到 OutOfSync 状态将进行纠正。 Argo 架构 Argo CD 时最常见的三种架构:单实例方案, 集群级方案,以及折衷方案 (compromise between the two)。...

 ·  · 

CentOS6/7 curl SOCKS5堆溢出漏洞修复 CVE-2023-38545 CVE-2023-38546

10月11日发布的 curl 8.4.0版本,在新版本中修复漏洞 CVE-2023-38545 和 CVE-2023-38546 CVE-2023-38545: This flaw makes curl overflow a heap based buffer in the SOCKS5 proxy handshake. [1] CVE-2023-38546: This flaw allows an attacker to insert cookies at will into a running program using libcurl, if the specific series of conditions are met. [2] 安装方式有两种,“编译” 与 “更新RPM”,本文以 RPM 方式更新 curl 到 8.4.0 版本 下载curl源码包 升级至少需要更新至 curl 8.4 ,首先从官网下载源码包 [3] 将curl打包为rpm 因为 curl 源码包内没有提供 rpm 的规格文件,所以我们需要自己编写,但是比较麻烦,可以让 chatgpt 生成一个,这里使用 centos7 的 curl....

 ·  ·