用阿里雲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%區間,能接受

3 阿里雲自建bind9 dns的問題

3.1 問題描述

在阿里雲服務器上二進制安裝k8s時,需要自建dns,自建的dns需要設置上級dns地址,
常規我們知道的阿里雲dns地址是:223.5.5.5和223.6.6.6
如果將這個地址設置為自建dns的上級dns地址,你會發現整個使用自建dns的服務器,都不能解析外網的,如表現為yum不能安裝軟件

3.2 問題解決

可能的原因是223.5.5.5屬於對外網地址,所以需要使用ecs提供的內網dns地址
找到內網dns的方法是:用一個自動獲取IP地址的服務器,看該服務器上獲取的dns是啥,然后配置該dns地址為bind9的上級dns,該地址大概率是:

nameserver 100.100.2.136
nameserver 100.100.2.138

至此在阿里雲ecs部署k8s的幾大坑就踩完了
有用請點個推薦,謝了您呢


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM