本文主要涉及兩個鏡像:第一個是包含iptables規則變更腳本的鏡像,名稱為ali-test.test.com/app/proxy_iptables版本為 release_v0.0.1_develop,另一個是簡單應用hello-world的鏡像,名稱為ali-test.test.com/app/tutum/hello-world,版本為release_v0.0.1。其中ali-test.test.com為私有鏡像倉庫位址,app為項目名稱,第一個鏡像作為init container形式啟動。
第一個鏡像proxy_iptables:release_v0.0.1_develop,包含了對iptables的變更腳本,抽取腳本中部分指令,如下所示:
#請求轉發到proxy_port定義的端口
echo "begin pull iptables rules"
proxy_port=$1
echo "proxy port = $proxy_port"
iptables -t nat -N PROXY_REDIRECT
iptables -t nat -A PROXY_REDIRECT -p tcp -j REDIRECT --to-port "${proxy_port}"
......
下面開始通過阿裡雲控制台使用容器服務-kubernetes。控制台入口為:應用--選擇“無狀态”--選擇一個叢集開始操作(阿裡雲賬戶需要有操作權限)。步驟如下:
(1)首先建立命名空間或者使用已有命名空間
(2)點選“使用鏡像建立”,填寫應用名稱、副本數量,勾選時區同步,如圖一所示:

圖一
(3)點選“下一步”,進行容器配置,配置鏡像名稱ali-test.test.com/app/proxy_iptables,鏡像tag為release_v0.0.1_develop,所屬資源根據使用填寫。對于此應用,需要勾選Init Container。因為此鏡像僅包含了腳本,其它配置可以不用填寫,如圖二所示:
圖二
(4) 點選“添加容器”,以相同的形式,部署hello-world應用,不勾選“Init Container”,如圖三所示。接着下一步,直至建立完成。
圖三
(5) 檢視proxy_iptables容器日志,會發現容器在執行iptables指令時異常:Permission denied,如圖四所示:
圖四
解決方式如下:
打開應用的yaml檔案,在initContainer容器配置中添加:
securityContext:
   privileged: true
如圖五所示:
圖五
更新後,檢視容器日志,iptables指令可正常執行,hello-world應用啟動正常。
(6)登入hello-world應用容器,檢視iptables變更,指令如下:
檢視運作的容器資訊,并擷取container ID:
docker ps |grep lyl
檢視容器PID:
docker top $container_id
檢視iptables變更:
nsenter -t $PID -n iptables -t nat -S
通過檢視容器日志,可以看到iptables腳本變更正常執行。
至此,部署完成,Pod及container正常啟動運作。
其它說明:
k8s pod内部容器是共享網絡空間的,通過指令檢視iptables的規則,同一個pod内的多個container規則是相同的。