• 用阿里云ecs部署kubernetes/K8S的坑(VIP、slb、flannel、gw模式)


    1 阿里云ecs不支持keepalived vip

    1.1 场景描述

    本来计划用keepalived配合nginx做VIP漂移,用以反代多台master的apiserver的6443端口,结果部署了vip后,该VIP在其他ecs上访问不到,以为是自己的问题搞了好久搞不定,经工单咨询阿里云工程师,明确告知ecs不支持vip

    截图如下:
    mark

    所以只能只用SLB来实现了,但是slb也有坑,详见解决办法

    1.2 解决办法和结论

    1. 阿里云不能使用vip,要用vip只能走slb
    2. slb已经没有免费的了,都要收费,包括内网slb
    3. 不支持手动指定slb的IP地址,所以之前生成的api证书之类的重新弄吧
    4. 要反代https(apiserver),只能用slb的四层反代
    5. slb四层TCP反代(7443),不能直接反代到服务提供者上(即apiserver:6443)
    6. 只能将 tcp反代,先代理到另一个ecs上,ecs再用nginx之类代理到apiserver
    7. 即slb(tcp:7443)-->nginx(tcp:7443)-->apiserver(https:6443)
      (nginx和apiserver不能是同一个机器)

    2 阿里云ecs不支持flannel的gw模式

    2.1 场景描述

    后端node节点不多,且都在同一个vpc下面,计划直接用flannel的host-gw模式来实现容器跨节点通信

    选择原因如下:

    1. flannel简单好用,node节点又不多
    2. gw模式只是增加了路由转发条目,性能极高
    3. node节点都在同一个vpc下面,想着二层互通,正好满足gw模式的要求

    兴冲冲的开始拿两台ecs部署验证,部署过程很简单,路由条目也自动添加了,但是就是不能互相ping通,又是一顿自我检查没找出原因,工单求助阿里

    主要截图如下

    mark

    2.2 结论和解决办法

    2.2.1 结论:

    阿里云同一vpc下的ecs,二层不互通

    2.2.2 办法1:添加路由

    按工程师的要求,在阿里云的路由表中添加了到各容器网段的路由指向后,pod间通信成功,但是问题在于

    1. 添加一个node节点就得来改一次路由表
    2. 路由表是全局生效的,路由器下所有ecs都能访问pod
    3. 要想不全局访问,就得在用安全组来控制

    基于上诉问题,最终放弃了改方案

    2.2.3 办法2:vxlan模式

    gw模式走不通后,只好用flannel的vxlan模式,虽说有性能损耗,但通过压测工具实测,也没有网传的30%-40%的损耗,大概在5%-10%区间,能接受

    至此在阿里云ecs部署k8s的两大坑就踩完了
    有用请点个推荐,谢了您呢

  • 相关阅读:
    Spark源码走读6——Shuffle
    Spark源码走读5——Storage
    使用Gradle构建Android应用的渠道包
    轻松搞定面试中的二叉树题目
    QT中使用微软Speech API实现语音识别
    QT 相关资源(书籍、论坛、博客等。。。)整理...
    使用Cscope阅读大型工程Linux内核的源代码教程
    搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门
    RSA算法原理(二)
    RSA算法原理(一)
  • 原文地址:https://www.cnblogs.com/noah-luo/p/13218837.html
Copyright © 2020-2023  润新知