一個簡單的例子理解Kubernetes的三種IP地址型別
很多Kubernetes的初學者對Kubernetes裡面三種不同的IP地址和工作機制理解得不是很清楚。
本文我們通過一個最簡單的例子來學習。
用如下命令列建立一個基於nginx的deployment:
kubectl run nginx –image=nginx:maxline
用kubectl get deploy檢視成功生成的名為nginx的deployment:
此時這個deployment裡的nginx pod還無法對外界提供服務。
我們建立一個service讓外界能夠消費。使用命令列建立這樣的一個service:
kubectl expose deployment nginx –type=LoadBalancer –port=80 –target-port=80
type的型別選擇為LoadBalancer, –port指定的是80埠,意思是這個service對外界暴露出來的服務埠是80,–target-port=80,這個埠是pod內部的nginx docker容器提供服務的工作埠,預設為80。這裡實際上建立了向外界開發的80埠同nginx容器內部埠的一個對映關係。
執行完畢後,我們呼叫下面的命令列,看到了建立的service的Cluster IP和External IP。
其中external IP很好理解,這個service通過external IP加上我們前面介紹的被對映到80埠向外界提供服務:
瀏覽器裡輸入External IP http://35.241.173.27:80, 能成功訪問nginx伺服器的index.html:
而我們通過Service的Cluster IP是無法訪問這個Service提供的功能的。
我們知道Kubernetes裡的所有pod都可以彼此通訊,而不需要通過網路地址轉換(Network Address Translation-NAT),所有的節點也可以與所有的pod通訊。而Service的Cluster IP,是一個內部的IP地址,專門用於同Cluster內部的節點或者pod通訊。同外界通訊,還是通過External IP進行。
NodePort
再試試NodePort。
kubectl expose deployment nginx –type=NodePort –port=80 –target-port=80
注意看下圖的PORT欄下面顯示的型別為NodePort的埠:31375
這個埠號是Kubernetes expose命令自動生成的,範圍在30000到32767之間。如果需要修改,可以編輯api server的配置檔案:/etc/kubernetes/apiserver:
有了這個埠號,我們隨便使用一個node的IP地址,後面拼接上:31375即是外部可以消費的完整地址。
使用命令列kubectl get nodes -o wide, 在結果裡選擇任意節點的External-IP,後面加上:31375:
測試:
測試通過。
Pod的埠轉發功能
值得一提的是,有時我們出於測試的目的,需要一種簡單的辦法檢視一個pod是否能正常提供服務。如果每次通過kubectl的方式建立service就太麻煩了。
這裡介紹一種簡單的辦法:pod的埠轉發功能(port forward)。
比如我們想測試下圖get pods返回的第一個pod的功能,名稱為nginx-6f754dd4b9-74jdn:
執行命令列 kubectl port-forward pod/nginx-6f754dd4b9-74jdn 8080:80
看到提示資訊Forwarding from 127.0.0.1:8080 -> 80, 意思是把當前主機的8080埠對映到nginx pod的80工作埠:
最後,就能夠通過localhost:8080直接訪問nginx pod提供的服務了:
本文來自雲棲社群合作伙伴“汪子熙”,瞭解相關資訊可以關注微信公眾號”汪子熙”。
相關文章
- 一個簡單的「IOC」例子
- 對IP地址的個人理解
- 擼一個簡單的MVVM例子MVVM
- 隱藏IP地址的三種方法
- 改變IP地址的三種方法
- 一個簡單的netty通訊的例子Netty
- 一個最簡單的 Github workflow 例子Github
- 一個簡單的生活例子,感受TRIZ的魅力!
- WebRTC:一個視訊聊天的簡單例子Web單例
- 一個簡單的例子瞭解async跟defer
- 一個簡單的例子教會您使用javapJava
- JUnit概述及一個簡單例子單例
- Python判定IP地址合法性的三種方法Python
- 幾個例子理解不同資料型別的堆疊記憶體處理資料型別記憶體
- Unity如何連線伺服器: 一個簡單的例子Unity伺服器
- Golang切片的三種簡單使用方式及區別Golang
- SAP SEGW 事物碼裡的 ABAP 型別和 EDM 型別對映的一個具體例子型別
- spring 簡單的使用 Hikari連線池 和 jdbc連線mysql 的一個簡單例子SpringJDBCMySql單例
- 通過一個簡單的例子,瞭解 Cypress 的執行原理
- 基於 ip2region 使用 go 擴充套件的一個簡單的 IP 地址歸屬地查詢服務Go套件
- Linux禁止某個IP地址訪問的幾種方法Linux
- 簡單理解js閉包、型別引用....第一章JS型別
- python+flask 編寫一個簡單的登入介面例子PythonFlask
- python+flask編寫一個簡單的登入介面例子PythonFlask
- SAP MM採購定價過程的一個簡單例子單例
- Kubernetes EKS 叢集中的 IP 地址分配問題
- 通過一個例子學習Kubernetes裡的PersistentVolumeClaim的用法AI
- 軟考之(簡單理解盤索引地址的表示原理)索引
- 定義一個單例型別的Qml單例型別
- 透過一個具體的例子理解 npm 的 peerDependencyNPM
- 小例子理解多型多型
- SAP人工智慧服務Recast.AI的一個簡單例子人工智慧ASTAI單例
- 一個簡單例子教會你C++動態庫的用法單例C++
- Date簡單型別的setter注入型別
- 資料更改事件的三種型別事件型別
- 06-redis的三種特殊型別Redis型別
- 資料中心代理的三種型別型別
- SAP QM 三種型別的Physical Sample型別