Random Thoughts

Recent content on Random Thoughts

马上订阅 Random Thoughts RSS 更新: https://blog.joway.io/index.xml

Kubernetes 中使用 API Gateway 替代 Ingress

2017年9月12日 08:00

背景

最近在构思基于 Kubernetes 建立一个个人的开放云平台 , 听起来有点不自量力 , 不过作为个人业余小玩意还是蛮好玩的。最终的成品希望是用户能够轻松地在平台上跑一些简单的无状态服务 和 cronjob 。

在搭建平台的时候遇到的第一个困难是需要有一个好用且功能全面的 API Gateway , 主流的网关服务大多是基于 OpenResty 基础上进行二次开发 , 所需要完成的工作无非是负载均衡,和 API 管理, 加上一些零零碎碎的小功能。

负载均衡

负载均衡分为四层和七层两种 , 以大家所熟知的 Nginx 为例 , 在它的 conf 文件中 , 有 http {} 和 stream {} 两种 block 。

# 四层负载均衡
stream {
server {
listen 80;
proxy_pass app;
}
upstream app {
server 172.31.0.1:8000;
}
}
# 七层负载均衡
http {
upstream app {
server 192.168.0.1:8000;
server 192.168.0.1:8001;
}
server {
listen 80;
location / {
proxy_pass http://app;
}
}
}

四层负载均衡

四层负载均衡只是从背后选择一个 server , 让其与客户端建立连接 , 其本身并不参与连接, 只是作为一个路由转发。好处是这样做它的性能会非常好,坏处是它也仅仅只能作为一个负载均衡存在,你无法对它做更加高层的处理,例如图片优化 , gzip 压缩等。并且由于它直接将后端服务暴露给了客户端, 当面临 DDoS 等攻击时, 后端将直接承受巨额流量。