• 当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接入点。
    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.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路由,及多节点负载均衡应对大流量访问策略等等

  • 相关阅读:
    哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(低年级)
    ACM_X章求和(数学)
    goj 扫雷(dfs)
    Sereja and Brackets(括号匹配)
    NOIP模拟赛 迷路
    NOIP模拟赛three(3)
    NOIP模拟赛2(two)
    NOIP模拟赛1(one)
    czy的后宫5
    [BZOJ3436]小K的农场
  • 原文地址:https://www.cnblogs.com/nongchaoer/p/6410938.html
Copyright © 2020-2023  润新知