我们知道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。通过使用annotationservice.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-ingressannotations:kubernetes.io/ingress.class: "nginx-1"
spec:#tls:# This assumes tls-secret exists.#- secretName: tls-secretrules:- http:paths:- backend:# This assumes http-svc exists and routes to healthy endpoints.serviceName: http-svcservicePort: 80
EOFroot@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.cnblogs.com/nongchaoer/p/6410938.html

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

  1. 浅析阿里云网络-SLB负载均衡

    浅析阿里云网络-SLB负载均衡 最近有很多朋友问阿里云网络-SLB负载均衡是什么?怎么样?小编赵一八笔记特意从网上整理相关资料,希望能够帮到大家. 你可以了解阿里云网络SLB负载均衡产品进化史. 你可 ...

  2. 企业运维之七层负载均衡--Haproxy

    企业运维之七层负载均衡--Haproxy 1. 基础介绍 2. 负载均衡的类型 3. Haproxy 的部署 3.1 Haproxy 实现负载均衡和监控 3.2 日志采集 3.3 调度算法 3.5 设 ...

  3. 阿里云的网站负载均衡解决方案

    2015年5月,国务院印发了<关于进一步做好新形势下就业创业工作的意见>,全国范围内刮起了"大众创业,万众创新"的高潮.于是中关村电子市场悄然改成了创业大街,美食街变成 ...

  4. 阿里云SLB实现负载均衡

    一.SLB概念 负载均衡(Server Load Balancer)是将访问流量根据转发策略分发到后端多台云服务器(Elastic Compute Service,简称 ECS)的流量分发控制服务.  ...

  5. 阿里云SLB(负载均衡)获取真实ip地址, log_format配置

    nginx.conf配置文件 #vim /usr/local/nginx/conf/nginx.conf log_format access '$remote_addr - $remote_user ...

  6. 阿里云dns做负载均衡

    控制台->运维管理->域名->解析->解析设置->添加服务器地址->权重配置->开启权重->设置权重->默认1:1.

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

    负载均衡设备也常被称为"四到七层交换机",那补充: 所谓四层就是基于IP+端口的负载均衡:七层就是基于URL等应用层信息的负载均衡:同理,还有基于MAC地址的二层负载均衡和基于IP ...

  8. 七层负载均衡--Haproxy

    七层负载均衡--Haproxy 1 Haproxy的定义 2 七层负载均衡的概念 3 四层和七层负载均衡的对比 4 Haproxy的安装及部署 4.1 Haproxy实现负载均衡 4.2 建立监控 4 ...

  9. 四层和七层负载均衡的区别介绍--转

    简单理解四层和七层负载均衡:①所谓四层就是基于IP+端口的负载均衡:七层就是基于URL等应用层信息的负载均衡:同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡. 换句换说,二层负载均 ...

  10. Web负载均衡学习笔记之四层和七层负载均衡的区别

    0x00 简介 简单理解四层和七层负载均衡: ① 所谓四层就是基于IP+端口的负载均衡:七层就是基于URL等应用层信息的负载均衡:同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡. ...

最新文章

  1. Java变量名的命名方式
  2. java数组的四个要素_Java零基础系列教程04Java数组
  3. HDU 2242 考研路茫茫——空调教室
  4. Qt工作笔记-QTableWidget设置委托(使用QStyledItemDelegate画3只小猪)
  5. 11-JSP开发模型
  6. github 代理_GitHub访问提速方法
  7. koa如何实现Oauth2(一)
  8. shell语法中的test命令用法
  9. 2018下半年初级程序员考试时间
  10. 使用PIL和OpenCV在PC上模拟动画OLED / LCD显示器
  11. 整数变百分数C语言,整数百分比
  12. github windows系统监控_辅助Windows 自带的微软五笔字型输入法,解决长期存在的7大问题...
  13. 看到这类代码,别再说你不认识了!手把手带你认识初阶结构体(结构体类型的声明、初始化、成员访问与传参,全在这篇文章里)
  14. windows7计算机无法到达,win7电脑突然无法进入到安全模式了怎么办?
  15. 高校供需撮合交易平台规范管理及创新发展
  16. android监控手机使用次数,原来手机还自带监控功能,手机使用记录一清二楚,赖也赖不掉...
  17. 哪款软件可以测试刘海,测试自己适合什么刘海 按照脸型来选一测便知
  18. VC的IP控件的用法
  19. Java后端_Properties集合的遍历
  20. 详解SQL的四种连接-左外连接、右外连接、内连接、全连接

热门文章

  1. webstorm运行的端口在哪看_webstorm(10.0.2)的端口号修改
  2. dotenv 是什么 怎么使用
  3. 并发控制中存在问题及解决方案
  4. matlab图像分割基于小波变换,图小波变换在图像分割中的应用研究
  5. php sql慢查询,Select多行SQL语句慢查询优化
  6. Centos7 Kubernetes(k8s) 开发服务器(单服务器)部署 grafana 度量分析和可视化
  7. 5)Thymeleaf 模板布局 th:fragment、th:replace、th:insert、th:remove
  8. android eventbus view,Android-EventBus框架详细介绍与简单实现
  9. 拖拽功能 php,js实现拖拽功能
  10. 阶段3 2.Spring_07.银行转账案例_1 今日课程内容介绍