博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
当Kubernets遇上阿里云 -之七层负载均衡(一).
阅读量:6999 次
发布时间:2019-06-27

本文共 3568 字,大约阅读时间需要 11 分钟。

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

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

前置条件

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

七层负载均衡服务拓扑

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

ali_ingress_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.ymlroot@iZbp:~# vi nginxcontroller-0.9.0-beta.ymlroot@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.ymlroot@iZbp:~# vi alicloud-slb-4nginxingress.ymlroot@iZbp:~# kubectl apply -f alicloud-slb-4nginxingress.ymlroot@iZbp:~# kubectl get svc --namespace=kube-systemNAME                   CLUSTER-IP     EXTERNAL-IP    PORT(S)                      AGEdefault-http-backend   172.19.7.83    
80/TCP 14hnginx-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.ymlroot@iZbp:~# vi echoservers.ymlroot@iZbp:~# kubectl apply -f echoservers.ymlroot@iZbp:~# kubectl get svcroot@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/v1beta1kind: Ingressmetadata:  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: 80EOFroot@iZbp:~# kubectl get ingNAME            HOSTS     ADDRESS        PORTS     AGEnginx-ingress   *         116.62.82.64   80        13h

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

小结

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

阿里云容器服务团队致力于在阿里云上推广容器技术。想了解更多容器服务内容,请访问

转载地址:http://dgdvl.baihongyu.com/

你可能感兴趣的文章
Objective-c中@interface、@implementation、@protocal
查看>>
Python yield 使用浅析
查看>>
支持移动设备的图片展示插件
查看>>
php file_exists无效解决办法
查看>>
Mac Jenkins 权限问题
查看>>
查找“CDN、负载均衡、反向代理”等大型网络真实IP地址的方法
查看>>
sketchup
查看>>
批处理中的echo命令图文详解
查看>>
Chrome 自动填充的表单是淡黄色的背景,有方法自定义
查看>>
hough变换中,直线方程从XY空间转换到参数空间的转换过程
查看>>
阿里云server该数据光盘安装操作
查看>>
Onedrive 明年初基础容量缩小到5G,执行这一步骤避免(保持30G)
查看>>
IOS中NSUserDefaults的用法(轻量级本地数据存储)
查看>>
大组合取模之:1<=n<=m<=1e6,1<=p<=1e9
查看>>
百度map android sdk3.5实现定位 并跳转的指定坐标,加入标记
查看>>
Oracle VM VirtualBox技巧
查看>>
怎样自己构建一个小型的Zoomeye----从技术细节探讨到实现
查看>>
Hadoop 2.7.1 源代码目录结构分析
查看>>
《转》 Openstack Grizzly 指定 compute node 创建 instance
查看>>
[转]PhoneGap使用PushPlugin插件实现消息推送
查看>>