K8S service詳解
阿新 • • 發佈:2020-11-24
1,Service 介紹
(1)Kubernetes Service從邏輯上代表了一組Pod,具體是哪些Pod則是由label來挑選。 (2)Service有自己IP,而且這個IP是不變的。- 客戶端只需要訪問Service的IP,Kubernetes則負責建立和維護Service與Pod的對映關係。
- 無論後端Pod如何變化,對客戶端不會有任何影響,因為Service沒有變
2,基本用法
(1)首先編輯一個配置檔案httpd.yml,內容如下: 多個資原始檔可以都在一個YAML中定義,用“---”分割。這裡我們將Deployment和Service都放在一個配置檔案中:- Deployment 部分:啟動了三個pod,執行httpd映象,label是run:httpd,service將會用這個label來挑選pod。
- Service 部分:挑選那些label為run:httpd的pod作為service後端的,並且將8080埠對映到pod的80埠。
[root@k8s-master deploy]# cat deploy.yaml apiVersion: apps/v1 kind: Deployment metadata: name: httpd spec: selector: matchLabels: run: httpd replicas: 3 template: metadata: labels: run: httpd spec: containers: - name: httpd image: httpd ports: - containerPort: 80 --- apiVersion: v1 # v1是service的apiversion kind: Service # 當前資源的型別為 Service。 metadata: name: httpd-svc # Service 的名字為 httpd-svc。 spec: selector: # elector 指明挑選那些 label 為 run: httpd 的 Pod 作為 Service 的後端。 run: httpd ports: # 將 Service 的 8080 埠對映到 Pod 的 80 埠,使用 TCP 協議。 - protocol: TCP port: 8080 targetPort: 80
(2)、檢視建立的pods,可以看到目前啟動了三個pod,pod分配了各自的IP,這些IP只能被kubernetes Cluster中的容器和節點訪問
(3)、檢視svc,檢視到被分配的ip型別為ClusterIP,值為10.111.30.121
(4)、ping一下ip發現是不通的
(5)、clusetIp只能是預設在叢集內部被curl,在叢集外部是無法訪問的,叢集外部訪問錯誤
3、建立叢集外部訪問的service,NodePort型別
(1)、要啟用NodePort,首先我們需要在Service配置中新增type: NodePort。
(2)、檢視建立好的nodeport型別的service
(3)、測試Cluster外部可以通過<NodeIP>:<NodePort>訪問Service,成功