当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。
[email protected]:~# 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
[email protected]:~# vi nginxcontroller-0.9.0-beta.yml
[email protected]:~# 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配置参见

[email protected]:~# curl -L http://aliacs-k8s.oss-cn-hangzhou.aliyuncs.com/conf/ingress/0.9.0/static-ip-svc.yaml -o alicloud-slb-4nginxingress.yml
[email protected]:~# vi alicloud-slb-4nginxingress.yml
[email protected]:~# kubectl apply -f alicloud-slb-4nginxingress.yml
[email protected]:~# 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进入。

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

为echoserver创建Ingress

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

[email protected]:~# 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

[email protected]:~# 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路由,及多节点负载均衡应对大流量访问策略等等

时间: 2024-12-27 10:57:16

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

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

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

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

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

四层、七层负载均衡区别

原文链接:http://www.jianshu.com/p/fa937b8e6712 一.简介 所谓四层就是基于IP+端口的负载均衡:七层就是基于URL等应用层信息的负载均衡: 同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡. 换句换说,二层负载均衡会通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址: 三层负载均衡会通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址: 四层通过虚拟IP+端口接收请求,然后再分配到真实的服务器: 七层通过虚拟的URL或主机名接

四层和七层负载均衡的区别(转)

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

四层和七层负载均衡详解

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

简单理解四层和七层负载均衡的区别

先提下我们所说的四层,七层,大家都知道我们网络七层协议(OSI):7:应用层.6:表示层.5:会话层.4:传输层.3:网络层.2:数据链路层.1:物理层. 应用层(Application Layer) 与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的.例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工 作的程序员也不关心OSI的第7层.但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层.示 例:telnet,HTTP,FTP,NFS,S

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

转载 http://hi.baidu.com/aking_roc/item/3f62cb0f57b49736a3332a9e 负载均衡设备也常被称为"四到七层交换机",那么四层和七层两者到底区别在哪里? 第一,技术原理上的区别. 所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器. 以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN 请求时,即通过上述方式选择一个最佳的服务器,并对报文中目标IP地址进行

四层and七层负载均衡

四层负载/七层负载 在常规运维工作中,经常会运用到负载均衡服务.负载均衡分为四层负载和七层负载,那么这两者之间有什么不同? 废话不多说,详解如下: 1.    什么是负载均衡 1)负载均衡(Load Balance)建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性.负载均衡有两方面的含义:首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间:其次,单个重负载的运算分担到多台节

四层负载均衡与七层负载均衡区别

四层负载均衡:仅仅建立一次TCP连接 七层负载均衡:负载均衡器与客户端及后端的服务器会分别建立一个TCP连接.即两次TCP连接. (一) 简单理解四层和七层负载均衡: ① 所谓四层就是基于IP+端口的负载均衡:七层就是基于URL等应用层信息的负载均衡:同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡. 换句换说,二层负载均衡会通过一个虚拟MAC地址接收请求,然后再分配到真实的MAC地址:三层负载均衡会通过一个虚拟IP地址接收请求,然后再分配到真实的IP地址:四层通过虚拟IP+端