1 阿里雲ecs不支持keepalived vip
1.1 場景描述
本來計划用keepalived配合nginx做VIP漂移,用以反代多台master的apiserver的6443端口,結果部署了vip后,該VIP在其他ecs上訪問不到,以為是自己的問題搞了好久搞不定,經工單咨詢阿里雲工程師,明確告知ecs不支持vip
截圖如下:
所以只能只用SLB來實現了,但是slb也有坑,詳見解決辦法
1.2 解決辦法和結論
- 阿里雲不能使用vip,要用vip只能走slb
- slb已經沒有免費的了,都要收費,包括內網slb
- 不支持手動指定slb的IP地址,所以之前生成的api證書之類的重新弄吧
- 要反代https(apiserver),只能用slb的四層反代
- slb四層TCP反代(7443),不能直接反代到服務提供者上(即apiserver:6443)
- 只能將 tcp反代,先代理到另一個ecs上,ecs再用nginx之類代理到apiserver
- 即slb(tcp:7443)-->nginx(tcp:7443)-->apiserver(https:6443)
(nginx和apiserver不能是同一個機器)
2 阿里雲ecs不支持flannel的gw模式
2.1 場景描述
后端node節點不多,且都在同一個vpc下面,計划直接用flannel的host-gw模式來實現容器跨節點通信
選擇原因如下:
- flannel簡單好用,node節點又不多
- gw模式只是增加了路由轉發條目,性能極高
- node節點都在同一個vpc下面,想着二層互通,正好滿足gw模式的要求
興沖沖的開始拿兩台ecs部署驗證,部署過程很簡單,路由條目也自動添加了,但是就是不能互相ping通,又是一頓自我檢查沒找出原因,工單求助阿里
主要截圖如下
2.2 結論和解決辦法
2.2.1 結論:
阿里雲同一vpc下的ecs,二層不互通
2.2.2 辦法1:添加路由
按工程師的要求,在阿里雲的路由表中添加了到各容器網段的路由指向后,pod間通信成功,但是問題在於
- 添加一個node節點就得來改一次路由表
- 路由表是全局生效的,路由器下所有ecs都能訪問pod
- 要想不全局訪問,就得在用安全組來控制
基於上訴問題,最終放棄了改方案
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的幾大坑就踩完了
有用請點個推薦,謝了您呢