一、pod ip
每個pod 都有自己的 ip 位址,存在於
pod scope。
當 controller 用新 pod 替代發生故障的 pod 時,新 pod 會分配到新的 ip 位址。
乙個pod 的 容器們containers 共享 networknamespaces, 包括ip 位址。這意味著在乙個pod 裡的容器們能夠通過
localhost
訪問彼此的埠。
二、service的三種埠
service 從邏輯上代表了一組 pod,具體是哪些 pod 則是由 label 來挑選。service 有自己 ip,而且這個 ip 是不變的。
port是
service暴露在cluster ip上的埠,:port 是提供給集群
內部客戶訪問service的入口。
nodeport
是k8s提供給集群外部客戶訪問service入口的一種方式,:nodeport 是提供給集群
外部客戶訪問service的入口。
targetport是pod上的埠,從port和nodeport上到來的資料最終經過kube-proxy流入到後端pod的targetport上
進入容器。
port、nodeport總結:
port和nodeport都是service的埠,前者暴露給集群內客戶訪問服務,後者暴露給集群外客戶訪問服務。從這兩個埠到來的資料都需要經過反向**kube-proxy流入後端pod的targetpod,從而到達pod上的容器內。
三、如何部署服務
參考 建立自己的物件(可能是部署deployment、replicationcontroller、frameworkcontroller等),可以設定副本數
apiversion: v1
kind: service
metadata:
name: myweb
spec:
ports:
- name: myweb-svc
//埠名稱,service是必須指定埠名稱的
port:
8080
//service的埠號
targetport:
8080
//容器暴露的埠號
nodeport:
31111
//node的真實埠號
selector:
type:
nodeport
把上述配置寫進myweb-svc.yaml檔案,通過kubectl create -f
myweb-svc.yaml 建立service物件
四、訪問服務
集群內部訪問服務
$ kubectl get svc | grep myweb
或$ kubectl describe svc myweb 檢視clusterip+port
然後$ telnet clusterip port
2. 集群外部訪問服務
選擇副本中的乙個pod,$
kubectl get pods | grep myweb
然後 $ kubectl describe pod 檢視node ip
node ip + :nodeport在外部訪問服務
K8S 中通過 service 訪問外部的資源
在工作時碰到乙個場景,k8s中的容器需要訪問外部的 es 服務和 kibana,若把 es 和 kibana 的配置以固定ip的形式寫入配置檔案中,萬一 es 和 kibana 搬遷,ip 位址變更那改起來會非常不靈活和容易遺漏。這時我們可以使用 k8s 的 service。外部的 es ip為 1...
k8s 之 Service 詳解(一)
service用途 service 為後端pod提供一組負載均衡 建立服務 kubectl expose 快速建立服務 kubctl get svc 檢視服務資源 cluster ip 顯示集群ip,只能在集群內部可以被訪問,服務的主要目標就是使集群內部的pod可以訪問這組pod。targetpor...
K8S中Service屬性解釋
service的yaml檔案簡單解釋 apiversion v1 kind service 型別 metadata 元資料 name details service的名稱 labels 自定義標籤屬性列表 details service details spec 詳細描述 ports service...