1. 程式人生 > 實用技巧 >K8S service詳解

K8S service詳解

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,成功