当Kubernets遇上阿里云 -之七层负载均衡(一).

我们知道Kubernetes的service只能实现基于4层的负载均衡,无法提供7层之上的许多特性,诸如基于URL的负载均衡,SSL支持,三方授权等等;Ingress可以实现七层负载均衡的许多功能,唯一的遗憾就是无法提供一个固定的接入IP。想想当你为业务申请了一个域名后准备将域名绑定到IngressIP上的时候,却发现后端IP会时不时的变一下是怎样的心情。本文结合阿里云SLB为Kubernetes服务提供7层之上的负载均衡。本文假设您已经有一个支持阿里云的Kubernetes部署,参考。

本教程为系列教程,会陆续介绍如何在阿里云上实现kubernetes的七层负载均衡,并支持诸如健康检查,带宽控制,SSL,白名单管理,三方权限验证,限流,URL重写等特性。

前置条件

  • 对Kubernetes Service及Ingress有一定的了解。
  • 对NginxIngressController有一定的了解。
  • 已经按照当 Kubernetes 遇到阿里云部署好一个可用的Kubernetes集群。
  • 阿里云账号

七层负载均衡服务拓扑

使用hostNetwork的模式部署两个NginxIngressController Pod作为七层负载均衡服务,然后为该Nginx Pod提供一个阿里云SLB接入点。

部署IngressController

运行NginxIngressController

NginxIngressController的运行需要有一个默认的http后端服务器用来返回自定义的404与200页面,因此通过下面的yaml文件可以创建一个default_http_server服务,一个NginxIngressController RC.

  • 监听端口为宿主机的80和443,确保该端口没有占用。
  • 注意自定义--ingress-class="nginx-1",这个用来设定NginxController会处理哪些Ingress. 请留意这个值
  • --publish-service 指定使用CloudProvider提供的IP。
root@iZbp:~# curl -L http://aliacs-k8s.oss-cn-hangzhou.aliyuncs.com/conf/ingress/0.9.0/nginx-ingress-controller.yaml -o nginxcontroller-0.9.0-beta.yml
root@iZbp:~# vi nginxcontroller-0.9.0-beta.yml
root@iZbp:~# kubectl apply -f nginxcontroller-0.9.0-beta.yml

为NginxIngressController创建阿里云SLB。

由于NginxIngressController又RC启动,无固定IP。因此需要在NginxIngressController上堆叠一个阿里云SLB。通过使用annotation service.beta.kubernetes.io/alicloud-loadbalancer-ProtocolPort: "http:80,http:443"service.beta.kubernetes.io/alicloud-loadbalancer-HealthCheckFlag: off来启用阿里云SLB的Http协议,并关闭SLB的健康检查,健康检查相关功能交给NginxIngressControllerPod.阿里云SLB配置参见

root@iZbp:~# curl -L http://aliacs-k8s.oss-cn-hangzhou.aliyuncs.com/conf/ingress/0.9.0/static-ip-svc.yaml -o alicloud-slb-4nginxingress.yml
root@iZbp:~# vi alicloud-slb-4nginxingress.yml
root@iZbp:~# kubectl apply -f alicloud-slb-4nginxingress.yml
root@iZbp:~# kubectl get svc --namespace=kube-system
NAME                   CLUSTER-IP     EXTERNAL-IP    PORT(S)                      AGE
default-http-backend   172.19.7.83    <none>         80/TCP                       14h
nginx-ingress-lb       172.19.13.53   116.62.82.64   80:32047/TCP,443:31655/TCP   14h

现在116.62.82.64就是阿里云为您提供的SLB地址,访问http://116.62.82.64, 您会被重定向到一个404页面,就是我们刚才创建的default_http_server.

到此,我们就部署好了一个可用的安全的IngressController了,接下来部署实际应用来测试一下。

运行示例应用

首先创建demo应用echoserver及其service.

按照如下命令创建一个阿里云SLB,然后您以后所有annotations包含kubernetes.io/ingress.class: "nginx-1"的Ingress流量都会通过这个SLB进入。

root@iZbp:~# curl -L http://aliacs-k8s.oss-cn-hangzhou.aliyuncs.com/conf/ingress/0.9.0/http-svc.yaml -o echoservers.yml
root@iZbp:~# vi echoservers.yml
root@iZbp:~# kubectl apply -f echoservers.yml
root@iZbp:~# kubectl get svc
root@iZbp:~# kubectl get po

为echoserver创建Ingress

使用下面列出的Ingress文件创建一个Ingress,后端指向http-svc. 注意设置annotation为kubernetes.io/ingress.class: "nginx-1"来使用前面创建的NginxIngressController和阿里云SLB。 本节先忽略tls配置,但nginx默认包含一个自带证书。

root@iZbp:~# cat << EOF | kubectl apply -f -
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx-1"
spec:
  #tls:
  # This assumes tls-secret exists.
  #- secretName: tls-secret
  rules:
  - http:
      paths:
      - backend:
          # This assumes http-svc exists and routes to healthy endpoints.
          serviceName: http-svc
          servicePort: 80
EOF

root@iZbp:~# kubectl get ing
NAME            HOSTS     ADDRESS        PORTS     AGE
nginx-ingress   *         116.62.82.64   80        13h

现在再次访问http://116.62.82.64,您会被重定向到https并且浏览器给出一个安全提示,这是因为我们并未配置自己的证书。选择忽略,然后您会看到一个打印了请求信息的页面,说明应用运行成功。然后您可以将这个IP地址绑定到您购买的域名上了。

小结

本文介绍了如何在阿里云上为Kubernetes创建七层负载均衡服务。这是一个一个简单的示例,接下来我们将介绍更加复杂的配置,包含SSL支持,七层URI路由,及多节点负载均衡应对大流量访问策略等等。敬请期待

阿里云容器服务团队致力于在阿里云上推广容器技术。想了解更多容器服务内容,请访问https://www.aliyun.com/product/containerservice

时间: 2024-11-05 06:02:09

当Kubernets遇上阿里云 -之七层负载均衡(一).的相关文章

Azure vs 阿里云:从负载均衡中摘/挂虚拟机

@小尾鱼 在 试用Azure:上不了高速的跑车,无法跨Cloud Service的DNS服务器 一文的评论中提了一个很好的问题: 问个问题,使用了负载均衡以后,程序发布的时候博客园是怎么避免用户访问到正在发布的程序的? 目前我们用的是最原始的方法.发布程序时,先从负载均衡中摘掉一台服务器,然后更新程序.预热程序,再将这台服务器重新挂上负载均衡,接着再以同样的方法操作负载均衡中的其他服务器. 借这个问题,让我们来比较一下在阿里云与Azure上如何进行这样的操作? 在阿里云上的操作步骤如下: (一)

一分钟了解阿里云产品:负载均衡概述

阿里云的产品众多,今天让我们来了解下阿里云的负载均衡(Server Load Balancer).一起来关注下吧.   什么是负载均衡?简而言之,负载均衡就是对多台云服务器进行流量分发的服务.   负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性.您可以根据业务需求实时添加或删减云服务器,从而实现无缝的业务伸缩.     相比于传统硬件负载均衡器,阿里云的负载均衡有着如下优势:   负载均衡支持删除和添加后端云服务器,实现无缝伸缩 ,伸缩过程不用更换任何设

一分钟了解阿里云产品:负载均衡五大热点技术问题分析

在上一篇文章中,我们为大家介绍负载均衡的概况,负载均衡就是对多台云服务器进行流量分发的服务,那在使用过程中,经常遇到的热门技术问题有哪些呢?     创建负载均衡实例:   https://help.aliyun.com/document_detail/slb/get-started/create-slb.html?spm=5176.product8314871_slb.6.92.w78Chv   负载均衡实例列表:   https://help.aliyun.com/document_deta

【转载】四层和七层负载均衡的区别

简单理解四层和七层负载均衡:①所谓四层就是基于IP+端口的负载均衡:七层就是基于URL等应用层信息的负载均衡:同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡. 换句换说,二层负载均衡会通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址:三层负载均衡会通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址:四层通过虚拟IP+端口接收请求,然后再分配到真实的服务器:七层通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器. ②所谓的四到七层负载均衡,就是在对后台

四层和七层负载均衡的区别

  (一) 简单理解四层和七层负载均衡: ① 所谓四层就是基于IP+端口的负载均衡;七层就是基于URL等应用层信息的负载均衡;同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡. 换句换说,二层负载均衡会通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址;三层负载均衡会通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址;四层通过虚拟IP+端口接收请求,然后再分配到真实的服务器;七层通过虚拟的URL或主机名接收请求,然后再分配到真实的服务器. ② 所谓的四到七层负载

任志远:当云计算遇上混合云

2016年12月21日,一场红红火火的品高云V7.0新品发布会在广州东方宾馆盛大举行.当天,除了有品高创始人之一周静女士带来<企业上云,不容有惑>主旨演讲.品高云产品总监邱洋先生发表<品高云V7.0新品发布>演讲,我们还诚挚邀请了品高云的合作伙伴.客户代表述说他们和品高云的"那些事儿".下面,为大家带来品高云合作伙伴互联港湾CEO任志远先生的<当云计算遇上混合云>演讲实录.   任志远(互联港湾CEO) 很高兴今天有机会跟大家分享互联港湾与品高云的那

SQL Server - 最佳实践 - SSMS配合BCP迁移SQL Server数据库上阿里云

本文讨论的主题是使用SSMS(SQL Server Management Studio)配合BCP命令行的方式来迁移SQL Server数据库.使用SSMS做数据库结构迁移,使用BCP命令做全量数据迁移,此方案是以本地SQL Server数据库迁移到阿里云RDS SQL Server 2012为例. 如果你觉得读取文章不够直观,请点击观看Youku视频,近25分钟的视频详细介绍来如何使用SSMS + BCP迁移SQL Server数据库上阿里云RDS SQL Server.使用SSMS+BCP迁

风投盯上阿里云开发者大会寻下一个阿里

本文讲的是风投盯上阿里云开发者大会寻下一个阿里 阿里云开发者大会不仅受到程序员们的追捧,在高帅富云集的风投界也掀起了巨大波澜.大会组委会14日确认,将有十余家知名投资企业代表现身阿里云开发者大会,开展"风投面对面"活动.众多创业企业也将在现场进行路演,争取项目融资.显然,云计算已成为公认的下一个风口. 据阿里云开发者大会工作人员沈颖介绍,设置"风投面对面"专场是希望借此机会建立起创业者与投资机构之间的合作平台.优秀的创业者通过提交商业计划书展示自己的创新技术和商业模

SLB 7层负载均衡“HUNG”问题追查

作者:吴佳明   最近接到博客园的反馈,SLB 7层负载均衡的实例会不定期出现流量突跌的情况,突跌持续10s左右:同时,SLB自身监控也观察到了相同的现象:针对该问题,我们进行了持续追查,最终定位到是nginx配置的原因:在此,分享一下分析排查过程,希望对大家使用nginx有所帮助.   问题描述 SLB 7层负载均衡(nginx)流量会出现不定期的突跌,每次突跌持续10s左右:同时,每次突跌必然发生在 12点 或者  0点: 查看SLB实例流量图,发现 部分实例 在12点 和 0点 流量突增几