k8s建立service,令外部埠訪問

2021-10-23 07:47:49 字數 1729 閱讀 6104

一、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...