概述

在federation v2多集群环境中,通过前面几篇文章的介绍,我们可以很容易的进行服务多集群部署,考虑到业务部署和容灾需要,我们通常需要调整服务在各个集群的流量分布。本文下面简单介绍如何在阿里云上进行多集群流量调度。

环境准备

参考容器服务kubernetes federation v2实践一:基于External-DNS的多集群Ingress DNS实践 进行两个联邦集群的join,完成External-DNS、FederatedDeployment、FederatedService、FederatedIngress和IngressDNSRecord的部署,域名解析详情如下:

kubectl get ingress -n test-namespace --context cluster1
NAME HOSTS ADDRESS PORTS AGE
test-ingress * 39.97.196.33 80 107m kubectl get ingress -n test-namespace --context cluster2
NAME HOSTS ADDRESS PORTS AGE
test-ingress * 39.96.244.3 80 107m dig +short @dns7.hichina.com ingress-example.example-domain.club
39.97.196.33
39.96.244.3

注意【ingress-example.example-domain.club】为测试域名,请注意替换成自己在阿里云上购买的域名。

按流量配比分流

通常,我们希望根据各个集群的服务状态进行流量调整,当某一个集群服务全部挂掉时可以快速的将流量迁移至其他集群,保证服务的可用性。下图为部署架构图:

在阿里云【云解析DNS/域名解析/权重配置】中,通过配置测试域名解析权重进行流量调整,可以通过下面的脚本进行简单的验证dns解析结果:

DOMAIN=$1
COUNT=$2 for i in `seq 1 ${COUNT}`
do
dig +short @dns7.hichina.com ${DOMAIN} >> result.txt
done

通过上述脚本验证1000次域名解析,验证结果如下:

集群 权重1:1 权重1:3 权重1:99
39.97.196.33(Cluster1) 504 268 5
39.96.244.3(Cluster2) 496 732 995
解析比例 1.02 0.37 0.005

可以看出dns解析结果和配置的权重基本上还是一致的,说明我们可以通过在阿里云的云解析上配置各个集群的流量配比。

按用户所在地分流

为了为用户提供更好更快的服务,我们希望用户可以就近访问我们的服务,如下图所示,我们希望华东用户访问我们Cluster1的服务,华北用户访问Cluster2的服务。

在阿里云上,我们可以通过【云解析DNS/全局流量管理】来进行面向用户来源的流量管理。
第一步:在【云解析DNS/全局流量管理】上创建实例,然后完成相关配置。

第二步:在第一步创建的实例中创建两个地址池。

第三步:配置访问策略,配置华东用户访问华东地址池,华北用户访问华北地址池。

第四步:在【云解析DNS/域名解析】的测试域名中添加记录,类型为CNAME,值为第一步中生成的CNAME值。

第五步:分别在北京和杭州找一台服务器,执行下面脚本:

DOMAIN=$1
COUNT=$2 for i in `seq 1 ${COUNT}`
do
nslookup ${DOMAIN} | grep -v "#" | awk '/Address/{print $2}' >> result.txt
done

其中执行次数为1000次,得到下面结果:

集群 杭州 北京
39.97.196.33(Cluster1) 1000 0
39.96.244.3(Cluster2) 0 1000

可以看到,全局流量管理可以根据用户地域解析到不通集群的LB上,当然全局流量管理还有很多其他功能,例如地址池的健康检查等,大家可以亲自测试使用。

总结

本文通过DNS解析权重和全局流量管理相关配置,调整多个集群上面的流量,很好的满足不同的业务场景。

本文作者:钧博

原文链接

本文为云栖社区原创内容,未经允许不得转载。

容器服务kubernetes federation v2实践五:多集群流量调度的更多相关文章

  1. 云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障

    3月21日,由于使用阿里云服务器自建 docker swarm 集群的不稳定,我们将自建 docker swarm 集群上的所有应用切换阿里云容器服务 swarm 版(非swarm mode). 3月 ...

  2. 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes

    前言 在之前的一篇文章中,我们介绍了 如何将一个本地的 Java 应用程序直接部署到阿里云 ECS ,有不少读者反馈,如果目前已经在使用阿里云容器服务 Kubernetes 了,那该如何配合这个插件部 ...

  3. 在容器服务kubernetes上配置https

    当前容器服务Kubernetes集群支持多种应用访问的形式,最常见形式如SLB:Port,NodeIP:NodePort和域名访问等.但是Kubernetes集群默认不支持HTTPS访问,如果用户希望 ...

  4. Knative 应用在阿里云容器服务上的最佳实践

    作者|元毅 阿里云智能事业群高级开发工程师 相信通过前面几个章节的内容,大家对 Knative 有了初步的体感,那么在云原生时代如何在云上玩转 Knative?本篇内容就给你带来了 Knative 应 ...

  5. K8S学习笔记之二进制部署Kubernetes v1.13.4 高可用集群

    0x00 概述 本次采用二进制文件方式部署,本文过程写成了更详细更多可选方案的ansible部署方案 https://github.com/zhangguanzhang/Kubernetes-ansi ...

  6. Redis源码阅读(五)集群-故障迁移(上)

    Redis源码阅读(五)集群-故障迁移(上) 故障迁移是集群非常重要的功能:直白的说就是在集群中部分节点失效时,能将失效节点负责的键值对迁移到其他节点上,从而保证整个集群系统在部分节点失效后没有丢失数 ...

  7. kubernetes API 访问控制在阿里云容器服务(ACK)上的实践

    提起K8s API的访问控制,很多同学应该都会想到RBAC,这是K8s用来做权限控制的方法,但是K8s对API的访问控制却不止于此,今天我们就来简单介绍下K8s的访问控制以及ACK如何利用这套方法提供 ...

  8. Kubernetes实践技巧:集群升级k8s版本

    更新证书 使用 kubeadm 安装 kubernetes 集群非常方便,但是也有一个比较烦人的问题就是默认的证书有效期只有一年时间,所以需要考虑证书升级的问题,本文的演示集群版本为 v1.16.2 ...

  9. Kubernetes+Flannel 环境中部署HBase集群

    2015-12-14注:加入新节点不更改运行节点参数需求已满足,将在后续文章中陆续总结. 注:目前方案不满足加入新节点(master节点或regionserver节点)而不更改已运行节点的参数的需求, ...

随机推荐

  1. spring基于xml的声明式事务控制配置步骤

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  2. oracle定制定时执行任务

    1.引言 定制定时执行的任务有两种形式,系统级别和数据库级别, 从操作系统级别来讲, windows系统我们可以使用任务计划来实现, 对于winXP系统,设置步骤如下,开始---设置---控制面板-- ...

  3. day37 02-Hibernate二级缓存:二级缓存的散装数据

    一级缓存存放的是对象的地址.把对象的地址缓存下来了.二级缓存里面存放的是对象的散装数据.你再去获取的时候,因为一级缓存的生命周期结束了,它会从二级缓存中获取.从二级缓存中获取,因为它又会得到一个对象. ...

  4. css不定高图文垂直居中的三种方法

    html部分 <div class="box"> <img class="img" src="http://p2.so.qhmsg. ...

  5. Python科学计算生态圈--Pandas

  6. leetcode 350 easy

    350. Intersection of Two Arrays II class Solution { public: vector<int> intersect(vector<in ...

  7. 产生冠军 HDU - 2094 (拓扑排序)

    分析: 当有且只有一个节点入度为0时,该节点即为冠军,否则不能产生冠军.所以以下代码中只要入度大于0的无论是几都将其设置为1. #include <stdio.h> #include &l ...

  8. 建立DbLink 时报ORA-01017/ORA-02063分析及解决

    今天在11G的oracle数据库上创建DBlink连接10g的库时, 出现: ORA-01017: invalid username/password; logon denied ORA-02063: ...

  9. LintCode_111 爬楼梯

    题目 假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部? 比如n=3,中不同的方法 返回 3 1 2 3 5 8 13... step[2] = ...

  10. Directx11教程(65) 渲染到纹理

    原文:Directx11教程(65) 渲染到纹理     通常情况下,我们的render target都是后缓冲,但也可以把render target设置为一个2d 纹理,然后再通过贴图的方式,把这个 ...