写点什么

如何为多个 Kubernetes 集群设置全局负载均衡器

  • 2020-03-11
  • 本文字数:1350 字

    阅读完需:约 4 分钟

如何为多个Kubernetes集群设置全局负载均衡器

Jetstack 的工程团队介绍了如何跨多个谷歌 Kubernetes 引擎(Google Kubernetes Engine,简称GKE)集群设置全局负载均衡器,同时使用谷歌的非标准容器原生负载平衡和Google Cloud Armor 来进行 DDoS 保护。


Jetstack 的一个客户具有现成的配置环境,该环境由多个Kubernetes集群组成,并基于 DNS 路由至不同的负载均衡器 IP。他们希望整合 Google Cloud Armor 的 DDos 保护功能,并使用容器原生负载平衡来“改善流量的可见性和网络性能”。该团队经历了多个迁移阶段以引入这些功能并采用了一种自定义方式将单个 GLB 和多个 Kubernetes 集群后端绑定在一起。


在 Kubernetes 规范中,服务级别有三种不同的“负载平衡”方式,即 ClusterIP、NodePort 和 LoadBalancer,其中不包括 Ingress。Jetstack 的客户利用“LoadBalancing”服务类型,该服务类型会转换成基于底层云平台的特定 LB 实现。在 GKE 中,这由网络 LB(NLB)实现。然而,为了接受来自互联网的流量,Kubernetes 集群通常有个 Ingress,它由 GKE 中的全局 LB(global LB,简称GLB)实现。在客户之前的配置里面,AWS Route53中有基于地理位置的 IP 地址路由。根据 DNS 的查询来源,Route53 可以返回不同的IP地址


尽管 Google Cloud Armor 配置支持3-7网络规则,但是,谷歌的 NLB 不支持 Google Cloud Armor DDoS 保护服务。因此,切换到一个 L7 LB(全局负载均衡器,即 GLB)是必要的。在 GKE 中创建一个 Ingress 资源就可以自动创建它。作为负载均衡器,L7 GLB 给路由 URL 和 TLS 终止带来了灵活性,并把流量服务端口限制为80、8080和443。后者导致了应用程序的一些变化,该应用程序之前使用多个其他端口。在该阶段结束时还有多个 L7 负载均衡器,DNS 指向了它们的 IP 地址。


GKE 有个叫做“容器原生负载平衡”的功能,该功能允许 pod 直接接收来自负载均衡器的流量。这并不是 Kubernetes 规范的一部分,而是 GKE 中的优化,因而不能用于其他供应商托管的 Kubernetes 产品。如果没有该功能的话,从 LB 到 pod 的流量需要在 GKE 网络中绕行。其中涉及的额外网络跳跃(hop)会增加延迟。容器原生负载均衡需要创建网络端点群组(Network Endpoint Groups,简称NEG),这是一个谷歌的特定功能,它包含服务于流量的后端 pod 的 IP 地址。在迁移的第二阶段包含了这些任务。


在第三个阶段,主要的变化是使用单个 GLB IP 地址,而不是使用 DNS 返回不同负载均衡器的特定于区域的 IP 地址。Kubernetes 没有在单个 Ingress 背后包含多个集群的机制。谷歌有个测试版的工具,试图来做这件事,但是,还它还处于早期阶段。重要的是,让多个 Kubernetes 集群拥有一个 GLB(或另一个 Ingress LB)不同于多个Kubernetes集群协同工作。前者是关于使用单个端点,全局流量通过它被路由到独立的 Kubernetes 集群。而后者是关于对多个 Kubernetes 集群使用单个控制平面。在其他云中实现前者也不简单。Jetstack 团队借助 Terraform 的Google provider实现了自动化,他们分别创建了 NEG 资源和 GLB,并使用注解把它们绑定在一起。还有另一个工具致力于简化这项工作。其他公司用其它方法解决了这个问题,例如,使用一个Envoy控制平面和使用集群注册表(Cluster Registry)


原文链接:


How Jetstack Set Up a Global Load Balancer for Multiple Kubernetes Clusters


2020-03-11 09:001633

评论

发布
暂无评论
发现更多内容

码农远程办公指北

大伟

Anaconda与虚拟环境

halapano

Python virtualenv Anaconda

自己常用的一些快捷键 windows10

halapano

Windows技巧

从 0 到 1 搭建技术中台之技术文化篇

伴鱼技术团队

企业文化 技术管理

AB 测试平台的设计与实现

伴鱼技术团队

架构 系统设计 后端 A/B

《程序员的数学》笔记

Rex

读书笔记

Vol.2 谷歌不只有搜索

pyfn2030

谷歌Google

代码简洁之路 [持续更新]

hq

Java 大前端 编程习惯

那些会阻碍程序员成长的细节[1]

MavenTalker

程序员 职业规划

说到做到

Yukun

拖延症

Dataway 整合 Swagger2,让 API 管理更顺畅

哈库纳

Spring Boot DataQL Dataway Hasor

Vol.3 人工智能这么热,你必须知道一点儿!

pyfn2030

人工智能

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十)在项目中准备测试环境

编程道与术

Java 编程 软件测试 TDD 单元测试

Vol.4 了解一下渗透测试

pyfn2030

黑客 网络安全

免费领课的活动你错过了么?

池建强

极客时间

ARTS-WEEK01

子路无倦

ARTS 打卡计划

Dataway 配置数据接口时和前端进行参数对接

哈库纳

Spring Boot DataQL Dataway Hasor

使用SpreadJS 开发在线问卷系统,构筑CCP(云数据采集)平台

葡萄城技术团队

数据挖掘 大数据 SpreadJS CCP

Vol.6 几个数据库相关的词

pyfn2030

数据库 大数据 新手指南

如何用一台电脑制作一部动画短片?

zhoo299

动画 CG

Gartner 【RPA市场竞争格局】:中国厂商首次进入国际视野

人称T客

【快点查查】微信小程序使用流程

tomatocc

绝了!Dataway让Spring Boot不再需要Controller、Service、DAO、Mapper

哈库纳

StringBoot DataQL

无需代码!通过 Dataway 配置一个带有分页查询的接口

哈库纳

spring springboot Dataway Hasor

系统服务化构建-两方OAuth

图南日晟

微服务 软件工程 身份认证 架构设计

计算机的时间

伴鱼技术团队

分布式 服务器 技术交流

Vol.5 Go初探,新手必看!

pyfn2030

编程语言 新手指南

Wi-Fi p2p & ap 共存

贾献华

wifi p2p ap

艺术生,我劝你Mac

zhoo299

Mac CG 艺术

完美兼容老项目!Dataway 4.1.6 返回结构的全面控制

哈库纳

spring Spring Boot Dataway Hasor

Dataway 4.1.5 以上版本升级指南

哈库纳

string StringBoot Dataway Hasor

如何为多个Kubernetes集群设置全局负载均衡器_软件工程_Hrishikesh Barua_InfoQ精选文章