當我們把系統部署在K8S(Kubernates)的環境中
需要設定對外PORT與IP才能對外提供服務
對於這點, 我們只需要在需要開放的容器設定公開, 再選擇負載平衡器就可以了( http://mshw.info/?p=22463 )
但你可能會發現
這樣產生的服務只有外部網路的IP, 如果被有心人士取得, 可能會造成資安的問題
所以我們會比較希望將不需要對外的服務利用內部網路做連結
然而這個GKE的介面, 卻沒辦法設定內部網路IP
好在, 這個問題還是可以解決的…
首先呢, 我們可以先進入我們想要設定服務的GKE叢集
點選連結
這裡使用GCP附送的免費Cloud Shell來做操作(類似免費的有限空間Linux)
照理說使用GCP的SDK應該也是可以在本地做, 不過感覺有點麻煩, 使用Cloud Shell應該比較簡單
但這個有使用時間的問題, 一周好像免費50小時?? 之前遇過一次, 不過忘了
點在Cloud Shell中執行
一開始需要授權, 點選授權, 接著就可以進入
其實這個指令是用來切換K8s的群集
以這條命令資料來說, 就是切換位於asia-southeast1-a區域, 專案xxxx的it-test群集
就改成自己需要的群集
顯示切換到it-test成功
輸入kubectl get pod
可以查看目前這個群集部署的系統
以這個部分來說, 水哥部署了一個nginx容器當作測試
那我們需要針對nginx開啟對外Port與IP才能提供服務
這裡可以看到已經開了兩個LoadBalancer, 分別是使用35.247.177.243與10.148.15.213做為External-IP對外服務
其中10.148.15.213為內部IP, 也就是我們這次想要實現的
而從介面的部分來看則是這樣
可以比較明顯的看到一個顯示外部負載平衡器, 一個則是顯示內部負載平衡器
然而, GKE的介面不允許建立內部的…這也讓我在這裡卡很久
那要怎麼做呢?
我們先刪除這兩個服務, 重新建立
建立方式是使用yaml檔案
可以先利用vim建立檔案, 檔案內容則大概像是這樣
apiVersion: v1
kind: Service
metadata:
name: nginx-exlb
annotations:
cloud.google.com/load-balancer-type: “Internal”
labels:
app: nginx-1
spec:
type: LoadBalancer
loadBalancerIP: 10.148.15.213
selector:
app: nginx-1
ports:
– port: 80
targetPort: 80
protocol: TCP
其中比較重要的是metadata的name
這個代表對外平衡器的名稱, 自己設定喜歡的即可
annotatuions內最後的load-balancer-type, 設定External代表外部平衡器, 內部則是Internal
再來app則是要設定我們要開放的服務容器名稱, 這裡是nginx-1
最後要注意type: LoadBalancer這裡
若有設定loadbalancerIP, 則是會開放在想要用的IP
如果不需要, 可以使用#字號Mark掉, 系統會自動分配可用IP
而最下面的Port, 則是指內外部Port對應, 這裡是內外都使用80
若內部使用8080, 則需要將targetPort改成8080
內部的則是將剛剛的External改成Internal
其餘大致相同, 主要是要注意name不能設定重複
不然會把先建立好的負載平衡器設定蓋掉
水哥在操作時就曾經手殘改錯….><
編輯好檔案後
使用kubectl apply -f xxxxx.yaml檔案就可以建立服務
建立需要一點時間, 可以看到查詢服務的時候, 會有pending的現象
不過再怎麼久應該也會在五分鐘內建好就是
若是一直沒有取得IP, 可能就是檔案有寫錯, 要回去重新檢查
介面則是會顯示Creating Service Endpoints
值得注意的是, 如果我們有直接寫我們要用哪個IP, 這裡在端點的部分介面不會顯示pending, 會直接把IP show出, 讓人誤以為已經建立完
這個部分應該是Google的bug吧…= =
這兩個案例都是使用系統分配IP, 所以這裡顯示OK就是OK了
但若是自定義IP就會直接顯示OK, 但事實上可能還沒好, 記得到Cloud Shell確認, 不可盡信介面
當我們順利完成開放之後, 剛剛的pending就會顯示IP
接著就可以利用內網或外網的電腦主機連線測試
基本上使用內部或是外部的IP都會是一樣的顯示內容
linux則可用curl確認
有抓到內容基本就是連線成功了
大致上就是如此
如果需要使用固定的內部或是外部IP
建議先讓內部IP先自動產生後, 刪除平衡器再設定IP上去, 不然可能會有IP重複設定的問題
而外部IP的話, 則先使用自動產生, 再去外部IP設定靜態, 之後再刪除平衡器設定IP重建
平衡器就會自動帶入已經設定靜態的IP
有問題可以再提出討論
如果有一天我發現介面也可以設定, 應該會再來改內容吧?
探索更多來自 哪裡好吃哪裡去:美食避雷箴 的內容
訂閱即可透過電子郵件收到最新文章。