熊喵君的博客

Thinking will not overcome fear but action will.

安全:SSO 认证协议的那些事

0x00 前言 最近工作用到了较多的 SSO(单点登录)知识,本文简单梳理下。主要涉及的到的有如下几块: OAuth2 SAML2 OpenID JWT OpenSSH Login with SSO:如何将 SSO 的认证理念嵌入到 OpenSSH 的登录身份认证中去 授权 && 认证 授权 认证 0x01 通讯主体 浏览器...

Hot Reload:Golang 如何实现配置文件优雅的热更新

配置文件的优雅热加载实现以及 viper 库的机制分析

0x00 前言 Nginx 中有个 reload 指令,提供了不重启服务下针对配置文件的热加载能力,本文讨论下在 golang 下的文件热加载实现。 通过 signal 手动触发 通过文件监听 notify 自动触发 0x01 golang 中的实现 手动触发 要点有如下几点: 配置文件指针化,并且加锁保护(配置的单例模式) 捕获信号,重新读配置 在代码逻辑引用...

项目开发:网关(Gateway)与反向代理(ReverseProxy)的那些事

0x00 前言 本文是网关及代理开发过程中的一些总结。代理(常见正向代理及反向代理)可以视为网关的核心组件之一。常见的网关有: 安全网关(Secure Gateway) 开放认证网关(Open IDP Gateway) 微服务网关(MicroService Gateway) 对网关的特性主要关注下面几点: 功能 && 部署架构 高性能 高...

Nginx 容器动态流量管理方案:Upsync

一种更为优雅的 Nginx 代理动态切换方案

0x00 前言 前一篇文章,介绍过 Nginx 的负载均衡算法。upstream 机制使得 Nginx 通常用于反向代理服务器,Nginx 接收来自下游客户端的 Http 请求,并处理该请求,同时根据该请求向上游服务器发送 Tcp 请求报文,上游服务器会根据该请求返回相应地响应报文,Nginx 根据上游服务器的响应报文,决定是否向下游客户端转发响应报文。另外 upstream 机制提供...

Confd 使用 && 源码分析

Confd 源码分析:强大的动态配置更新(基于 etcdv3/redis 存储)

0x00 前言 现网有类似下面的 Nginx 配置,如何对 upstream 指向的后端服务节点做修改,手动的方式: 修改 upstream 配置,增加 / 删除某些后端 使用 nginx -s reload 指令,重启服务 那么,如何对 nginx 配置做动态的上下线切换(即时剔除无效节点)呢?一个可行的解决方案就是使用 Confd+Etcd。 upstream back...

Kubernetes 应用改造(七):存储那些事

Kubernetes 中的存储方案

0x00 前言 Pod 是 Kubernetes 中创建和部署的最小单位,Pod 中封装着应用的容器,存储、独立的网络 IP,以及管理容器如何运行的策略选项。由于容器本身是非持久化的,因此需要解决在容器中运行应用程序遇到的一些问题。首先,当容器崩溃时,Kubelet 将重新启动容器,但是写入容器的文件将会丢失,容器将会以镜像的初始状态重新开始;第二,在通过多个 Pod 中一起运行的容器,通...

HTTP(s) 代理中间件库:Oxy

分析基于 Golang 的 HTTP(s) 代理中间件库 Oxy:Part One

0x00 前言 Oxy:Go middlewares for HTTP servers & proxies 是一个 HTTP(s) 代理开发(中间件)库,另一个负载均衡网关项目 vulcand 也基于此库来实现反向代理(Reverse Proxy Engine)功能。它的 主要组件如下,框架还是围绕着原生 net/http 库实现的: Buffer retries and ...

Kubernetes 零信任实战:Teleport

如何实现对 kubectl exec 的劫持?

0x00 前言 在 kubernetes 中,常用如下指令进入一个 Pod(在 Pod 运行命令),或者说 获取正在运行容器的 Shell: kubectl exec ${pod_name} -- date kubectl exec -it ${pod_name} -- /bin/bash 既然是 Shell 操作,基于零信任的理念,如何实现对这个过程的审计与管控呢,具体来说需要完...

Golang 的分布式任务队列:Machinery (v1)分析(一)

如何使用 Golang 实现通用的任务调度作业模型

0x00 前言 Machinery 是一个基于分布式消息分发的异步任务队列框架,有点类似于 Celery。异步任务的主要作用是解耦,即将需要长时间执行的逻辑单独处理,避免响应延时带来的问题;此外借助于 Machinery,可以完成各种复杂类型任务的调度、编排、结果记录等功能,完美的支持了日常业务场景。考虑如下几个问题: Machinery 的架构 / 模块划分的实现 Machin...

使用 Golang 实现 SSH 和 SSHD(二)

golang-ssh 库使用 && gliderlabs/ssh 分析(实战篇)

0x00 前言 先记录一下自己实现 sshd(proxy)相关系统中需要搞懂的几个重要的 ssh 数据结构,先简单回顾下SSH协议中最核心的模块:连接协议 SSH 传输层协议 再回顾下ssh协议的架构分层,详细说明下Channel的作用 传输层协议,定义了 SSH 协议数据包的格式以及 Key 交换算法 认证协议,定义了 SSH 协议支持的用户身份认证算法 SSH连接协...