- 部署一個 demo 程式
@RestController @RequestMapping("/host") public class HostController { @GetMapping("/info") public String info() { try { InetAddress ip = InetAddress.getLocalHost(); return ip.getHostName() + " (" + ip.getHostAddress() + ")\n"; } catch (UnknownHostException e) { } return "Unknown\n"; } }這個 REST API 非常簡單,每次被呼叫就會傳回 hostname 和 ip,這樣我們就可以觀察安裝好 Kubernetes cluster 之後,倒底 Kubernetes 進行了怎麼樣的配置。部署的細節可以參考「部署 RESTful service 到 Kubernetes」,這裡假設已經部署了一個命名為 host 的 pod,並且服務名稱為 host-http。為了觀察,這裡先執行以下指令,讓 Kubernetes 把 Pod 增加為 3 個。
kubectl scale rs host --replicas=3
- IP & hostname
kubectl get pod要怎麼知道真的有 3 個 Pod ? 如上指令,可以看到紅框裡新產生的三個 Pod,並且知道這 3 個 Pod 的 hostname 分別為 host-24kw7、host-g7xdt、host-prlrl。那麼這 3 個 Pod 的 IP 呢? 如下 …
kubectl describe svc host-http這個指令會把服務的詳細內容列出來,從這裡顯示的資訊可以了解,這 3 個 Pod 的 IP 分別為 10.244.1.14、 10.244.1.16、10.244.1.17,並且知道服務對內的 IP 為 10.106.92.190 (cluster ip)。那麼對外的 IP 呢? 就是機器本身的 IP,master node 的 IP 是 192.168.0.110,來測試一下 …
curl http://192.168.0.110:32738/host/info
kubectl get pods -o wide根據上面的資訊,可以得知整個架構如下:
server.port=9080 server.servlet.context-path=/【番外篇1】
pod 隨時可以被消滅,每次建立時 IP 並不一定會一樣,pod 間要相互訪問,可以透過 cluster IP,例如:
kubectl exec host-g7xdt -- curl -s http://10.106.92.190:9080/host/info上述的指令是直接進到指定的 pod host-g7xdt,下 curl 指令。
【番外篇2】
不通過服務 (service) 的情況下與特定的 pod 通訊也是有辦法,Kubernetes 提供的轉發的機制,使用 kubectl port-forward,方法如下:
kubectl port-forward host-g7xdt 10080:9080我把外部的 port 10080 對映到 host-g7xdt 的 port 9080,執行後會如下:
接著開啟另一個 terminal,執行 curl 測看看,如下,仍可得到正確的回應。
沒有留言:
張貼留言