我们知道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-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路由,及多节点负载均衡应对大流量访问策略等等

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

  1. 云计算之路-Azure vs 阿里云:从负载均衡中摘/挂虚拟机

    @小尾鱼 在 试用Azure:上不了高速的跑车,无法跨Cloud Service的DNS服务器一文的评论中提了一个很好的问题: 问个问题,使用了负载均衡以后,程序发布的时候博客园是怎么避免用户访问到正 ...

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

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

  3. 四层and七层负载均衡

    四层负载/七层负载 在常规运维工作中,经常会运用到负载均衡服务.负载均衡分为四层负载和七层负载,那么这两者之间有什么不同? 废话不多说,详解如下: 1.    什么是负载均衡 1)负载均衡(Load ...

  4. Xshell 或者 Xftp 突然连不上阿里云

    今天突然发现使用xshell 远程连接不上阿里云,废了好大的劲,才明白的差不多.只要不出意外有以下几种情况:1.安全组中有没有你需要连接的端口,2.防火墙是否关闭,3.端口是否开放权限,4.是否安装了 ...

  5. 多事之秋-最近在阿里云上遇到的问题:负载均衡失灵、服务器 CPU 100%、被 DDoS 攻击

    昨天 22:00~22:30 左右与 23:30~00:30 左右,有1台服役多年的阿里云负载均衡突然失灵,造成通过这台负载均衡访问博客站点的用户遭遇 502, 503, 504 ,由此给您带来麻烦, ...

  6. Azure上七层负载均衡APP Gateway

    Azure的SLB和ILB是最常用的4层负载均衡工具.但有些场景是7层的负载均衡,SLB和ILB就无能为力了. Azure上已经推出了APP Gateway的服务,就是7层负载均衡的负载均衡器. 如上 ...

  7. nginx 七层负载均衡

    [tcp] nginx 七层负载均衡 nginx负载均衡概述 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台Web服务器组成集群,前端使用Nginx负载均衡, ...

  8. Linux架构之Nginx 七层负载均衡

    第50章 Nginx七层负载均衡 一.Nginx负载均衡基本概述 1)为什么要使用负载均衡 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷.使用多台Web服务器组成集群, ...

  9. 第十五章 nginx七层负载均衡

    一.Nginx负载均衡 1.为什么做负载均衡 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台Web服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到 ...

随机推荐

  1. 搭建springboot项目

    1.搭建环境windows10+jdk1.8+eclipse4.8+maven 2.为了学习微服务架构学习搭建基础项目 3.分为两种搭建方式为maven项目和单独建立springboot项目(ecli ...

  2. Oracle 11g DataGuard搭建(一) - 单节点到单节点

    (一)DataGuard概要 DataGuard中文称为”数据卫士“,提供了数据库高可用性.数据保护和灾难恢复的功能.DataGuard通过建立primary数据库和standby数据库来确立参照关系 ...

  3. Oracle 数据库备份和恢复配置

    可能的失败及其解决方法 失败类型 我们坑你遇到的失败或错误分为两大类:物理和逻辑.物理错误一般是硬件错误或使用数据库的应用程序中的软件错误,而逻辑错误一般在终端用户级别(数据库用户和管理员). 按从轻 ...

  4. Oracle日志文件

    转载网站:Oracle技术圈 转载地址:https://www.oraclejsq.com/oraclegl/010300678.html Oracle日志文件 Oracle日志文件是Oracle数据 ...

  5. @property & @synthesize & @dynamic 及相关属性作用探究

    @property : iOS6 引入关键词. @property name; 指示编译器自动生成 name 的 setter 和 getter 方法 : - (NSString *)name; - ...

  6. Mariadb相关

    centos下Mariadb相关 MariaDB 是一个采用 Maria 存储引擎的MySQL分支版本,是由原来 MySQL 的作者Michael Widenius创办的公司所开发的免费开源的数据库服 ...

  7. vue中渲染页面,动态设置颜色

    for循环中动态设置页面的图标或者字体颜色与循环中且套循环 :style="{'color':items.color}" 案例代码: html中 <div class=&qu ...

  8. TinyMCE插件:RESPONSIVE filemanager 9 安装与配置

    RESPONSIVE filemanager 功能: 文件上传 文件下载 重命名文件 删除文件 新建文件夹 为每个用户创建子目录 上传文件效果图: 浏览文件效果图: 文件说明: filemanager ...

  9. 一条SQL语句的千回百转

    SQL语言相信大家都不陌生,从本质上来说,它是一种结构化查询语言,是用来数据库之间的通信的编程语言.作为一名Java程序员,我们从Java角度来看,SQL语言相当于Java接口,而数据库是实现这个接口 ...

  10. goland实现函数式链式编程

    先来看一段代码 package main import ( "fmt" elastic "gopkg.in/olivere/elastic.v2" ) type ...