云计算

500行以内写一个API网关

370

本文实现的apix网关代码结构基本上是借鉴了APISIX的源代码, 可以看做APISIX的一个极度缩减版本。本文的实现只依赖openresty镜像已有的库,不依赖额外的库,所以路由的实现非常简陋,也没有实现路由的持久化,但是大致实现了动态路由更新和转发, 插件机制。

APISIX源代码阅读

314

apisix主要是lua脚本跟openresty(或者说nginx)的组合, 流量具体转发由nginx承载, 但是按照什么规则转发用lua脚本定义. apisix在nginx之上封装了非常多功能强大有用的特性, 提供丰富的流量管理功能,比如态调整upstream, 灰度发布, 流量熔断, 认证, 观测性等。

Python异步编程全攻略

434

如果你厌倦了多线程,不妨试试python的异步编程,在引入async, await关键字之后语法变得更加简洁和直观,又经过几年的生态发展,现在是一个很不错的并发模型。

ingress-nginx 保姆级别源码阅读

810

ingress-nginx用于将集群内部的服务暴露给外部调用, 鉴于nginx的出色表现,所以nginx-ingress也是一个高性能的网关, 通过阅读ingress-nginx-controller的源代码可以更好的理解并使用ingress-nginx, 在理解源代码之后也可以更容易的扩展ingress-nginx.

在k8s集群内部,或者说在集群的任一节点上执行命令,访问任何资源都是没什么障碍的,但是,在集群外部呢?我们并不能直接访问pod的IP,或者service的IP,这些IP是一些内部地址,一般在外部是不会设置路由的,那么如何在集群外部访问这些资源呢?最简单的解决方式是hostPort及nodePort,通过hostPort可以在运行pod的节点监听指定接口,好处是没有端口限制,但是外部访问需要知道pod运行在哪个节点,可能会存在单点故障(当然了,你也可以每个节点都运行hostport,但是太浪费端口了),如果只有一个pod运行的话,相对于hostPort, nodePort可以在所有节点监听一个指定的端口,这样访问集群的任一节点都可以访问到所需资源,好处是不需要关心pod运行在哪个节点,但是有端口限制。除了这些限制以外,最痛苦的是每个接口一个端口,或者说一个域名一个端口,如果有一个统一的端口并且可以动态的关联配置的服务该多好。

kube-proxy保姆级别源码阅读

645

kube-proxy在kubernetes中扮演的角色是主机间网络流量的协同者, kube-proxy通过实时监听网络变化来管理转发和路由, 但是根据所选的cni不通以及网络类型的选择(iptables, ipvs)不同会有不同的效果

Kubernetes源码阅读大纲

1214

保姆级别的源码阅读,死扣各个细节和代码。

代码版本: release-1.22(b68064208b29e5956cdff79a94831b52dc50d89a)

本系列主要围绕k8s的各个部分的源码来阅读。适合深入k8s内部原理的童鞋阅读,暂时没有介绍基础概念及使用的打算。