ALB & EKS

什么是 ALB

  • 全称 Application Load Balancer,是 AWS Elastic Load Balancing 中的一款产品
  • Application Load Balancer 最适合 HTTP 和 HTTPS 流量的负载均衡
  • 详细功能

什么是 EKS

  • Amazon Elastic Kubernetes Service (Amazon EKS) 是一项托管服务,可用于在 上运行 AWS Kubernetes,而无需安装、操作和维护您自己的 Kubernetes 控制层面或节点
  • 默认 k8s master 是在 aws 托管 VPC 内对用户不可见,只暴露了 API 接口,与用户所在 node VPC 需要通过 两个 ENI 接口进行通讯

如何结合

  • 需要引入一个 aws-load-balancer-controller
  • v2.0.0 版本开始 AWS ALB Ingress Controller 正式更名为 AWS LoadBalancer Controller 并 GA!(Our first GA release for AWS Load Balancer Controller ❤️ (aka. AWS ALB Ingress Controller v2))
  • 再次证明了,AWS 生态的完善。此插件基本上就是官方放出来让社区自己来完善并不断迭代
  • v2 版本开始,不单单只是一个 alb 的控制器了,添加了 nlb 的控制,至此可以同时支持 4 & 7 层
  • controller 监听 k8s api server,其实是 watch ingress 的变化,当发现有变更,调用 aws api 触发 alb rule 变化,同时把一个 ingress 的 annotations 配置添加到 alb 中
  • 依靠 ALB 本身就有的权重能力,配合 ingress annotations 配置多个 group + orderalb.ingress.kubernetes.io/group.name & alb.ingress.kubernetes.io/group.order
    )来实现单 k8s 的蓝绿部署
  • How it works

注意点

  • Rules per load balancer (not counting default rules) :100
  • CD 系统适配
  • 无多 K8S 集群能力
  • 其他(发掘中。。。)

想象力

  • 其实这个东西就差最后一步即可实现多 K8S 集群的流量调度,本身 ALB 就有这个能力做这个事情,毕竟其实就是 Nginx
  • 比如可以基于 ALB 的 TargetGroup 将不同的 K8S 的 Node 放入,接着依赖 ALB 的权重能力来实现多集群调度流量,这个需求其实还是存在的,单集群的 K8S 其实当有重大升级操作 Or 其他特殊原因的事情很容易一把全挂的情况发生
  • 慢慢读代码,尝试添加此功能中。还是有蛮多细节需要注意的,比如需要注意 AWS API 限流,一次放多少规则过去,ALB 的 TargetGroup 会不会爆炸💥等问题

核心代码改动思考

  • watch Ingress ---> Service ---> Pod ---> PodInfo
  • 最后直接获取 PodInfo 信息后添加到 ALB targetgroup,可以考虑 targetgroupbinding 模块的逻辑中按照不同的 clusterName 来添加,这样其实就可以实现同时控制多个 k8s 集群
// buildPodInfo will construct PodInfo for given pod.
func buildPodInfo(pod *corev1.Pod) PodInfo {
    podKey := NamespacedName(pod)

    var podENIInfos []PodENIInfo
    // we kept podENIInfo as nil if the eniInfo via annotation is malformed.
    if eniInfo, err := buildPodENIInfos(pod); err == nil {
        podENIInfos = eniInfo
    }

    var containerPorts []corev1.ContainerPort
    for _, podContainer := range pod.Spec.Containers {
        containerPorts = append(containerPorts, podContainer.Ports...)
    }
    return PodInfo{
        Key: podKey,
        UID: pod.UID,

        ContainerPorts: containerPorts,
        ReadinessGates: pod.Spec.ReadinessGates,
        Conditions:     pod.Status.Conditions,
        PodIP:          pod.Status.PodIP,

        ENIInfos: podENIInfos,
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容