【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡

【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡 3C/資訊/通訊/網路 GCP-google cloud platform Linux 架站 資訊安全 靈異現象&疑難雜症

當我們把系統部署在K8S(Kubernates)的環境中

需要設定對外PORT與IP才能對外提供服務

對於這點, 我們只需要在需要開放的容器設定公開, 再選擇負載平衡器就可以了( http://mshw.info/?p=22463 )

但你可能會發現

這樣產生的服務只有外部網路的IP, 如果被有心人士取得, 可能會造成資安的問題

所以我們會比較希望將不需要對外的服務利用內部網路做連結

然而這個GKE的介面, 卻沒辦法設定內部網路IP

好在, 這個問題還是可以解決的…

 

首先呢, 我們可以先進入我們想要設定服務的GKE叢集

點選連結

【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡 3C/資訊/通訊/網路 GCP-google cloud platform Linux 架站 資訊安全 靈異現象&疑難雜症

 

這裡使用GCP附送的免費Cloud Shell來做操作(類似免費的有限空間Linux)

照理說使用GCP的SDK應該也是可以在本地做, 不過感覺有點麻煩, 使用Cloud Shell應該比較簡單

但這個有使用時間的問題, 一周好像免費50小時?? 之前遇過一次, 不過忘了

【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡 3C/資訊/通訊/網路 GCP-google cloud platform Linux 架站 資訊安全 靈異現象&疑難雜症

 

點在Cloud Shell中執行

一開始需要授權, 點選授權, 接著就可以進入

【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡 3C/資訊/通訊/網路 GCP-google cloud platform Linux 架站 資訊安全 靈異現象&疑難雜症

 

其實這個指令是用來切換K8s的群集

以這條命令資料來說, 就是切換位於asia-southeast1-a區域, 專案xxxx的it-test群集

就改成自己需要的群集

【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡 3C/資訊/通訊/網路 GCP-google cloud platform Linux 架站 資訊安全 靈異現象&疑難雜症

 

顯示切換到it-test成功

【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡 3C/資訊/通訊/網路 GCP-google cloud platform Linux 架站 資訊安全 靈異現象&疑難雜症

 

輸入kubectl get pod

可以查看目前這個群集部署的系統

以這個部分來說, 水哥部署了一個nginx容器當作測試

【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡 3C/資訊/通訊/網路 GCP-google cloud platform Linux 架站 資訊安全 靈異現象&疑難雜症

 

那我們需要針對nginx開啟對外Port與IP才能提供服務

這裡可以看到已經開了兩個LoadBalancer, 分別是使用35.247.177.243與10.148.15.213做為External-IP對外服務

其中10.148.15.213為內部IP, 也就是我們這次想要實現的

【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡 3C/資訊/通訊/網路 GCP-google cloud platform Linux 架站 資訊安全 靈異現象&疑難雜症

 

而從介面的部分來看則是這樣

可以比較明顯的看到一個顯示外部負載平衡器, 一個則是顯示內部負載平衡器

然而, GKE的介面不允許建立內部的…這也讓我在這裡卡很久

【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡 3C/資訊/通訊/網路 GCP-google cloud platform Linux 架站 資訊安全 靈異現象&疑難雜症

那要怎麼做呢?

我們先刪除這兩個服務, 重新建立

建立方式是使用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

【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡 3C/資訊/通訊/網路 GCP-google cloud platform Linux 架站 資訊安全 靈異現象&疑難雜症

 

內部的則是將剛剛的External改成Internal

其餘大致相同, 主要是要注意name不能設定重複

不然會把先建立好的負載平衡器設定蓋掉

水哥在操作時就曾經手殘改錯….><

【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡 3C/資訊/通訊/網路 GCP-google cloud platform Linux 架站 資訊安全 靈異現象&疑難雜症

 

編輯好檔案後

使用kubectl apply -f xxxxx.yaml檔案就可以建立服務

建立需要一點時間, 可以看到查詢服務的時候, 會有pending的現象

不過再怎麼久應該也會在五分鐘內建好就是

若是一直沒有取得IP, 可能就是檔案有寫錯, 要回去重新檢查

【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡 3C/資訊/通訊/網路 GCP-google cloud platform Linux 架站 資訊安全 靈異現象&疑難雜症

 

介面則是會顯示Creating Service Endpoints

值得注意的是, 如果我們有直接寫我們要用哪個IP, 這裡在端點的部分介面不會顯示pending, 會直接把IP show出, 讓人誤以為已經建立完

這個部分應該是Google的bug吧…= =

【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡 3C/資訊/通訊/網路 GCP-google cloud platform Linux 架站 資訊安全 靈異現象&疑難雜症

這兩個案例都是使用系統分配IP, 所以這裡顯示OK就是OK了

但若是自定義IP就會直接顯示OK, 但事實上可能還沒好, 記得到Cloud Shell確認, 不可盡信介面

【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡 3C/資訊/通訊/網路 GCP-google cloud platform Linux 架站 資訊安全 靈異現象&疑難雜症

 

當我們順利完成開放之後, 剛剛的pending就會顯示IP

【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡 3C/資訊/通訊/網路 GCP-google cloud platform Linux 架站 資訊安全 靈異現象&疑難雜症

 

 

接著就可以利用內網或外網的電腦主機連線測試

基本上使用內部或是外部的IP都會是一樣的顯示內容

【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡 3C/資訊/通訊/網路 GCP-google cloud platform Linux 架站 資訊安全 靈異現象&疑難雜症

 

linux則可用curl確認

有抓到內容基本就是連線成功了

【數位3C】GCP K8S(GKE, Google Kubernetes Engine)如何使用內部IP開放服務做負載平衡 3C/資訊/通訊/網路 GCP-google cloud platform Linux 架站 資訊安全 靈異現象&疑難雜症

 

大致上就是如此

如果需要使用固定的內部或是外部IP

建議先讓內部IP先自動產生後, 刪除平衡器再設定IP上去, 不然可能會有IP重複設定的問題

而外部IP的話, 則先使用自動產生, 再去外部IP設定靜態, 之後再刪除平衡器設定IP重建

平衡器就會自動帶入已經設定靜態的IP

 

有問題可以再提出討論

如果有一天我發現介面也可以設定, 應該會再來改內容吧?

請多指教, 有什麼想法都可以說